如何设计无线网络以实现高效的多播或广播通信?

网络工程 无线的 IEEE-802.11 多播 表现
2021-08-01 06:05:22

首先,介绍一点背景信息:我正在开发一些自定义软件,该软件允许同一 LAN 上的一组计算机以分布式、容错的方式协作处理实时任务。特别是,每台计算机每秒数次发出多播(IPv6/UDP)“心跳”数据包,其他计算机接收该数据包,并根据他们对当时还有谁在线的了解,自组织在他们之间分配任务。如果任何对等方脱机,他们的任务部分将自动重新分配给剩余的计算机。此外,对等方有时会使用多播将一对多的数据更新传达给该组。

这一切都在有线以太网网络上运行良好;但在某些时候,我想让它也能在无线网络上很好地工作,例如允许自组织的无人机群和其他类似的有趣实验。

问题是 Wi-Fi在多播方面是出了名的糟糕——特别是,多播数据包通常以 AP 最慢、效率最低的速率传输,而且它们经常被延迟或丢弃。这意味着除非我将我的软件的容差拨回来,否则在 Wi-Fi 网络上运行它意味着我偶尔会得到“误报”,系统认为特定计算机已经消失,但实际上只是 Wi-Fi 网络没有t 及时提供心跳。缺乏及时性也使得很难及时准确地协调行为,因为没有近乎恒定的速度网络,同步时钟就很困难。

我的问题是,Wi-Fi 是不是适合此应用程序的工具?如果不是,我是否应该考虑使用其他一些无线网络技术?(似乎,至少在原则上,无线电应该有助于高效的多播/广播,因为它本质上是一种共享媒体)或者如果 Wi-Fi 真的是无线网络的唯一游戏,我应该如何调整Wi-Fi 设置(在 AP 和/或客户端上)以获得最佳多播性能?

2个回答

无线网络(Wi-fi 或任何其他网络)的有效带宽和可靠性高度依赖于 RF 环境。为了获得一些可预测的性能,每个安装都需要针对特定​​环境进行调整。这意味着进行站点调查以确定正确的 AP 编号和位置、天线配置,以及针对发射机功率、信道频率和数据速率配置 AP。

听起来您需要无线网络的最低​​性能。保证这一点的唯一方法是单独调整每个安装。有些地方可能噪音太大 (RF) 根本无法工作。

我还没有找到任何关于如何使 WiFi 组播更好地工作的可靠信息,所以我为了解决这个问题所做的是编写一个组播模拟器层,它大大减少了我的系统需要的组播流量通过 WiFi 发送和接收,而无需对应用程序本身进行重大的重新设计。

在每个节点上,多播模拟器层定期发送一个非常小的多播数据包,只是为了向全世界宣布它的存在。每当另一个节点收到这些数据包中的一个时,它会将数据包的源 IP 地址添加到列表中,并向发送方发送回单播回复(只是为了确保发送方也知道接收方的存在)。

然后,每当应用程序想要“发送包含实际应用程序数据的多播数据包”时,它不仅仅是通过多播直接发送数据包,而是将数据包交给多播模拟器层,后者通过发送一个“多播”数据包单独复制(通过单播)到其列表中的每个 IP 地址。这不会在具有许多参与者的 WiFi 网络上很好地扩展,但对于较小的基于 WiFi 的系统,这比真正的多播表现更好。

还有一些保持活动/超时逻辑,以便长时间未收到消息的节点从每个人的节点列表中删除,但这几乎就是全部。

我在此过程中发现的另一个有趣的“功能”是(无论如何在 Mac 笔记本电脑上),WiFi 硬件设置为在大约 250 毫秒不活动后自行关闭,一旦关闭,它将需要不确定的时间( 30 毫秒到 250 毫秒之间的任何地方)使其再次可用,以便可以发送下一个数据包。结果是,如果我每 300 毫秒通过 WiFi 发送一个数据包,由于 WiFi 硬件不断进入睡眠状态然后再次醒来,传输的延迟将遍布整个地图。如果我改为每 150 毫秒发送一个数据包,则延迟会稳定得多,因为 WiFi 硬件始终保持在线(当然,以增加能耗为代价)