我做了一个tcpdump并捕获了数据包,配置的MTU是2140。我正在使用Wireshark分析pcap文件。
根据配置的MTU,数据包的预期最大大小应为2154(2140字节+14个以太网头字节)。但是我看到大小大于2154(例如9010字节)的数据包,经过分析,我发现这些数据包是在我进行tcpdump的机器上生成的(假设为A),并且目的地是另一台机器(比如说B)。我希望数据包在发送到另一台主机之前会被分段。我在网上找到了一些解释,说tcpdump在NIC崩溃之前捕获了数据包,尽管这似乎是一个有效的解释,但在我的情况下似乎是矛盾的,因为在计算机A上,我从B接收到的数据包大小大于2154。为什么机器A发送和接收的数据包大于配置的MTU。
答案 0 :(得分:0)
更新的答案
如果您的数据包是UDP
这种现象是正常的。但是您看不到终端计算机上的各个数据包,您无能为力。 UDP数据包被分解为符合MTU的数据包,并通常通过特定硬件在链路层进行重组。该值太低而无法被Wireshark / pcap捕获。 如果要捕获单个已分解的数据包,则必须在中间计算机/网卡(例如,两个主机之间的网关)上执行此操作,因为原始UDP数据包直到到达其最终目的地之前才进行重组。注意:此网关可以是虚拟的。 参见notes.shichao.io/tcpv1/ch10
把这个留在这里,以防有人遇到相同的问题...
如果您的数据包是TCP:
听起来好像Wireshark正在为您重新组装数据包。这通常是TCP流的默认设置。您可以通过以下方法更改此内容:在流上单击Richt->“协议首选项”->“允许子部门重新组合TCP”。
答案 1 :(得分:0)
您所看到的很可能是TCP段重组卸载的结果。此功能在某些具有匹配驱动程序的网卡上可用。
这个想法是许多TCP段的重组是在NIC本身中处理的。事实证明,这对于减少CPU / OS方面的开销非常有效,因为网络驱动程序只需要处理10个包中的1个“包”,而只看到一个大包,而不是接收和重新组装所有10个包。 >
您可以详细了解here。