C++面試題記錄(網絡)

TCP與UDP區別

1. TCP面向連接,UDP無連接,所以UDP數據傳輸效率更高

2.UDP可以支持一對一、一對多、多對一、多對多通信,TCP只能一對一

3. TCP需要在端系統維護連接狀態,包括緩存,序號,確認號,擁塞控制參數等,UDP不維護

4.TCP首部20字節,UDP首部8字節

5.UDP沒有擁塞控制,應用層對于數據發送的控制更靈活,某些應用需要穩定速率發送,允許少量丟失,UDP可以穩定發送不受網絡擁塞程度影響

6. TCP是可靠交付,UDP不保證可靠傳輸,但可以在應用層做出自己的可靠性機制

7.TCP傳輸的是報文段,應用層數據視為字節流,傳輸時可能分片也可能多報文合并傳輸,UDP傳的是用戶數據報,由應用層決定多長,不合不拆

TCP連接建立

服務器進入LISTEN(監聽)狀態后,客戶端可以發送連接請求。這個連接請求報文段SYN同步位設置1,初始序號seq=x,不攜帶數據但消耗一個序號。 發送后客戶端進入SYN-SENT(同步已發送)

服務器如果同意連接,發回確認報文段并分配資源。 確認報文段SYN=1,ACK=1,確認號ack=x+1,同時也選擇自己的初始序號seq=y。確認報文也不攜帶數據,消耗一個序號。 發送確認后服務器進入SYN-RCVD(同步確認)

客戶端收到確認后向服務器發出確認,并為連接分配資源。確認報文段ACK=1,seq=x+1,ack=y+1該報文可以攜帶數據,如果攜帶數據消耗一個序號,不攜帶數據不消耗序號。發送確認后客戶端進入ESTABLISHED(連接建立)

服務器收到客戶端確認后進入ESTABLISHED(連接建立)

(由于服務器接收到連接請求,如果同意就分配資源,那么多個客戶機只發連接請求,但不回應服務器確認報文,就會導致服務器資源消耗盡,稱為SYN洪泛攻擊)

TCP連接釋放

客戶端發送連接釋放報文段,然后停止發送數據。報文段FIN設置為1,序號seq=u,(u是客戶端發送最后一個數據字節的序號+1),FIN可攜帶數據,無論有沒有攜帶都消耗一個序號。發送完報文段后客戶端進入FIN-WAIT-1(終止等待1)

服務器發出確認報文段,ACK=1,確認號ack=u+1,序號seq=v,(v是此tcp連接的服務器發送的最后一個數據字節的序號+1)。服務器發送確認后進入CLOSE-WAIT(關閉等待),這個狀態下還會繼續向客戶端發送未完成的數據

客戶端接收到服務器的確認報文后,進入FIN-WAIT-2(終止等待2),直到服務器發完想發的數據

如果服務器發送完想發的數據或者根本沒有數據要發,就發出連接釋放報文段。報文段FIN=1,ACK=1,ack=u+1,seq=w (seq=w是因為服務器發送了未完成的數據)。發送連接釋放報文段后服務器進入LAST-ACK(最后確認)

客戶機收到連接釋放報文段,向服務器發出確認。確認報文段ACK=1,seq=u+1,ack=w+1。發送確認后,進入TIME-WAIT(定時等待) ,開始計時,如果經過2個最長報文段壽命(2MSL),都沒有接收到服務器重傳的連接釋放報文段,客戶機就可以安心進入CLOSED(連接關閉)

服務器接收到客戶機連接釋放的確認報文后進入CLOSED,如果一直沒接到連接釋放的確認報文,就重發連接釋放報文段。

套接字通信(socket)

一般網絡通信有兩種方式,應用層給傳輸層TCP傳報文段或者給UDP傳用戶數據報。為了方便使用傳輸層的兩個協議才產生socket通信。套接字其實就是系統提供的網絡編程接口,使得我們不用考慮建立連接的細節就能使用網絡通信。兩個進程通信,各使用一個套接字,套接字含IP地址,端口,通信協議,還可以支持加密,方便我們使用網絡。socket套接字支持使用TCP和UDP,還可以不用這兩種協議,而是自己控制傳輸方法。通過套接字可以創建TCP或者UDP連接。

winsock建立連接的主要實現步驟?

??? 服務器端:socket()建立套接字,綁定(bind)端口并監聽(listen)連接,用accept()等待客戶端連接, accept()發現有客戶端連接,建立一個新的套接字接收。該新產生的套接字使用send()和recv()寫讀數據,直至數據交換完畢,closesocket()關閉套接字。

??? 客戶端:socket()建立套接字,連接(connect)服務器,連接上后使用send()和recv(),在套接字上寫讀數據,直至數據交換完畢,closesocket()關閉套接字。

