首先,一些背景信息:我正在开发一些自定义软件,允许同一局域网上的一组计算机以分布式、容错的方式在实时任务上进行合作。特别是,每台计算机每秒发送一次多播(IPv6 6/UDP)“心跳”包,其他计算机接收到这些数据包,并根据他们当时在线上的其他人的知识,自行组织分配任务。如果任何对等点脱机,其任务的部分将自动重新分配给其余的计算机。此外,一个对等点有时会使用多播将一对多的数据更新传递给组。
所有这些都能很好地在有线以太网上工作;但在某些时候,我也希望它能够在无线网络上很好地工作,例如,允许一群自组织的无人机和其他类似的有趣实验。
问题是Wi是出了名的不好的多播 --特别是,多播数据包通常以AP最慢、效率最低的速率传输,而且往往被延迟或丢弃。这意味着,除非我拨我的软件的容忍度很久以前,在Wi网络上运行它意味着我偶尔会得到“假阳性”,当系统认为某台计算机已经消失,但实际上只是Wi网络没有及时传递其心跳。由于缺乏及时性,很难及时准确地协调行为,因为没有一个接近恒定速度的网络,同步时钟是很困难的。
我的问题是,Wi不是这个应用程序的正确工具吗?如果不是的话,还有其他的无线网络技术,我应该研究使用吗?(至少在原则上,无线电应该适合高效的组播/广播,因为它本身就是一种共享的媒体)或者如果Wi真的是唯一的无线网络游戏,我应该如何调整Wi设置(在AP和/或客户端)以获得最佳的组播性能?
发布于 2018-02-19 16:10:14
我还没有找到任何关于如何让WiFi上的组播更好工作的可靠信息,所以为了解决这个问题,我所做的就是编写一个组播模拟器层,它大大减少了我的系统需要通过WiFi发送和接收的多播通信量,而不需要对应用程序本身进行重大的重新设计。
在每个节点上,组播模拟器层周期性地发送一个非常小的多播包,仅仅是为了向世界宣布它的存在。每当另一个节点接收到其中一个数据包时,它就会将数据包的源IP地址添加到列表中,并向发送方发回单播答复(只是为了确保发送方也知道接收方的存在)。
然后,当应用程序想要“发送包含实际应用程序数据的多播数据包”时,它不只是通过多播直接发送数据包,而是将数据包交给组播-模拟器层,后者通过向其列表中的每个IP地址发送一个单独的副本(通过单播)来“多播”数据包。在一个有很多参与者的WiFi网络上,这并不能很好地扩展,但是对于更小的基于WiFi的系统来说,这比真正的多播更好。
还有一些保持活动/超时的逻辑,以便从每个人的节点列表中删除很长一段时间没有听到的节点,但这几乎就是全部内容。
我在此过程中发现的另一个有趣的“特性”是:(无论如何,在Mac笔记本电脑上),在大约250毫秒的不活动之后,WiFi硬件会自动关机,一旦关机,它将需要一段不确定的时间(从30 is到250 is不等)才能再次使用,以便发送下一个数据包。结果是,如果我每隔300 to在WiFi上发送一个数据包,由于WiFi硬件会不断地休眠,然后再次醒来,传输的延迟就会出现在地图上。如果我每150 as发送一个数据包,延迟就会稳定得多,因为WiFi硬件始终保持在线(当然,代价是能源消耗的增加)。
发布于 2017-05-17 03:32:46
无线网络(Wi等)的有效带宽和可靠性在很大程度上取决于射频环境。为了具有一些可预测的性能,每个安装都需要针对特定的环境进行调优。这意味着现场调查,以确定适当的AP号码和位置,天线配置,以及配置AP的发射机功率,信道频率和数据速率。
听起来你需要一些无线网络的最低性能。保证这一点的唯一方法是对每个安装进行单独的调整。有些地方可能太吵了,根本无法工作。
https://networkengineering.stackexchange.com/questions/41236
复制相似问题