我有一个设置,我为视频应用程序发送 UDP 广播数据包。
我在我的服务器上运行 VPS 并将 UDP 数据包发送到 Jetson 计算机。两人在10.0.2.x
网络上。他们都使用我的第二个服务器网卡。在那个 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
| |
+--------------+
因此,使用网线连接到 Switch 的计算机可以正常工作。通过 WiFi 连接的那些会受到阻碍,就好像 WiFi 路由器试图转发数据包10.0.2.x
时路由器本身是一个192.168.2.x
地址一样。
以防万一,对于那些还没有掌握网络的人,我不会尝试通过 WiFi 进行广播。在这种情况下,我实际上希望完全忽略 WiFi 路由器。我知道通过 WiFi 广播是一个很大的“不!不!”。
以防万一,这里是路由器的菜单。是贝尔金。
在这种情况下,将 Wi-Fi 视为无线以太网很有用。听起来您的贝尔金 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 频道上的所有通话时间,以及 5GHz 频道上 1/6 的通话时间。而且这是UDP,而不是TCP,所以没有适当的拥塞控制算法,所以它不会与其他人很好地共享带宽。
如果支持的话,一种解决方案可能是在您的 AP 中启用 IGMP Snooping。我不确定我的想法,但您可能还需要切换到 UDP 多播而不是广播,以便 IGMP 参与其中,以便 IGMP Snooping 可以工作。
另一种解决方案可能是使用 VLAN 将您的两个 IP 子网实际分隔为两个单独的以太网层网络。
另一种解决方案是在您的 Belkin Wi-Fi 设备上启用路由(IP 转发)或 NAT,从而将您的无线 LAN 与有线 LAN 分开。您需要小心操作,否则可能会破坏无线 LAN 和有线 LAN 之间的某些连接/可发现性。