參考書籍:TCP-IP詳解
本文主要介紹TCP的頭部與選項
TCP的頭部
TCP屬於協議層的第三次,封包被稱爲segment,現在主要來看下TCP頭部的格式,如下圖
一般情況下TCP Header 的長度爲20個字節,沒有TCP Options
由上圖,需要注意的地方:
1. TCP layer 沒有IP地址的概念,那個是IP 層的,所以前4個字節是源端口和目的端口
2. Sequence Number:傳輸數據過程中,爲每一個封包分配一個序號,保證網絡傳輸數據的順序性
3. Acknowledgment Number:用來確認確實有收到相關封包,內容表示期望收到下一個報文的序列號,用來解決丟包的問題
4. TCP Flags:這部分主要標誌數據包的屬性,比如SYN,RST,FIN等,操控TCP的狀態機
5. Window:滑動窗口,主要用於解決流控擁塞的問題
6. Checksum:校驗值
7. Urgent Pointer:緊急指針,可以告知緊急的數據位置,需要和Flag的U flag 配合使用
8. TCP Options:一般包含在三次握手中,有Option的選項!
在tcpdump抓出來的TCP Header如下圖
TCP Option
每個選項的開始都是1個Byte的kind字段,說明選項的類型,Kind爲0/1的時候,選項只佔1個Byte,其他選項在kind字段後面還有len字節,說明總長度包括kind和len的字節。看下圖
從圖中我們可以看到
0. 代表選項表結束
1.代表無操作
2.代表MSS
3.代表窗口擴大銀子
8.代表時間戳
其他的kind值爲4/5/6/7 四個選項被稱爲選擇ACK及回顯選項,目前回顯選項已經被時間戳給代替!
下面來看下在SYN上顯示的TCP選項
<mss 512, nop, wscale 0, nop, nop, timestamp 146647 0>
從圖中可以看到:
0~3 Byte : MSS 512
4~7 Byte : nop,wscale 0
8~11Byte:nop,nop,timestamp
12~15 Byte:146647
16~19 Byte:0 最少4個字節對齊
在tcpdump抓出的解析是這樣的:
<mss 1460, nop, wscale 8, nop, nop, sack>