??? 套接字關閉時有兩個函數,close和shutdown,close使引用計數減1,計數為0釋放套接字,未發送的數據仍會繼續發;shutdown切斷連接,但沒有釋放socket

套接字三種類型

流式socket(tcp傳輸),數據報式(udp傳輸),原始socket(可以讀寫內核沒有處理的IP數據包)

TCP為什么不是兩次連接?而是三次握手?

如果A與B兩個進程通信,如果僅是兩次連接。可能出現的一種情況就是:A發送完請報文以后,由于網絡情況不好,出現了網絡擁塞,即B延時很長時間后收到報文,即此時A將此報文認定為失效的報文。B收到報文后,會向A發起連接。此時兩次握手完畢,B會認為已經建立了連接可以通信,B會一直等到A發送的連接請求,而A對失效的報文回復自然不會處理。依次會陷入B忙等的僵局,造成資源的浪費。

FTP的連接模式

FTP是應用層協議,傳輸層使用TCP。工作時使用兩個并行TCP連接,控制連接端口號21,數據練級端口號20.

服務器監聽21號端口,等待連接。控制連接用來傳控制信息,如連接請求,傳送請求等,以7位ASCII碼格式傳送。

建立控制連接后,如果服務器控制進程接收到客戶端文件傳送請求,就建立數據傳送進程和數據連接,由兩個數據傳送進程進行數據通信。

建立的數據連接有主動模式和被動模式。主動模式是客戶端開放一個端口,發送控制信息給服務器,由服務器20號端口連接客戶端開放的端口。被動模式是客戶端發控制命令告訴服務器使用被動模式,服務器開放一個隨機端口并高斯客戶端,客戶端再連接到此端口。

(使用被動模式一般是因為客戶端防火墻對于開放端口有影響)

HTTP過程

http是應用層協議,本身無連接,在傳輸層使用tcp連接。

訪問www服務器時,首先是DNS域名解析,獲取ip地址后瀏覽器向服務器發tcp連接請求,建立tcp連接后,瀏覽器向服務器發http請求,服務器返回http響應,瀏覽器對信息進行解釋,顯示web頁面,最后釋放tcp連接。

http可以使用持久連接和非持久連接,持久連接就是在獲取服務器響應后不釋放tcp連接,可以繼續使用此連接向服務器請求數據。

對于持久連接可以分流水線方式請求和非流水線方式請求。流水線方式是沒收到響應前可以繼續發請求,非流水線方式要求接收到響應才能繼續發下一個請求。

Cookie原理

用戶瀏覽某個網站,服務器為用戶產生Cookie,包含一些信息,如用戶的標識符、會話ID、用戶偏好等,通常以“名/值”對(name-value pairs)的形式存儲。接著返回的響應報文添加一個Set-cookie字段將cookie一起返回。

用戶接收到響應,Cookie文件保存在本地

下次訪問時,將之前存儲的Cookie發送回服務器。這通常通過HTTP請求頭中的Cookie字段完成。

GET和POST

GET方法用于從Web服務器請求數據。在使用GET方法時,瀏覽器向Web服務器發送一個請求,Web服務器將響應數據發送回瀏覽器。GET方法是無狀態的,也就是說每個請求都是獨立的,沒有前后關系。GET方法通常用于請求靜態數據,如HTML頁面、圖片和CSS文件等。

POST方法用于向Web服務器提交數據。在使用POST方法時,瀏覽器將數據打包并發送到Web服務器。Web服務器收到數據后,可以根據數據執行相應的操作,并向瀏覽器發送響應。POST方法是有狀態的,也就是說請求和響應之間存在關系,請求和響應之間的數據可以互相傳遞。POST方法通常用于向Web服務器提交表單數據和上傳文件等操作。

在使用GET方法時,瀏覽器將請求的參數附加到URL的末尾,以“?”號開始,并用“&”符號將多個參數連接在一起。

在使用POST方法時,瀏覽器將要請求的數據打包并放置在HTTP請求體中。請求頭中會包含請求體的大小等信息。

GET方法將數據附加到URL中,因此數據大小有限制。在URL中,只能傳遞ASCII字符,并且URL的長度有限制。

POST方法將數據放在HTTP請求體中,因此數據大小不受限制。但是,Web服務器和Web應用程序可能會對POST請求的大小進行限制。

GET方法的參數是通過URL傳遞的,因此可以很容易地在瀏覽器地址欄中看到。

POST方法將數據放在HTTP請求體中,因此相對于GET方法更加安全。但是請求體可能被捕獲。

GET方法具有緩存機制。如果瀏覽器請求的資源已經在本地緩存中存在,瀏覽器將使用緩存而不是向服務器發送請求。這可以提高Web應用程序的性能。

POST方法沒有緩存機制。每次使用POST方法發送請求時,瀏覽器都會向Web服務器發送請求,Web服務器也會重新處理請求。因此,POST方法的性能相對于GET方法較低。

