gpt4 book ai didi

networking - 如何通过pcap_sendpacket发送大于1500字节的数据包?

转载 作者:行者123 更新时间:2023-12-02 10:20:07 29 4
gpt4 key购买 nike

实际上,我有两个相关的问题。

我正在捕获 libpcap 过滤的网络流量在 Debian 上。然后我需要在Win2k3服务器上重播这个流量。有时我捕获的数据包(TCP 和 UDP)远大于 1500 字节(以太网的默认 MTU 大小)。例如,2000+ 字节。我没有对该 Linux 上的 MTU 大小进行任何具体更改。所以问题#1:

这些数据包远大于默认 MTU 的原因是什么? Jumbo frames ?这篇维基百科文章指出“支持巨型帧的网络接口(interface)卡需要显式配置才能使用巨型帧”,但我不知道任何此类配置。 ifconfig 还显示“MTU:1500”。它可以在某种程度上与“中断组合”技术(或“中断合并”,如 this article )相关吗?我可以抑制这样的数据包吗?

然后,问题#2:

如何在 Windows 上通过 pcap_sendpacket 发送此类数据包? 仅当数据包大于 1500 字节时,我才会收到错误消息“发送错误:PacketSendPacket 失败”。似乎我无法使用巨型帧,因为我正在将数据发送到直接连接的自定义“net tap”(例如 pci 卡),并且我不确定是否可以配置其 NIC。还有什么?我应该根据协议(protocol)规则对这些数据包进行分片吗?

编辑:

按照 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

eth1br0 相同 - 我正在嗅探的 eth0eth1 之间的网络桥。

而且我仍然收到大的 UDP 数据包。

最佳答案

您的网络适配器可能正在执行 TCP 分段/解除分段卸载和 IP 分段/重组卸载,因此:

  • 您的机器发送的大于单个以太网帧的 UDP 数据包将被传递到网络适配器而不进行分段,由网络适配器进行分段,并且这些数据包在分段之前也会传递到 libpcap ;
  • 网络适配器接收到的大于单个以太网帧大小的 UDP 片段在传递给主机之前由网络适配器重新组装,并在重新组装后传递给 libpcap;
  • 您的机器发送的 TCP 流数据 block 太大,无法容纳在单个以太网帧中,这些数据 block 将被传递给网络适配器,网络适配器将这些 block 分解为更小的 TCP 段,然后将完整的 block 发送给网络适配器。被交给 libpcap;
  • 网络适配器接收到的 TCP 段将被重新组装成更大的 TCP 数据 block ,这些数据 block 将被传递给主机,然后传递给 libpcap;

所以 libpcap 看到的不是以太网数据包,并且不受以太网帧大小的限制。

(也就是说,Nikolai Fetissov 可能是正确的;您收到的内容可能看起来像以太网帧,但那是因为网络适配器和驱动程序使它们看起来像这样。事实上,它们是,不是在以太网上传输或从以太网接收的以太网帧。)

您只能通过使用 ethtool 命令关闭网络适配器上正在进行的任何形式的分段/取消分段/分段/重组来抑制它们;关闭 TCP 分段卸载、UDP 分段卸载、常规分段卸载、大型接收卸载和通用接收卸载等选项。

一旦您禁用了这些选项,您就不应该再有那些大数据包,因此您应该能够毫无问题地重播它们。 没有简单的方法来重放迄今为止捕获的重新组装/未分段或分段的数据包 - 您必须编写自己的代码来对它们进行分段,并且不能保证它们将以与最初在线路上分段/分段相同的方式重新分段/重新分段。

关于networking - 如何通过pcap_sendpacket发送大于1500字节的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262344/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com