天天看點

tcp封包格式及解釋

源端口和目的端口:都是16個比特,分别表示發送方和接收方的端口号。端口号和IP位址構成套接字(socket)位址的主要内容。源端和目的端的套接字合起來唯一地表示一條連接配接。網絡應用程式在通信時直接向套接字發送和接收資料。

序列号和确認号:都是32位的無符号整數,可以表示0-4G(232)位元組的範圍。其中,序列号表示資料部分第一個位元組的序列号,而确認号表示該資料報的接收者希望對方發送的下一個位元組的序号(即序号小于确認号的資料都已正确地被接收)。

頭長度(HLEN):表示TCP封包頭的長度。長度以32-bit為機關來計算。是以如果選項部分的長度不是4個位元組的整數倍,則要加上填充(padding)。

保留域:緊接在頭長度字段後有6個比特,應該把它設定為0。

再後則是6個标志位。标志位特定的含義:

URG(urgent)為緊急資料标志。如果它為1,則表示本資料報中包含緊急資料。此時緊急資料指

針表示的值有效。它表示在緊急資料之後的第一個位元組的偏侈值(即緊急資料的總長度)。

ACK(acknowledge)為确認标志位。如果ACK為1,則表示封包中的确認号是有效的。否則,封包

中的确認号無效,接收端可以忽略它。

PSH(push)标志位。被置位後,要求發送方的TCP協定軟體馬上發送該資料報,接收方在收到資料後也應該立即上交給應用程式,即使其接收緩沖區尚未填滿。

RST(reset)标志位。用來複位一條連接配接。RST标志置位的封包稱為複位封包。一般情況下,如果TCP收到的一個封包明顯不是屬于該主機上的任何個連接配接,則向遠端發送一個複位封包。

SYN(synchronous)标志位。用來建立連接配接,讓連接配接雙方同步序列号。如果SYN=1而ACK=0,則表示該資料報為連接配接請求,如SYN=1而ACK=1則表示是接受連接配接。

FIN(finish)标志位。表示發送方已經沒有資料要傳輸了,希望釋放連接配接。

視窗(window)字段。視窗表示的是從被确認的位元組開始,發送方最多可以連續發送的位元組的個數。接收方通過設定該視窗值的大小,可以調節源端發送資料的速度,進而實作流控。

校驗和(checksum)域。是TCP協定提供的一種檢錯機制。與我們在前面的章節中學過的UDP協定類似,在計算校驗和時不僅要計算TCP封包自身(封包頭和資料),還要增加一些額外的資訊内容 – 12個位元組的“僞標頭”。

繼續閱讀