當前位置:聚美館>智慧生活>心理>

tcp發送數據包過程

心理 閱讀(3.31W)
tcp發送數據包過程

TCP會話的每一端都包含一個32位(bit)的序列號,該序列號被用來跟蹤該端發送的數據量。每一個包中都包含序列號,在接收端則透過確認號用來通知發送端。

TCP會話的每一端的序列號都從0開始,同樣的,確認號也從0開始,因爲此時通話還未開始,沒有通話的另一端需要確認。

之後,服務端響應客戶端的請求,響應中附帶序列號0(由於這是服務端在該次TCP會話中發送的第一個包,所以序列號爲0)和相對確認號1相同。即完成了數據包的發送

建立連接之前,服務器開始處於被動監聽狀態,客戶端處於關閉狀態。1)當客戶端調用 connect() 函數後,TCP協議會組建一個數據包,並設定 SYN 標誌位,表示該數據包是用來建立同步連接的。同時生成一個隨機數字 1000,填充“序號(Seq)”字段,(報文段1)表示該數據包的序號。完成這些工作,開始向服務器端發送數據包,客戶端就進入了SYN-SEND狀態。

2)服務器端收到數據包,檢測到已經設定了 SYN 標誌位,就知道這是客戶端發來的建立連接的“請求包”。服務器端也會組建一個數據包,並設定 SYN 和 Ack 標誌位,SYN 表示該數據包用來建立連接,ACK 用來確認收到了剛纔客戶端發送的數據包。服務器生成一個隨機數 2000,填充“序號(Seq)”字段。(報文2)2000 和客戶端數據包沒有關係。服務器將數據包發出,進入SYN-RECV狀態。

3)客戶端收到數據包,檢測到已經設定了 SYN 和 ACK 標誌位,就知道這是服務器發來的“確認包”。客戶端會檢測“確認號(Ack)”字段,看它的值是否爲 1000+1,如果是就說明連接建立成功。接下來,客戶端會繼續組建數據包,並設定 ACK 標誌位,表示客戶端正確接收了服務器發來的“確認包”。同時,將剛纔服務器發來的數據包序號(2000)加1,得到 2001。