2010-07-02 85 views
1

我在閱讀「Unix Network Programming」和tcpdump這個例子生成的數據包。這個例子只是發送一個包含字符串「liha」的包。TCP數據包中的冗餘數據是什麼?

我讀了TCP/IP RFC,發現正常的IP頭是20B。除了數據是正常的TCP頭部是24B。

所以,在捕獲的數據包中有字符串「liha」之前有8B。 「0121 3d2a 0120 b43e」是無用的嗎?

11:00:51.690949 IP localhost.40163 > localhost.9877: Flags [P.], seq 94:99, ack 95, win 513, options [nop,nop,TS val 18955562 ecr 18920510], length 5 
     0x0000: 4500 0039 ddc6 4000 4006 5ef6 7f00 0001 [email protected]@.^..... 
     0x0010: 7f00 0001 9ce3 2695 8465 e35c 8466 58ca ......&..e.\.fX. 
     0x0020: 8018 0201 fe2d 0000 0101 080a 0121 3d2a .....-.......!=* 
     0x0030: 0120 b43e 6c69 6861 0a     ...>liha. 

回答

2

那些是TCP options。和你的分析儀已經被解析他們爲你:

options [nop,nop,TS val 18955562 ecr 18920510], 

他們一般都是重要的,使用通信雙方協商其額外的增強功能,可用於TCP連接。

+0

Dummy00001,謝謝,但在RFC793 http://www.faqs.org/rfcs/rfc793.html, 圖3中,選項在21B〜23B,而不是25B〜28B在這種情況下?任何建議? – David 2010-07-02 13:06:15

+0

選項具有動態大小(我不知道如何精確定義)。這就是爲什麼TCP頭部有數據偏移量字段:前20個字節是固定的,其餘的數據偏移量是選項。 – Dummy00001 2010-07-02 15:00:50

+0

選項解析示例:http://lxr.linux.no/#linux+v2.6.33/net/ipv4/tcp_input.c#L3729 – Dummy00001 2010-07-02 15:20:43