gpt4 book ai didi

linux - 我怎样才能接收到错误的以太网帧并禁用 CRC/FCS 计算?

转载 作者:IT王子 更新时间:2023-10-29 00:48:19 29 4
gpt4 key购买 nike

我在两台运行 Linux 的 PC 之间生成流量(通过发送以太网帧),目的是捕获一些错误帧。问题是当 Phy 层检测到帧错误(如果 CRC 或 FCS 无效)时,帧被丢弃,我无法在我的程序中接收它。

是否有任何方式接收错误帧(例如禁用 Phy 层中的丢弃并接收指示此帧错误的指示器)以及如何查阅 NIC 卡的统计信息(丢弃数。 ..等)。

最佳答案

你没有指定哪个操作系统,但我至少可以为 Linux 说话:

这可能取决于您的内核、NIC 和驱动程序以及 ethtool 版本。

我们需要告诉驱动程序/硬件做两件它通常不会做的事情:

  1. 将 FCS 字段向上传递到网络堆栈。 (通常这会在传递之前被截断)
  2. 不丢弃 FCS 字段错误的数据包,而是按原样传递它们

有两个 ethtool 选项可以实现其中的每一个:

ethtool -K eth0 rx-fcs on  #1 above: give us the FCS field
ethtool -K eth0 rx-all on #2 above: even receive bad packets

有了这些,我就可以使用 wireshark 或 tcpdump 查看 FCS 字段,即使它们不正确。 (在我的例子中,我有一些网络设备可以用准确的时间戳替换运行中的校验和 - 这会导致数据包看起来“坏”,我使用上面的方法来恢复)

并不是所有的卡片都会实现这个!他们可能将上述 ethtool 选项“固定”为关闭或不响应它们。

我发现 e1000 卡在 1G 速度下运行良好。在 10G 时,我还没有找到完全可以做到这一点的 NIC,并且不得不依赖更复杂的数据采集卡。

同样,我不知道最低内核/ethtool 版本要求是什么,但我确实记得必须升级 CentOS 服务器才能使其正常工作。

我也知道 r8169 和 e1000 驱动/卡可以做到,但根本不能代表任何其他组合。

另请注意,您将无法在发送它们的机器上捕获传出的 FCS 值,因为它们是在过程中很晚才添加的(可能卸载到卡本身),因此 pcap 将看不到它们。

在 Linux 3.10.11 内核上,使用 ethtool 3.10:

$ ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]

然后:

$ sudo ethtool -K eth0 rx-fcs on rx-all on

给我:

$ ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-ip-generic: on
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: on
rx-all: on
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]

关于linux - 我怎样才能接收到错误的以太网帧并禁用 CRC/FCS 计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22101650/

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