我正在使用原始以太网帧。我的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上使用什么过滤器。
答案 0 :(得分:0)
我尝试使用BPF,当我使用tcpdump生成过滤规则时,我可以看到生成的字节代码对于eth0和eth0.100接口都是相同的。所以我放弃了这个主意。以下解决方案对我有用。
我删除了虚拟接口eth0.100并将原始套接字绑定到基接口eth0。发送帧时,我手动VLAN标记帧。我没有在接收上做任何特别的事情,因为基本接口获取所有帧。现在我没有看到我之前看到的重复帧。
这仍然无法解释为什么我看到重复的帧。当我得到答案时,会进一步调查并发布。