TCP(Transmission ControProtocol)傳輸控制協(xié)議是一種面向連接的、可靠的、基于字節(jié)流的傳輸層協(xié)議。
tcp報文格式詳解
TCP報文是TCP層傳輸?shù)臄?shù)據(jù)單元,也稱為報文段。
TCP報文首部格式
源端口號(2字節(jié)):
d5 df(54751)
目的端口號(2字節(jié)):
22 b8(8888)
TCP報頭中的源端口號和目的端口號同IP數(shù)據(jù)報中的源IP與目的IP唯一確定一條TCP連接
序號(4字節(jié)):
37 59 56 75
用來標識TCP發(fā)端向TCP收端發(fā)送的數(shù)據(jù)字節(jié)流
確認序號(4字節(jié)):
由于該報文為SYN報文,ACK標志為0,故沒有確認序號(ACK標志為1時確認序號才有效)
一旦連接建立,該值將始終發(fā)送(同ACK標志)
首部長度(4位):報文頭長度(單位:位)/32
1000(轉(zhuǎn)化為10進制為8,8*32/8 = 32,該報文報頭長度為32個字節(jié))
存在該字段是因為TCP報頭中任選字段長度可變
報頭不包含任何任選字段則長度為20字節(jié);4位所能表示的最大值為1111,轉(zhuǎn)化為10進制為15,15*32/8 = 60,故報頭最大長度為60字節(jié)
標志位(12位):
0000 00010010
Reserved:
000~ ~~~~~~~~
ECN(Explicit Congetsion Notification):
~~~0 ~~~~~~~~ = N / NS / Nonce Sum:有效排除潛在的ECN濫用,RFC 3540
~~~~ 0~~~~~~~ = C / CWR(Congestion Window Reduced):擁塞窗口減少標志
~~~~ ~0~~~~~~ = E / ECE / ECN-Echo:ECE / ECN標志
ControBits:
~~~~ ~~0~~~~~ = U / Urgent:緊急指針有效性標志
~~~~ ~~~1~~~~ = A / Acknowledgment:確認序號有效性標志,一旦一個連接建立起來,該標志總被置為1,即除了請求建立連接報文(僅設置Syn標志位為1),其它所有報文的該標志總為1
~~~~ ~~~~0~~~ = P / Push:Push標志(接收方應盡快將報文段提交至應用層)
~~~~ ~~~~~0~~ = R / Reset:重置連接標志
~~~~ ~~~~~~1~ = S / Syn:同步序號標志
~~~~ ~~~~~~~0 = F / Fin:傳輸數(shù)據(jù)結束標志
窗口大小(2字節(jié)):TCP流量控制通過連接的每一端聲明窗口大小進行控制(接收緩沖區(qū)大小)
20 00(00100000 00000000)= 8192
由于2字節(jié)能夠表示的最大正整數(shù)為65535,故窗口最大值為65535
檢驗和(2字節(jié)):檢驗和覆蓋整個TCP報文段;強制字段,由發(fā)送端計算存儲,由接收端進行驗證
2e 2f
緊急指針(2字節(jié)):當Urgent標志置1時,緊急指針才有效
00 00
任選字段(0 - 40字節(jié)):
每個選項格式如下:
選項類型選項總長度選項內(nèi)容
說明如下:
可選選項如下:
{02 04 05 b4} {01} {03 03 08} {01} {01} {04 02}
MSS + No operation + WSOPT + No operation + No operation + SACK permitted
源端口(Source Port):16位的源端口字段包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。
目的端口(Destination Port):16位的目的端口字段定義傳輸?shù)哪康摹_@個端口指明接收方計算機上的應用程序接口。
序列號(Sequence Number):該字段用來標識TCP源端設備向目的端設備發(fā)送的字節(jié)流,它表示在這個報文段中的第幾個數(shù)據(jù)字節(jié)。序列號是一個32位的數(shù)。
確認號(Acknowledge Number):TCP使用32位的確認號字段標識期望收到的下一個段的第一個字節(jié),并聲明此前的所有數(shù)據(jù)已經(jīng)正確無誤地收到,因此,確認號應該是上次已成功收到的數(shù)據(jù)字節(jié)序列號加1。收到確認號的源計算機會知道特定的段已經(jīng)被收到。確認號的字段只在ACK標志被設置時才有效。
數(shù)據(jù)偏移(Data Offset):這個4位字段包括TCP頭大小。由于首部可能含有選項內(nèi)容,因此TCP首部的長度是不確定的。首部長度的單位是32比特或4個八位組。首部長度實際上也指示了數(shù)據(jù)區(qū)在報文段中的起始偏移值。
保留(Reserved):6位置0的字段。為將來定義新的用途保留。、
控制位(ControBits):共6位,每一位標志可以打開一個控制功能。
URG(Urgent Pointer Field Significant,緊急指針字段標志):表示TCP包的緊急指針字段有效,用來保證TCP連接不被中斷,并且督促中間齊備盡快處理這些數(shù)據(jù)。
ACK(Acknowledgement field significant,確認字段標志): 取1時表示應答字段有效,也即TCP應答號將包含在TCP段中,為0則反之。
PSH(Push Function,推功能):這個標志表示Push操作。所謂Push操作就是指在數(shù)據(jù)包到達接收端以后,立即送給應用程序,而不是在緩沖區(qū)中排隊。
RST(Reset the connection,重置連接):這個標志表示感謝連接復位請求,用來復位那些產(chǎn)生錯誤的連接,也被用來拒絕錯誤和非法的數(shù)據(jù)包。
SYN(Synchronize sequence numbers,同步序列號):表示同步序號,用來建立連接。
FIN(No more data from sender):表示發(fā)送端已經(jīng)發(fā)送到數(shù)據(jù)末尾,數(shù)據(jù)傳送完成,發(fā)送FIN標志位的TCP段,連接將被斷開。
窗口(Window):目的主機使用16位的窗口字段告訴源主機它期望每次收到的數(shù)據(jù)通的字節(jié)數(shù)。
校驗和(Checksum):TCP頭包括16位的校驗和字段用于錯誤檢查。源主機基于部分IP頭信息,TCP頭和數(shù)據(jù)內(nèi)容計算一個校驗和,目的主機也要進行相同的計算,如果收到的內(nèi)容沒有錯誤過,兩個計算應該完全一樣,從而證明數(shù)據(jù)的有效性。
緊急指針(Urgent Pointer):緊急指針字段是一個可選的16位指針,指向段內(nèi)的最后一個字節(jié)位置,這個字段只在URG標志被設置時才有效。
選項(Option):至少1字節(jié)的可變長字段,標識哪個選項(如果有的話)有效。如果沒有選項,這個字節(jié)等于0,說明選項的結束。這個字節(jié)等于1表示無需再有操作;等于2表示下四個字節(jié)包括源機器的最大長度(Maximum Segment Size,MSS)。
填充(Padding):這個字段中加入額外的零,以保證TCP頭是32的整數(shù)倍。
評論