常見的 HTTP 狀態碼有哪些

1xx??????? 信息,服務器收到請求,需要請求者繼續執行操作

2xx??????? 成功,操作被成功接收并處理

3xx??????? 重定向,需要進一步的操作以完成請求

4xx??????? 客戶端錯誤,請求包含語法錯誤或無法完成請求

5xx??????? 服務器錯誤,服務器在處理請求的過程中發生了錯誤

HTTPS HTTP 的區別

? ? ?HTTPS 相較 HTTP 不是一種新協議,只是在 HTTP 通信接口部分使用了 SSL和TLS協議來實現。使得?HTTP 先與 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接與 TCP 通信。

??? 1.SSL安全協議

??? HTTP 信息是明?傳輸,存在安全?險的問題。

??? HTTPS 在TCP 和 HTTP ?絡層之間加?了 SSL/TLS 安全協議,使得報?能夠加密傳輸。

??? 2.建立連接

??? HTTP 連接建?相對簡單, TCP 三次握?之后便可進? HTTP 的報?傳輸。

??? HTTPS 在 TCP 三次握?之后,還需進? SSL/TLS 的握?過程,才可進?加密報?傳輸。

??? 3.端口號

??? HTTP 的端?號是 80。

??? HTTPS 的端?號是 443。

??? 4.CA證書

??? HTTPS 協議需要向 CA(證書權威。機構)申請數字證書來保證服務器的身份是可信的。

https的請求過程?

??? 用戶在瀏覽器里輸入一個https網址,然后連接到server的443端口。

??? 服務器將自己的數字證書(含有公鑰)發送給客戶端。

??? 客戶端收到服務器端的數字證書之后,會對其進行檢查,如果不通過,則彈出警告框。如果證書沒問題,則生成一個密鑰(對稱加密),用證書的公鑰對它加密。

??? 客戶端會發起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發送給服務器。

??? 服務器接收到客戶端發來的密文之后,會用自己的私鑰對其進行非對稱解密,解密之后得到客戶端密鑰,然后用客戶端密鑰對返回數據進行對稱加密,這樣數據就變成了密文。

??? 服務器將加密后的密文返回給客戶端。

??? 客戶端收到服務器發返回的密文,用自己的密鑰(客戶端密鑰)對其進行對稱解密,得到服務器返回的數據。

對稱加密和非對稱加密的區別

??? 對稱加密算法:加密和解密使用相同密鑰的加密算法。常見的對稱加密算法有AES、3DES、DES、RC5、RC6等。

??? 非對稱加密算法:非對稱加密算法需要兩個密鑰(公開密鑰和私有密鑰)。公鑰與私鑰是成對存在的,如果用公鑰對數據進行加密,只有對應的私鑰才能解密。主要的非對稱加密算法有:RSA、Elgamal、DSA、D-H、ECC。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15835.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

防火墻——域網絡、專用網絡、公用網絡

在防火墻設置中,域網絡、專用網絡和公用網絡是指計算機連接到網絡時所處的不同環境。每種環境都有不同的安全級別和配置。 1、域網絡(寬松) 域網絡是指計算機加入了一個Windows域(Domain)環境,這通常在企業…

程序員的那些經典段子

哈嘍,大家好,我是明智~ 本周咱們已經解決了在面試中經常碰到的OOM問題: 《美團一面,發生OOM了,程序還能繼續運行嗎?》 《美團一面:碰到過OOM嗎?你是怎么處理的&#xff1…

白嫖的在線工具類寶藏網站清單,快點擊進來收藏一波

簡單整理了一下自己日常經常使用的10個免費工具網站,建議點贊關注收藏,快點分享給小伙伴們! 1.奶牛快傳:用戶體驗更好的網盤工具。 https://cowtransfer.com/ 今年開始使用的一款網盤工具,和百度網盤類似,叫奶牛快傳,如…

【設計模式】——裝飾模式(包裝器模式)

💻博主現有專欄: C51單片機(STC89C516),c語言,c,離散數學,算法設計與分析,數據結構,Python,Java基礎,MySQL,linux&#xf…

數據結構--二叉搜索樹

目錄 二叉搜索樹的概念 二叉樹的實現 結點類 函數接口總覽 實現二叉樹 二叉搜索樹的應用 K模型 KV模型 二叉搜索樹的性能分析 二叉搜索樹的概念 二叉搜索樹(Binary Search Tree,簡稱BST)是一種特殊的二叉樹,其具有以下幾…

數據庫(6)——數據類型

SQL標準常用的數據類型有: 數據類型含義CHAR(n),CHARACTER(n)長度為n的定長字符串VARCHAR(n)最大長度為n的變長字符串CLOB字符串大對象BLOB二進制大對象SMALLINT2字節 短整數INT , INTEGER4字節 整數BIGINT8字節 大整數FLOAT(n)精度為n的浮點…

