TCP/IP協議棧的封裝過程概述

技術 走向智能 2019-04-27

以傳輸層採用TCP或者UPD、網絡層採用IP、鏈路層採用Ethernet為例,可以看到TCP/IP中報文的封裝過程如上圖所示。用戶數據經過應用層協議封裝後傳遞給傳輸層,傳輸層封裝TCP頭部,交給網絡層,網絡層封裝IP頭部後,再交給數據鏈路層,數據鏈路層封裝Ethernet幀頭和幀尾,交給物理層,物理層以比特流的形式將數據發送到物理線路上。

TCP/IP協議棧的封裝過程概述

圖1 封裝過程

TCP Segment

TCP/IP協議棧的封裝過程概述

圖2

一、TCP協議概述:

TCP為應用程序提供一種面向連接的、可靠的服務。

TCP的可靠性:

  • 面向連接的傳輸
  • 最大報文段長度
  • 傳輸確認機制
  • 首部和數據的檢驗和
  • 流量控制

TCP首部格式

TCP/IP協議棧的封裝過程概述

圖3

TCP使用IP作為網絡層協議,TCP數據段被封裝在一個IP數據包內。TCP數據段由TCP Head(頭部)和TCP Data(數據)組成。

TCP最多有60個字節的首部,如果沒有任選字段,正常的長度是20字節。TCP Head如上圖標識的一些字段組成,這裡列出幾個常用的字段。

16位源端口號:TCP會為源應用程序分配一個源端口號。

16位目的端口號:目的應用程序的端口號。每個TCP段都包含源和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址可以唯一確定一個TCP連接。

32位序列號:用於標識從TCP發端向TCP收端發送的數據字節流。

32位確認序列號:確認序列號包含發送確認的一端所期望收到的下一個序號。確認序列號為上次成功收到的數據序列號加1。

4位首部長度:表示首部佔32bit字的數目。因為TCP首部的最大長度為60字節。

16位窗口大小:表示接收端期望接收的字節,由於該字段為16位,因而窗口大小最大值為65535字節。

16位檢驗和:檢驗和覆蓋了整個TCP報文段,包括TCP首部和TCP數據。該值由發端計算和存儲並由接收端進行驗證。

二、TCP的三次握手(建立連接)和四次揮手(斷開連接)

TCP連接的建立是一個三次握手的過程。如圖所示:

TCP/IP協議棧的封裝過程概述

圖4

1、請求端(通常也稱為客戶端)發送一個SYN段表示客戶期望連接服務器端口,初始序列號為a。

2、服務器發回序列號為b的SYN段作為響應。同時設置確認序號為客戶端的序列號加1(a+1)作為對客戶端的SYN報文的確認。

3、客戶端設置序列號為服務器端的序列號加1(b+1)作為對服務器端SYN報文段的確認。

這三個報文段完成TCP連接的建立。

TCP連接的建立是一個三次握手的過程,而TCP連接的終止則要經過四次握手。

如圖所示:

TCP/IP協議棧的封裝過程概述

圖5

1、請求端(通常也稱為客戶端)想終止連接則發送一個FIN段,序列號設置為a。

2、服務器迴應一個確認序號為客戶端的序列號加1(a+1)的ACK確認段,作為對客戶端的FIN報文的確認。

3、服務器端向客戶端發送一個FIN終止段(設置序列號為b,確認號為a+1)。

4、客戶端返回一個確認報文(設置序列號為b+1)作為響應。

以上四次交互完成雙方向的連接的關閉。

三、TCP滑動窗口機制:

TCP/IP協議棧的封裝過程概述

圖6

TCP滑動窗口技術通過動態改變窗口大小來調節兩臺主機間的數據傳輸。每個TCP/IP主機支持全雙工數據傳輸,因此TCP有兩個滑動窗口:一個用於接收數據,另一個用於發送數據。TCP使用肯定確認技術,其確認號指的是下一個所期待的字節。

如圖中所示以數據單方向發送為例,介紹滑動窗口如何實現流量控制。服務器端向客戶端發送4個大小為1024字節的數據段,其中發送端的窗口大小為4096,客戶端到以ACK4097響應,窗口大小調整為2048,表明客戶端(即接收端)緩衝區只能處理2048個字節的數據段。於是發送端改變其發送速率。發送接收端能夠接收的數據段大小2048的數據段。