計算機網絡筆記------TCP傳輸控制協議(1)

概述

TCP提供一種面向連接的、可靠的字節流服務。是面向應用與進程之間的全雙工數據流通信,傳輸過程建立在穩定的網絡連接的基礎上,使用三次握手的方式建立連接,四次揮手的方式斷開連接,同時還具有流量控制的、擁塞控制等特點。其位於層次結構的傳輸層位置。

TCP連接結構

狀態變量的初始化

應用與進程在建立連接時,先是通過“三次握手”建立連接,而這一握手的過程實際是數據報文的傳輸與應答,而爲了維持這一過程就需要諸多的TCP狀態變量來描述。

套接字(Socket)

傳輸的雙方使用一種名爲套接字結構來進行端點之間的邏輯描述,其由端點處的IP地址與端口號來描述,在實際的實現中,這一結構被寫到報文段中進行用於建立連接。

緩存

當連接建立完成後,端與端之間的通信就可以進行了,在發送與接受的雙方都會設置一個緩存區域,用於暫存傳輸的報文數據,並實現異步的處理與流量控制(可以根據緩存區的情況來控制數據的接受與發送)。

綜上述,一個完整的TCP連接包含了兩個通信端,每一個通信端都含有狀態變量,套接字與緩存區,而在連接之間是以數據報文的傳輸來進行數據通信的。

報文結構

基於層次模型,TCP的報文數據是要由IP協議進行傳輸的所以,TCP的報文封裝到了IP協議的報文結構中,位於IP報文的數據段中,而TCP報文結構同樣分爲兩段,一個首部段,一個數據段。

首部結構

報文的結構以4字節32位進行對齊,前20字節爲固定的首部結構。
在這裏插入圖片描述
各個字段的描述:

  1. 源端口,16位(0~65535)發送報文端的端口號。
  2. 目的端口,16位(0~65535)目的端的端口號
  3. 序列號,32位,在數據傳輸中,由於是分段進行的數據流傳輸,所以傳輸的每一個字節會有一個編號用於數據校驗與保證可靠傳輸,這一字段爲數據段中第一個字節的編號。
  4. 確認號,32位,用作對另一方發送的tcp報文段的響應。其值是期望收到對方的下一個報文段的數據的第一個字節的序號。
  5. 數據偏移(首部長度),4位(0~15),用於描述TCP報文的首部長度(20字節固定端+可選的選項端)(數據偏移:報文段的數據起始處距離 TCP 報文段的起始處有多遠),其中長度單位是32 位字(以 4 字節爲計算單位),所以首部的範圍爲20字節到60字節之間,後面的選項段最大爲40字節。
  6. 保留段,6位,暫時未用。
  7. 標誌字段URG(緊急),URG=1,表明緊急指針字段有效。說明報文段中有緊急數據,應儘快傳送(相當於高優先級的數據)。
  8. 標誌字段ACK(確認),只有當 ACK = 1 時確認號字段纔有效。當ACK = 0 時,確認號無效。
  9. 標誌字段PSH(推送),接收端收到 PSH = 1 的報文段,就儘快地交付接收的應用進程,不再等到整個緩存都填滿了後再向上交付。
  10. 標誌字段RST(復位),當 RST = 1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接。
  11. 標誌字段SYN(同步),同步 SYN = 1 表示這是一個連接請求或連接接受報文。
  12. 標誌字段FIN(終止),用來釋放一個連接。FIN = 1 表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接。
  13. 窗口字段,16位,用來控制對方發送的數據量,單位爲字節。
  14. 校驗和,16位,奇偶校驗,此校驗和是對整個的 TCP 報文段,包括 TCP 頭部和 TCP 數據,以 16 位字進行計算所得。由發送端計算和存儲,並由接收端進行驗證。在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節的僞首部。
  15. 緊急指針,16位,指出在本報文段中緊急數據共有多少個字節(緊急數據放在本報文段數據的最前面)。

選項結構


選項的結構是以8位一字節爲對齊單位,但是選項的最大長度還要保持在上文所述的40字節,選項分爲單字節類型與多字節類型,單字節類型由一個字節組成,說明選項的類型號,多字節類型有三個部分,分別是選項的類型(1字節),長度(1字節),選項值(可能有多個字節)。下面列舉常見的幾種類型:其中kind爲0的時候表示選項表結束。

  1. 類型1是空操作項,一般用於填充對齊。
  2. 類型2最大報文段長度,連接初始化的時候,雙方會使用該選項來確定傳輸中報文的最大長度(Max Segment Size,MSS),一般設置爲MTU-40(Maximum Transmission Unit,MTU,最大傳輸單元,指一種通信協議的某一層上面所能通過的最大數據包大小),40是IP報文與TCP報文的頭部大小。選項總長4字節。
  3. 類型3窗口擴大因子,連接的初始化的時候,使用這一選項來進行窗口擴大因子的確認。在實際的數據傳輸中爲了獲得更大的吞吐率,窗口會在適時的時候進行擴大,新的窗口值(W)使原有窗口值(w)左移選項中的位數(o)後得到的:W=w<<o(乘以2的o次方)(o的取值最大爲14)。選項總長3字節。
  4. 類型4選擇性確認,該選項用於在連接初始化時表示是否支持選擇性確技術(當出現數據包丟失時,TCP會將最後確認的報文後續的所有報文重發,但是在這些報文中往往有部分已近被接收了,所以通過選擇性的告知發送方那些已經接收到了,來提高傳輸效率,避免重複發送)。選項總長2字節。
  5. 類型5是選擇性確認的具體確認選項,該選項中包含了已收到的不連續的數據塊,每一塊由兩個部分組成,分別是數據塊最左邊的報文序號,和數據塊最右邊的報文序號,一個序號佔4字節,一個數據塊佔8字節(總體長度還在40字節內)。選項的總長度爲8n+2,n爲數據塊的數量。
  6. 類型8時間戳,分爲時間戳字段與回顯時間戳字段,每個字段4字節,分別表示發送時的時間戳與接受時的時間戳,在接受方發送應答報文時會把接收時的時間戳發回,由此可以計算通信雙方之間的迴路時間(Round Trip Time,RTT),選項的總長度爲10。

填充字段

在報文的頭部結尾,爲了保持字節的對齊,會在末尾進行字段的填充。這一字段爲填充字段。

數據

緊跟着報文頭部後面的就是數據部分了,這一段就是報文信息的主體部分,相關的數據長度已經在頭部中確定好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章