經過我對網絡上IP數據包的跟蹤,對我寫的《TCP/IP學習筆記》進行補充。通過本文,可以加深對TCP/IP的認識。
●網絡環境:ADSL寬帶
●IP數據包內容:通過Outlook發送郵件,帳號是[email protected],給我的其他郵箱[email protected]發送郵件,系統從而捕獲的IP包。
●所有IP包均為TCP協議
1、關於IP包的分片情況:
所有的IP包均不分片,也就是IP包傳輸過程從不進行分片,均保持原始IP包的大小。這可能跟網絡環境較好有關。
2、關於IP首部和TCP首部的大小:
IP首部的大小均為20,未見到包括選項的情況。但TCP首部有時會包括選項,大小為24到44不等,建立連接時的協商都帶有選項數據,一般為28。
3、關於TCP連接的步驟:
(1)客戶端發送建立報文的TCP報文給服務器端;
(2)服務器端發送同意建立TCP連接的報文給客戶端;
(3)客戶端再次進行確認;
(4)服務器端發送服務器信息;
(5)客戶端發送數據,服務器端發送數據;
(6)客戶端發送結束連接的命令;
(7)服務器端發送結束連接的TCP報文給客戶端;
(8)客戶端發送同意結束連接的TCP報文給服務器端;
4、TCP連接的具體過程,包括P包的唯一標識符ID、TCP報文連接的sequence和ACK數據,這是一個完整的TCP連接建立和結束的過程:
序號 數據大小 客戶端 服務器端 IPID sequence ACK IPID sequence ACK 1 0 273 2098660028 0 2 0 54707 3904671124 2098660029 3 0 274 2098660029 3904671125 4 56 54708 3904671125 2098660029 5 14 275 2098660029 3904671181 6 0 54709 3904671181 2098660043 7 113 54710 3904671181 2098660043 8 12 276 2098660043 3904671294 9 18 54711 3904671294 2098660055 10 18 277 2098660055 3904671312 11 18 54712 3904671312 2098660073 12 10 278 2098660073 3904671330 13 31 54713 3904671330 2098660083 14 0 279 2098660083 3904671361 15 34 280 2098660083 3904671361 16 8 54714 3904671361 2098660117 17 35 281 2098660117 3904671369 18 8 54715 3904671369 2098660152 19 6 282 2098660152 3904671377 20 37 54716 3904671377 2098660158 21 1414 283 2098660158 3904671414 22 0 54717 3904671414 2098661572 23 993 284 2098661572 3904671414 24 0 54718 3904671414 2098662570 25 5 285 2098662565 3904671414 26 38 54719 3904671414 2098662570 27 6 286 2098662570 3904671452 28 9 54720 3904671452 2098662576 29 0 54721 3904671452 5098662576 30 0 287 2098662576 3904671462 31 0 288 2098662576 3904671462
(1)數據大小不包括IP首部和TCP首部的大小。
(2)除開始協商建立連接外,每一個sequence均等於上一sequence值加數據大小。開始協商的SYN標記要占用一個字節。
(3)1和2行數據設置了SYN標志。
(4)30和31行數據設置了FIN標志。
(5)每個數據都包括發送方數據的起始字節sequence和期待對方發送數據位置的Ack值。
5、程序說明:
(1) 該程序收集通過本機網卡的所有協議為TCP的IP包。
(2) 對於未加密的郵件內容,可以進行識別並獲得郵件首部內容。
(3) 對於采集的數據包可以進行保存,文件名為scan.bin,也可以導入符合該格式的文件。數據格式請見源程序。
(4) 源程序中還包括其他功能,有些尚未完成,有興趣的讀者可以幫我完成和修改.
6、由於筆者水平有限,上述內容難免有錯誤和不足之處,歡迎批評指正,先謝了。
本文配套源碼