我使用tcpdump的/ Wireshark的,而TCP客户端将数据发送到TCP服务器捕获TCP数据包。 客户只需发送4096个字节到服务器在一个“发送()”调用。 我得到不同的TCP数据包两侧,发送侧两个包似乎是“压缩”在接收端,这种冲突与我所理解TCP协议,我被困在这个问题上几天,真的需要一些救命。
请注意在以下数据包的数据包长度:
客户端(发送者)发送2个分组0Xbcac(4)和0xbcae(5),发送2896 + 1200 = 4096字节中的所有。
(0xbcac) 4 14:31:33.838305 192.168.91.194 192.168.91.193 TCP 2962 59750 > 9877 [ACK] Seq=1 Ack=1 Win=14720 **Len=2896** TSval=260728 TSecr=3464603 0
(0xbcae) 5 14:31:33.838427 192.168.91.194 192.168.91.193 TCP 1266 59750 > 9877 [PSH, ACK] Seq=2897 Ack=1 Win=14720 **Len=1200** TSval=260728 TSecr=3464603 0
然而在服务器(接收机)侧,只有一个数据包被呈现,以ip.id = 0xbcac和长度= 4096(= receiver.packet.0xbcac + sender.packet.0xbcac 0xbcae):
(0xbcac) 4 14:31:33.286296 192.168.91.194 192.168.91.193 TCP 4162 59750 > 9877 [PSH, ACK] Seq=1 Ack=1 Win=14720 **Len=4096** TSval=260728 TSecr=3464603 0
我知道,TCP是一个流协议和发送的数据可以根据MSS(或MTU)被划分成数据包,但我想分割发生之前的数据包被发送到NIC,从而捕获之前。 我也知道,在数据包中的PSH标志0xbcae导致写入数据从缓冲区网卡,但无法解释的“压缩”数据包。 此外,我在客户端试图在一个发送999999个字节“发送”呼叫和数据被分成小包和发送,但仍然不匹配服务器端捕获的数据包。 最后,我禁用TCP的Nagle,得到相同的结果,并且排除了这个原因。
所以我的问题是我遇到的不匹配是否正常? 如果是,是什么造成的? 如果不是,我使用Ubuntu 12.04和Ubuntu 13.10在局域网中,什么是可能的原因这种“压缩”包?
在此先感谢您的帮助!