【計算機網絡】TCP報文段你還不懂嗎?一篇文章搞清什麼是TCP報文段

本文爲借閱書籍資料,觀看他人博客總結得出,歡迎提問:

一.前期說明

在這裏插入圖片描述
TCP雖然是面向字節流的,但是在網絡中的傳輸單元確實是報文段的格式,一個TCP報文段分爲首部和數據兩個部分,而協議的全部實現都在TCP報文段的首部體現出來的 。只有先理解首部各個字段的含義,才能正確的理解TCP的工作原理。

在這裏插入圖片描述

如上圖,前20個字節是固定的,後面的4n是可變的,所以,TCP首部最小爲20字節。
在這裏插入圖片描述

二. 各個字段含義

下面來討論固定字節部分各個字段的含義:

源端口和目的端口:分別佔2字節,寫入源進程的端口號,和目的進程的端口號。TCP的分用功能就是通過端口號來實現的。

序號:佔4個字節。序號的範圍是[0 , 2^31 - 1 ] ,總共有2^32個序號。序號從0開始增長,並採用的是 mod 2^32 的增長方式(即到達最大值,又從零開始)。由於TCP是面向字節流的,所以 ,在一個TCP連接中傳輸的每一個字節流自然就按照每一個字節進行順序編號。 首部中的序號字段是指的是本報文段要發出的第一個字節的序號。

確認號:也是佔4個字節,是期待下一次發送來的報文段第一個字節的序號。如果此時確認號爲N, 則代表到N-1所有序號的數據均已正確收到。

數據偏移:佔4位,代表 TCP報文段到TCP報文段數據起始地址的距離。單位爲4字節 , 由於 4位最大值爲 15 , 而單位爲4字節,易知TCP報文段的首部最大值爲 60字節 ,而固定爲 20字節 ,所以,選項中最大爲 40字節。

保留: 佔 6位 ,目前全都置零,用作以後使用。

控制位:佔六個字節 。

  • URG:(URGent) 緊急:當 URG = 1 ,表示緊急指針字段有效,告訴系統這個報文段中有緊急的數據 。發送方TCP就把緊急數據放在本報文數據的最前面,緊急數據後面仍然是普通數據,配合緊急指針字段使用,表示 緊急數據到哪裏結束。

  • ACK(ACKnowlegment) 確認: 僅當 ACK = 1 ,此字段纔有效,TCP規定,在建立連接之後 ,所傳送的數據報文ACK都要置爲1 。

  • PUSH(push) 推送 :這個字段經常在進行可交互式的應用程序中使用比較多 ,在兩個應用進程進行通信的時候,用戶希望在鍵入一個命令之後,能夠立即得到對方的響應。這時,發送方TCP就可將PUSH 置爲 1 。發送方TCP就會立即創建一個報文段, 接收方TCP收到PUSH = 1的報文段,就儘快的交付給應用進程,不等待緩存滿了在提交給應用進程 。

  • RST復位:當RST = 1時,表明TCP連接出現了嚴重的錯誤(由於主機奔潰,或其他原因),必須釋放連接,然後在重新建立連接。

  • SYN(同步):在建立連接時使用來同步序號,當SYN = 1 ,而ACK = 0 時,表明這是一個請求連接報文, 如果對方同意連接,則在響應的報文段中使SYN = 1 和 ACK = 1 。

  • FIN (中止): 用來釋放連接 ,當數據發送完畢之後,就將FIN = 1 ,表示要求釋放連接。

在這裏插入圖片描述
窗口:佔2個字節 ,窗口的值是[ 0 , 2 ^ 16 - 1] 之間的整數。這裏的窗口字段指定的是發送本報文段一方的接收窗口。(不是自己的發送窗口)。告訴發送者,從此時的確認號算起,你能發送的最大數據量是多少,之所以要有這個概念,因爲接受方的數據緩存空間總是有限的,總之,接受方設置的窗口值,就是作爲發送方設置 自己發送窗口大小的依據。窗口一般用作 流量和擁塞控制。

這裏需要捋一下概念: 每一方都有兩個窗口 ,一個接受窗口,一個發送窗口, 而 發送方報文段中設置的窗口值,是設置接受方的發送窗口。 其實窗口是由 TCP 緩存大小決定的 。

窗口值指明瞭現在允許對方發送的數據量,窗口值是經常動態變化着的。

檢驗和:佔2個字節 ,檢驗和字段檢驗的部分包括數據報的首部和數據部分。和UDP一樣,在計算檢驗和時 ,需要加上12字節的僞首部,僞首部的格式和UDP一樣,不過不同的是,應該把UDP僞首部的第4個字段的17改爲6(由於TCP協議的版本號是6 )。 把第五個字段中的所記錄的UDP長度值改爲TCP長度值,接受方接受到此報文段之後,仍然需要加上僞首部進行檢驗。

緊急指針:佔兩個字節 , 只有控制字段URG = 1時,纔會有意義 。標識的是在這個數據報文中緊急數據的字節數,(緊急數據後後面就是普通數據)。緊急指針指出了在緊急數據末尾的位置。當所有的緊急數據處理完成之後,TCP告訴應用程序恢復到正常操作。但是,需要注意的是,就算是窗口爲零的時候,也可以發送緊急數據

選項: 長度可變 , 最長可以達到 40 字節 , 當沒有使用“選項”的時候,TCP首部的長度就是 20字節。

參考:
《計算機網絡(第七版)謝希仁著》

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