我有一个设置,可以为视频应用程序发送 UDP 广播数据包。
我在我的服务器上运行 VPS,并向 Jetson 计算机发送 UDP 数据包。这两个计算机都在10.0.2.x
网络上。它们都使用我的第二个服务器 NIC。在该 NIC 上我还有一个 WiFi 路由器,但那个路由器在网络上192.168.2.x
。
为什么当我仅使用可用带宽的 1/5 并且 WiFi 使用了大约 1/3 时,发送广播 UDP 数据包会降低 WiFi 速度?(其余部分由另一台计算机使用)。
以下是网络的基本表示:
+--------------+
| Server |
| +-------+ |
| | NIC 1 | | +---------+ +----------+
Internet <----->| | | | Switch | | Jetson |
| +-------+ | | 1Gbit |<--->| |
| ^ | | | +----------+
| | | | |
| v | | |
| +-------+ | | | +----------+ +-----------------+
| | NIC 2 | | | | | WiFi | | WiFi Computer |
| | |<------>| |<--->| |\/\/\/| |
| +-------+ | | | +----------+ ^ +-----------------+
| ^ | | | |
| | | | | \______ slow WiFi connection
| v | | | +----------+
| +--------+ | | | | Other |
| | VPS | | | |<--->| Computer |
| | | | +---------+ +----------+
| +--------+ | ^_______ speed not affected
| |
+--------------+
因此,使用网线连接到交换机的计算机可以正常工作。通过 WiFi 连接的计算机会受到阻碍,就好像 WiFi 路由器试图转发数据包一样,而10.0.2.x
路由器本身就是一个192.168.2.x
地址。
为了以防万一,对于那些还没有掌握网络的人来说,我不是尝试通过 WiFi 进行广播。在这种情况下,我实际上希望 WiFi 路由器完全被忽略。我知道通过 WiFi 进行广播是绝对不行的。
以防万一,这是路由器的菜单。这是 Belkin 的。
答案1
在这种情况下,将 Wi-Fi 视为无线以太网很有用。听起来你的 Belkin Wi-Fi“路由器”不是路由在有线和无线之间,它只是桥接。因此它只是充当普通 AP。
以太网(有线或无线)对 IP 一无所知。因此,您的 AP 只是一个以太网桥。也就是说,它遵循桥接器和交换机的 802.1D 规则,只关注以太网层 (MAC) 地址,并使用目标以太网地址来决定将哪些内容桥接到无线,以及丢弃哪些内容。
我猜您正在将 UDP 广播发送到子网广播 IP 地址 10.0.2.255。因此,根据标准,这些 IP 数据包将位于以太网帧内,该帧的地址为以太网多播 MAC 地址 01:00:5e:00:02:ff(即使我的转换有误,它仍然是以太网多播 MAC 地址)。
因此,您的 AP 会看到多播目标 MAC 地址,并且按照网桥和交换机的标准 802.1D 规则,它会自动将其桥接到 Wi-Fi 并将其作为 Wi-Fi 多播发送。
不幸的是,就空中时间使用而言,多播和广播在 Wi-Fi 上的成本非常高。
Wi-Fi 多播必须以某种“最低公分母”信号速率发送,以确保所有无线客户端都能成功接收。这通常只是该频段的最低可能信号速率。因此,2.4GHz 为 1Mbps,5GHz 为 6Mbps。
例如,1Mbps 广播或多播视频流将尝试使用全部2.4GHz 信道的带宽占用率为 1/6,5GHz 信道的带宽占用率为 1/6。这是 UDP,不是 TCP,因此没有拥塞控制算法,因此它无法很好地与其他人共享带宽。
一种解决方案可能是在您的 AP 中启用 IGMP 侦听(如果它支持的话)。我不太确定,但您可能还需要切换到 UDP 多播而不是广播,以便 IGMP 参与其中,这样 IGMP 侦听才能正常工作。
另一个解决方案可能是使用 VLAN 将两个 IP 子网实际分成两个独立的以太网层网络。
另一个解决方案是启用 Belkin Wi-Fi 设备上的路由(IP 转发)或 NAT,这样就可以将无线局域网与有线局域网分开。您需要小心谨慎地执行此操作,否则可能会破坏无线局域网和有线局域网之间的某些连接/可发现性。