2010-07-02 57 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