我观察到最奇怪的事情 - 相同的数据包,相同的大小,通过相同的接口发送有时会整个发送,有时会被分段,就好像它超出了接口 MTU...
1472 数据包分段:
10:10:24.537385 IP 192.168.56.1.35749 > 192.168.56.101.4444: UDP, length 1008
10:10:24.537589 IP 192.168.56.1.35749 > 192.168.56.101.4444: UDP, length 464
1472 数据包未分段:
10:10:34.168099 IP 192.168.56.1.41252 > 192.168.56.101.44444: UDP, length 1472
这似乎是随机发生的。为什么会发生这种情况?
发送数据包的接口有MTU 1500
,足够1472个udp。但同样的情况也发生在较小的数据包上。tracepath
还显示该路径的 MTU 1500。
我使用的是 Ubuntu 14.04、3.13.0-46-generic
答案1
我遇到了同样的问题,就我而言,这种现象是由 GSO 引起的。
用于skb_is_gso(skb)
检查 GSO 状态,您可以使用 禁用 GSO skb_gso_reset(skb)
。
答案2
我的问题的正确答案是@Barmar 的评论中的答案,他应该得到支持。
我使用一个命令发送数据包cli
,该命令分段刷新它的输出,这就是我奇怪的结果的原因。