TCP頭部格式的了解


參考網址 :https://blog.csdn.net/zhouzhenhe2008/article/details/71075969

tcp頭部格式如下圖所示:

 

 

1.源端口號,16位,發送方的端口號。

2.目標端口號,16位,發送方的目標端口號。

3. 32為序列號,sequence number,保證網絡傳輸數據的順序性。

4. 32位確認號,acknowledgment number,用來確認確實有收到相關封包,內容表示期望收到下一個報文的序列號,用來解決丟包的問題。

5. 頭部大小,4位,偏移量:最大值為0x0F,即15,

單位為32位(bit),單位也就是4個字節,給出頭部占32bit的數目。沒有任何選項字段的TCP頭部長度為20字節;最多可以有60(15*4)字節的TCP頭部。

6. Reserved 4位 ,預留字段,都為0

7. TCP標志位

(1)CWR:Congestion window reduced,擁塞窗口減少。擁塞窗口減少標志被發送主機設置,用來表明它接收到了設置ECE標志的TCP包。擁塞窗口是被TCP維護的一個內部變量,用來管理發送窗口大小。

(2)ECN-Echo:顯式擁塞提醒回應。當一個IP包的ECN域被路由器設置為11時,接收端而非發送端被通知路徑上發生了擁塞。ECN使用TCP頭部來告知發送端網絡正在經歷擁塞,並且告知接收端發送段已經受到了接收端發來的擁塞通告,已經降低了發送速率。

(3)URG:為1時,緊急指針(urgent pointer)有效,配合緊急指針使用

(4)ACK:為1時,確認號有效

(5)PSH: 為1時,接收方應該盡快將這個報文段交給應用層

(6)RST:為1時,釋放連接,重連。

(7)SYN:為1時,發起一個連接。

(8)FIN:為1時,關閉一個連接。

8. 16位窗口大小:占16bit。此字段用來進行流量控制,主要用於解決流控擁塞的問題。單位為字節數,這個值是本機期望一次接收的字節數。

9. 16位校驗值: 占16bit。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,並由目標端進行驗證。

10. 16位緊急指針:占16bit。它是一個偏移量,和序號字段中的值相加表示緊急數據最后一個字節的序號。

11. 32位Tcp選項:一般包含在三次握手中。


抓包解析:

1.tcp頭部標志位:

比如客戶端第一次syn連接的時候,也就是第一次握手的時候。Syn標志被置為1

 

 

 

第二次握手的時候,服務端發的報文設置了ACK,SYN標志位

 

 

 

 

3.關於tcp選項

tcp選項一般出現在三次握手的報文中。


第一次握手

 

 

 

第二次握手

 

 

 


在建立連接的時候,通信雙方要互相確認對方的最大報文長度(MSS),以便通信,一般這個SYN長度是MTU減去固定IP首部和TCP首部長度,

對於以太網,一般可以達到1460字節,當然如果對於非本地的IP,這個MSS可能就只有536字節,而且如果中間的傳輸網絡的MSS更小的話,這個

值會更加的小。(在tcp報文中選項看出)


(1)TCP首部選項字段多達40B,記下一些常用的東西:


(2)選項結束字段(EOP,0x00),占1B,一個報文段僅用一次。放在末尾用於填充,用途是說明:首部已經沒有更多的消息,應用數據在下一個32位字開始處


(3)無操作字段(NOP, 0x01),占1B,也用於填充,放在選項的開頭


(4)MSS(最大報文段長度),格式如下:種類(1B,值為2),長度(1B,值為4),數值(2B)


用於在連接開始時確定MSS的大小,如果沒有確定,就用默認的(一般實現是536B)


(5)窗口擴大因子,格式如下:種類(1B,值為3),長度(1B,值為3),數值(1B)


新窗口值 = 首部窗口值 * 2的(擴大因子)次方


當通信雙方認為首部的窗口值還不夠大的時候,在連接開始時用這個來定義更大的窗口。僅在連接開始時有效。一經定義,通信過程中無法更改。


(6)時間截(應用測試RTT和防止序號繞回),略,以后補充


(7)允許SACK和SACK選項,略,以后補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM