通过 RAW 套接字在虚拟 VLAN 接口上复制以太网帧

Duplicate Ethernet frame on virtual VLAN interface via RAW socket

我正在处理原始以太网帧。我的 Linux 机器上有一个以太网接口 eth0 和一个虚拟 VLAN 接口 eth0.100。我的 RAW 套接字绑定到虚拟接口 eth0.100。问题是,当一个 VLAN 标记 (VLAN ID=100) 帧从外部传输到该接口时,我的应用程序会获得同一以太网帧的两个副本。从应用程序中我看不出这些帧之间的区别,有效载荷的内容完全相同。我的界面未在混杂模式下运行。

我使用 tcpdump 捕获帧,下面是结果

如果我绑定到 eth0,我仍然会得到帧的两个副本。但是如果我删除 eth0.100 并绑定到 eth0,我只会得到一份。我的应用程序是否获得了帧的两份副本,一份来自 eth0,一份来自 eth0.100,即使我只绑定到 eth0.100?

我尝试使用 BPF,但我不确定在 eth0.100 上使用什么过滤器。

我尝试使用 BPF,当我使用 tcpdump 生成过滤规则时,我可以看到生成的字节码对于 eth0 和 eth0.100 接口是相同的。所以我放弃了这个想法。以下解决方案对我有用。

我删除了虚拟接口 eth0.100 并将我的原始套接字绑定到基本接口 eth0。发送帧时,我手动对帧进行了 VLAN 标记。由于基本接口获取所有帧,因此我在接收时没有做任何特别的事情。现在我没有看到之前看到的重复帧。

这仍然不能解释为什么我看到重复的帧。将进一步调查并 post 当我得到答案时。