tcpdump 会捕获目标 mac 地址与 NIC 的 mac 地址不匹配的数据包吗

Will tcpdump capture packets where destination mac address does not match NIC's mac address

我正在 运行 一些数据吞吐量测试,方法是通过对这些数据包进行某种处理的 VM 使用 iperf 发送 UDP 数据包。

我的应用程序在混杂模式下运行,因此它将拾取所有数据包。

我看到我的应用程序丢弃了一些数据包,但我的应用程序计数器显示这不是由于任何减速或故障造成的。

我在我的应用程序中放置了一些日志,他们提示以太网帧本身可能已损坏。

我也在 iperf 机器和我的数据包处理器的 vnic 上 运行 tcpdump,但这些数据包从未出现在痕迹中。我希望看到损坏的数据包出现在痕迹中。 命令如下所示:

tcpdump -i vnet11 -C 100 -w iperf.pcap

tcpdump -i vnet7 -C 100 -w sgi.pcap

我的疑问是,如果以太网帧本身已损坏并且目标 MAC 本身与 vnet7 或 vnet11 的 MAC 地址不匹配,tcpdump 是否会捕获这些数据包?

编辑: 令我震惊的是,如果以太网帧本身损坏导致目标 MAC 不匹配,那么 linuxbridge 不会首先将该数据包发送到我的数据包处理器的 vnet 接口。所以 tcpdump 在这里没有什么可捕获的。 请忽略此问题。

事实上,如果问题是损坏的以太网帧,您根本看不到它。您的网卡将丢弃该帧,您的嗅探器将永远看不到它。

运行 在混杂模式下通常会禁用网卡上的 MAC 过滤,这样嗅探器就会看到所有数据包,而不管目的地 MAC。但是,您看不到未发送到 NIC 的数据包(很明显),因此在交换环境中,除非您采取额外的步骤来攻击交换机或配置跨接或镜像端口,否则您只会看到广播和帧指定用于您系统上的 MAC。

虚拟机会使这进一步复杂化。不同的虚拟化解决方案以不同的方式处理这个问题。例如,在某些情况下,管理员可以选择配置是否将与主机地址不匹配的帧传送到 VM,有效地使混杂模式没有实际意义。