关于发送者和接收者所捕获不同TCP数据包(different tcp packets capture

2019-11-02 23:29发布

我使用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在局域网中,什么是可能的原因这种“压缩”包?

在此先感谢您的帮助!

Answer 1:

在发送器侧的两个数据包似乎是“压实的”在接收器侧

它看起来像通用的情况下,接收卸载或大型接收卸载。 长话短说,接收网卡做一些聪明的东西,并接合成段他们打的内核,从而提高性能之前。

要检查,如果这是你可以尝试使用禁用它的情况:

$ ethtool -K eth0 gro off
$ ethtool -K eth0 lro off

事情发生互补在发送方:TCP分段卸载或通用分段卸载。

停用后,这些别忘了重新启用他们,他们认真地提高性能。



文章来源: different tcp packets captured on sender and receiver