我正在编写一个(非常简单的)用户层IP网络堆栈。为此,我需要“绕过”操作系统网络堆栈并获取原始以太网帧。该tap
界面听起来像是一种可行的方法,但它似乎不适合我。我在和接口bridge
之间创建了一个接口,但似乎只有很少的超级奇怪的 UDP 数据包出现在那里(这么说),即使真正的接口包含许多其他数据包(再次确认)。wlan
tap
tcpdump -i tap0 -e -vv
wlan
tcpdump
难道我做错了什么?还有其他(更好)的方法来解决用户空间网络堆栈解决方案吗?
答案1
您无法桥接 wifi 站模式接口,它不起作用。您使用什么软件堆栈并不重要。此限制适用于虚拟化等。
这并不明显,我会尽力解释一下。
ieee802.11 数据包(通常)包含三个地址。它们是接入点的地址、发送者的地址和接收者的地址。请注意,发送方和接收方地址是以太网 MAC 地址,在有线和无线以太网之间共享。数据包可以在无线“站”和有线网络(又名“DS”,分发系统)上的主机之间流动,但不能从站进一步分发,因为数据包中没有足够的地址字段来包含站 ID 和目的地址(它们是相同的字段)。
结果是,您可以桥接“主模式”(接入点)接口,但无法桥接站模式接口。
解决方案通常是使用路由而不是桥接,通常使用 NAT。