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