TCP報文格式詳解


 TCP協議只定義了一種報文格式

     建立、拆除連接、傳輸數據使用同樣的報文


 TCP報文格式

TCP報文段首部(20個字節)

 源端口和目的端口:各佔2個字節,16比特的端口號加上32比特的IP地址,共同構成相當於傳輸層服務訪問點的地址,即“插口”;

 這些端口可用來將若干高層協議向下複用;

序號字段和確認序號字段:

 序號:佔4個字節,是本報文段所發送的數據部分第一個字節的序號。在TCP傳送的數據流中,每一個字節都有一個序號。例如,一報文段的序號爲300,而起數據供100字節,則下一個報文段的序號就是400;

 確認序號:佔4字節,是期望收到對方下次發送的數據的第一個字節的序號,也就是期望收到的下一個報文段的首部中的序號;

 由於序號字段有32比特長,可以對4GB的數據進行編號,這樣就可保證當序號重複使用時,舊序號的數據早已在網絡中消失了;

數據偏移字段

 數據偏移:佔4比特,表示數據開始的地方離TCP報文段的起始處有多遠。這實際上就是TCP報文段首部的長度。由於首部長度不固定,因此數據偏移字段是必要的。

 保留字段: 6比特,供今後使用,目前置爲0。

6個比特的控制字段

 緊急比特URGent:當URG=1時,表明此報文應儘快傳送,而不要按原來的排隊順序來傳送。與“緊急指針”字段配合使用,緊急指針指出在本報文段中的緊急數據的最後一個字節的序號,使接收方可以知道緊急數據共有多長;

 確認比特ACK:只有當ACK=1時,確認序號字段纔有意義;

 急迫比特PSH:當PSH=1時,表明請求遠地TCP將本報文段立即傳送給其應用層,而不要等到整個緩存都填滿了之後再向上交付。

 復位比特ReSeT:當RST=1時,表明出現嚴重差錯,必須釋放連接,然後再重建傳輸連接。復位比特還用來拒絕一個非法的報文段或拒絕打開一個連接;

 同步比特SYN:在建立連接時使用,當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,在發回的報文段中使SYN=1和ACK=1。因此,SYN=1表示這是一個連接請求或連接接受報文,而ACK的值用來區分是哪一種報文;

 終止比特FINal:用來釋放一個連接,當FIN=1時,表明欲發送的字節串已經發完,並要求釋放傳輸連接;

窗口字段

 窗口Window:佔2字節,表示報文段發送方的接收窗口,單位爲字節。此窗口告訴對方,“在未收到我的確認時,你能夠發送的數據的字節數至多是此窗口的大小。”

 通知窗口advertised window:接收端根據其接收能力許諾的窗口值,是來自接收端的流量控制。接收端將通知窗口的值放在TCP報文的首部中,傳送給對方。

 擁塞窗口congestion window:是發送端根據網絡擁塞情況得出的窗口值,是來自發送端的流量控制。

 檢驗和覆蓋了整個的TCP報文段:TCP首部和TCP數據。這是一個強制性的字段,由發端計算和存儲,由收端進行驗證。

選項字段允許每臺主機設定能夠接受的最大TCP載荷能力(缺省536字節) 。


TCP分節的封裝

 TCP的數據編號與確認

數據流、報文段和序號

 TCP通信的動作

     切割:根據適合傳輸的大小對數據流進行切割

         最大報文段長度<64Kbytes

         通常:MTU-(IP頭+TCP頭)

     復原:用報文段恢復原始數據流的字節順序

     序號:排序、查錯及數據流復原


 TCP數據流的切割與復原

報文序號

 依據數據流中的字節序號(流序號)

 報文序號爲報文段中第一字節的流序號

    如:流序號=x,長度=L的報文段,則:

          報文的序號爲x,下一報文序號爲x+L

 序號特點

   報文的順序關係

   數據流的位置,更便於流的復原

   需較大的序號空間(32bit,4Gbyte)

 例如:在一個報文中,序號爲300,而報文中數據有100字節。

下一個報文符,其序號爲400;


報文序號

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