6818 android 修改開機 logo, 編譯腳本分析

問題: 客戶需要去掉 android5.1 的開機logo. 說明: 對于Android5.1 來說,uboot 與kernel 的logo 是一個。 過程: 其實對于開機logo 的修改很簡單,直接參考廠家手冊就可以了。 這是 android4.4 的開機logo 的修改&…

設計一個代辦功能模塊

目錄 1. 需求分析2. 數據庫設計用戶表(Users Table)代辦任務表(Tasks Table)訂單表(Orders Table)評價表(Reviews Table) 3. 功能實現創建代辦任務前端部分后端部分 接受代辦任務前端…

產品經理-需求收集(二)

1. 什么是需求 指在一定的時期中,一定場景中,無論是心理上還是生理上的,用戶有著某種“需要”,這種“需要”用戶自己不一定知道的,有了這種“需要”后用戶就有做某件事情的動機并促使達到其某種目的,這也就…

FPGA實現多路并行dds

目錄 基本原理 verilog代碼 仿真結果? 基本原理 多路并行dds,傳統DDS的局限性在于輸出頻率有限。根據奈奎斯特采樣定理,單路DDS的輸出頻率應小于系統時鐘頻率的一半。但是在很多地方,要使采樣率保持一致,所以,為了…

【CTF Web】CTFShow web7 Writeup(SQL注入+PHP+進制轉換)

web7 1 阿呆得到最高指示&#xff0c;如果還出問題&#xff0c;就卷鋪蓋滾蛋&#xff0c;阿呆心在流血。 解法 注意到&#xff1a; <!-- flag in id 1000 -->攔截很多種字符&#xff0c;連 select 也不給用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\…

路徑規劃算法的復雜度

通常通過以下指標來衡量&#xff1a; 時間復雜度&#xff1a;這是評估算法執行所需時間的量度。它通常用大O符號表示&#xff0c;給出了算法運行時間隨著輸入規模增長的增長率。例如&#xff0c;一個時間復雜度為O(n^2)的算法在處理大規模輸入時會比時間復雜度為O(n log n)的算…

PostgreSQL的擴展(extensions)-常用的擴展之pg_plan_advsr

PostgreSQL的擴展&#xff08;extensions&#xff09;-常用的擴展之pg_plan_advsr pg_plan_advsr 是 PostgreSQL 社區中的一個擴展&#xff0c;用于分析和改進查詢執行計劃。它能夠自動識別哪些查詢執行緩慢&#xff0c;并提供優化建議&#xff0c;以提高查詢性能。pg_plan_ad…

AI時代存儲大戰,NAND閃存市場風云再起!

隨著人工智能&#xff08;AI&#xff09;相關半導體對高帶寬存儲&#xff08;HBM&#xff09;需求的推動&#xff0c;NAND閃存市場也感受到了這一趨勢的影響。 據《Business Korea》援引行業消息來源稱&#xff0c;NAND閃存市場的競爭正在加劇&#xff0c;而存儲巨頭三星和SK海…

CSP俄羅斯方塊(簡單易懂)

開始將題目理解成了&#xff0c;開始的列應該是從輸入圖案的最左端開始計算&#xff0c;將前面所有的空列都刪掉&#xff0c;代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

Redis的持久化方式:

Redis提供了兩種數據持久化的方式&#xff1a; RDB 該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。 AOF 該機制將以日志的形式記錄服務器所處理的每一個寫操作。 在Redis服務器啟動之初會讀取文件來重新構建數據庫&#xff0c;以保證啟動后數據庫中的數據是完…

leedcode【203】. 移除鏈表元素——Java解法

Problem: 203. 移除鏈表元素 題目思路解題方法復雜度Code效果 題目 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val…

OS復習筆記ch6-1

死鎖的原理 定義 一組進程中&#xff0c;其中每個進程因等待事件而阻塞&#xff0c;且所等待的事件只能被這組進程中的另一阻塞進程激發稱之為死鎖。 舉例如下 四個車輛希望緊迫的希望能很快通過&#xff0c;每輛車需要兩個象限的資源&#xff0c;然而四個車都只得到一個象…

golang調用aliyun的語音通話服務,復制直接使用

golang調用aliyun的語音通話服務 通過API使用語音通知/語音驗證碼——阿里云官方文檔SingleCallByTts - 發送語音驗證碼或文本轉語音類型的語音通知入門流程主要參數引入阿里云語音官方SDK-go版本完整代碼通過API使用語音通知/語音驗證碼——阿里云官方文檔 https://help.aliy…

電子電器架構 - AUTOSAR軟件架構介紹

電子電器架構 - AUTOSAR軟件架構介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。非必要不費力證明自己…