0

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

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

  • eth0:这会得到一个带有 VLAN 标记的帧 - 100。
  • eth0.100:这会得到一个没有 VLAN 标记的帧。

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

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

4

1 回答 1

0

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

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

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

于 2016-05-16T01:40:46.130 回答