我有一台 Raspberry Pi(运行 Raspbian)和一台 LB-LINK 无线 USB 适配器,用作带有 WPA2 的 802.11n 接入点,运行 hostapd 和 isc-dhcp-server。在 Pi 上,我有一个 python 脚本,它以 25Hz 的速率发送大小约为 50 字节的多播数据包。我们注意到,当无线客户端超出 AP 的范围(有时当它回到范围时)时,AP 开始表现异常。具体来说,python 脚本中的 socket.sendto() 命令被阻止,断开连接的无线客户端无法加入网络。在 Android 平板电脑上,网络显示 1 条信号强度,即使它们就在天线旁边。已经连接到 AP 的客户端似乎保持连接状态(Wireshark 从已经连接的客户端捕获显示它继续与路由器交换数据包),并显示完整的信号强度条。请注意,超出范围的无线客户端不必是多播组的一部分(至少,我从未明确将其设置为多播组的一部分,并且我们不会向所有主机组发送)。我们使用的无线信道未被其他附近接入点使用。hostapd 未报告任何异常,停止并启动它并不能解决问题。我们在以相同速率发送常规 UDP 流量时没有看到这种情况。
有谁知道为什么当网络上发送多播数据时,将无线客户端移出所连接接入点的范围可能会导致接入点“崩溃”?不幸的是,我没有太多资源来进一步探究这个问题,所以我只是想看看这个问题是否有人听过,以及他们是否能够解决它。
编辑:我刚刚在完全不同的硬件上重现了这种情况。NETGEAR WNR2000 的多播数据包来自通过以太网连接的 WinCE 设备上运行的 Visual C++ 应用程序(即,与上面使用的设置完全不同)。不过,这种配置似乎很少出现这种情况,但我确实做到了。
答案1
可能是当设备到达范围边缘时,USB 适配器开始请求比 Pi 所能提供的更多的电量,从而导致不稳定。这在仅影响需要响应的 TCP 流量的情况下是有意义的,而 UDP 流量永远无法到达目标并被丢弃,而不会引起任何问题。
我不明白你是如何拥有“TCP 多播”的
答案2
什么会导致它崩溃?AP 的 Wi-Fi 芯片组驱动程序中的 AP 模式支持存在错误。嗯,是驱动程序,或芯片组固件,或可能是芯片组本身的硬件。
如果您可以访问该驱动程序的源代码并尝试调试它,我会首先查看当客户端调用 802.11 省电模式时它如何处理多播传输。
如果您只是想解决这个问题,请先尝试使用高品质的品牌 USB Wi-Fi 适配器,并采用来自 Broadcom 或 QCA(Qualcomm Atheros)等顶级供应商的芯片组。