【发布时间】:2012-02-13 14:40:47
【问题描述】:
其实,我有两个相关的问题。
我正在 Debian 上捕获由 libpcap 过滤的网络流量。然后我需要在 Win2k3 服务器上重放这个流量。有时我会捕获远大于 1500 字节(以太网的默认 MTU 大小)的 TCP 和 UDP 数据包。例如,2000+ 字节。我没有对该 Linux 上的 MTU 大小进行具体更改。所以问题 #1:
这些数据包比默认 MTU 大得多的原因是什么? Jumbo frames?这篇维基百科文章指出“能够支持巨型帧的网络接口卡需要显式配置才能使用巨型帧”,但我不知道有任何此类配置。 ifconfig 还向我显示“MTU:1500”。它是否与“中断组合”技术(或this article 中的“中断合并”)有某种关联?我可以抑制这样的数据包吗?
那么,问题 #2:
如何在 Windows 上通过 pcap_sendpacket 发送此类数据包? 我收到错误消息“发送错误:PacketSendPacket 失败”,仅针对大于 1500 字节的数据包。似乎我不能使用巨型帧,因为我正在将数据发送到直接连接的自定义“net tap”,比如 pci 卡,而且我不确定我是否可以配置它的 NIC。还有什么?我应该根据协议规则对这些数据包进行分段吗?
编辑:
按照 Guy Harris 的建议,由 NIC 检查碎片:
~# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: off
generic-receive-offload: off
large-receive-offload: off
ntuple-filters: off
receive-hashing: off
eth1 和 br0 也是如此 - 我正在嗅探eth0 和 eth1 之间的网桥。
我仍然收到大的 UDP 数据包。
【问题讨论】:
-
pcap 可能正在为您将分片的数据报从有线数据包中重新粘合到一个块中。检查您是否可以要求它为您提供以太网帧而不是传输数据包。
-
@NikolaiNFetissov:我正在接收以太网帧
标签: networking network-programming pcap ethernet