我真的可以通过 WIFI 组播吗?

网络工程 无线的 IEEE-802.11 多播 流媒体
2021-07-14 18:21:07

正在通过 wifi (5ghz) 流式传输 UDP - 大约 1.5k/包...尝试同时流式传输到约 10 个设备,延迟极低..

据我了解,Wifi 永远无法实现真正​​的多播,因为每个设备都与 AP 保持“1:1”关系,然后接收相同的数据包……然后下一个设备连接并获取相同的数据包。

  1. 有多种类型的路由器/AP——“3x3”和“4x4”,一些带有 MIMO 等。我应该使用什么作为选择 AP 的标准?

  2. 我可以真正通过 wifi 多播到 iOS 设备吗?我的理论正确吗?

  3. 有没有办法多播而不是将每个数据包/客户端视为单播?

2个回答

据我了解,Wifi 永远无法实现真正​​的多播,因为每个设备都与 AP 保持“1:1”关系,然后接收相同的数据包……然后下一个设备连接并获取相同的数据包。

你的理解有问题。组播确实存在,但与无线网络上的大多数管理流量一样,它必须以最低支持的基本/基本/所需数据速率运行。默认情况下,这通常是 AP 支持的最低数据速率。

原因是从 AP 向周围客户端广播或多播的任何内容都必须以所有客户端都必须支持且可以可靠接收的速度发送。

您所指的是一种许多接入点都可以采用的技术,即多播到单播的转换。由于无线电介质是共享介质,因此以最低数据速率发送的多播帧可能比以最高数据速率发送的单播帧占用 300 倍或更多的“传输时间”。这通常比将多播作为多播流量发送要有效得多。

在默认配置 AP(802.11n 或更高版本)上的示例情况中,以尽可能高的速度向 10 个设备中的每一个(即总共 100 个帧)传送 10 个单播帧所花费的时间可能比传送一个多播帧所需的时间更少框架。

802.11 上多播的另外两个考虑因素通常是使用多播到单播转换的原因,即多播帧永远不会被确认,而单播帧在没有 ack 的情况下会被 AP 确认并重新传输(不要与 TCP 确认混淆,这是 L2 机制,也是在 AP 和客户端之间寻找最佳数据速率的过程的一部分)。

其次,如果 BSS 中的任何客户端设备使用省电模式,则仅定期发送组播帧(基于配置的 DTIM 和信标间隔)以确保所有客户端再次收到组播帧。通过多播到单播的转换,如果客户端不使用省电模式,帧会立即发送到客户端,而只会延迟到处于省电模式的客户端。

有多种类型的路由器/AP——“3x3”和“4x4”,一些带有 MIMO 等。我应该使用什么作为选择 AP 的标准?

首先,您需要一个满足或超过客户端设备功能的接入点。我的意思是,如果您的客户端是支持 802.11n 2x2 的设备,那么您至少需要一个 802.11n 2x2 AP。即使使用所有 802.11n 客户端,80​​2.11ac 也会为您提供一些优势,并且更多空间流永远不会受到伤害,因为额外的流以其他方式被利用。

其次,您需要一个接入点,您可以在其中拥有禁用/启用多播到单播转换的配置选项,为 ESS 选择特定支持/所需的数据速率,并且最好能够配置 DTIM 和信标间隔。

我可以真正通过 wifi 多播到 iOS 设备吗?我的理论正确吗?

分别是,是和否。您可以这样做,但是除非您真的知道自己在做什么,或者只是为了简单起见,否则您可能会利用多播到单播功能获得更“实时”的体验。未能根据您的情况获得以下正确信息实际上会减少客户端设备上的体验。

为了获得良好的性能,您需要尽可能向上调整所需的数据速率,同时根据您的环境和客户端设备与 AP 的距离保持可靠的信号。

由于 iOS 设备确实使用省电模式,因此您可能需要进一步调整 DTIM 和信标间隔,以减少省电模式引入的延迟。请记住,这些设置还会降低您的通话时间使用效率(即降低信标间隔意味着更多的信标等),造成的问题多于解决的问题。

有没有办法多播而不是将每个数据包/客户端视为单播?

正如我已经介绍的那样,是的。只要您的 AP 一开始就没有多播到单播功能,或者可以选择让您禁用它。

让我们测试一下。如果我们以恒定速率向连接到 WiFi 接入点的多个设备发送多播数据包,那么接入点应该报告相同数量的流量。

为了运行这个测试,我将数据包从有线 PC 发送到安卓平板电脑和树莓派。没有任何 iOS 设备。网络测试工具 iperf 可以通过以下设置轻松用于发送和接收这些数据包:

服务器(WiFI 上的设备):iperf -s -u -B 230.5.5.82

客户端(有线 PC):iperf -u -c 230.5.5.82 -t 60 -b 1M

通过这些设置,我们以 1Mbps 的速度发送多播数据包一分钟。运行此测试并查看接入点上的无线流量表明它始终保持在 1Mbps 左右,因此它必须进行真正的多播。结果中的另一个值得注意的事情是丢包率非常糟糕,远远超过 50%。这可能是因为多播数据包以尽可能低的速度发送,因此让我们强制接入点仅以最快的速度运行。我正在使用运行 dd-wrt ​​的 WRT54GL,其中设置称为“传输固定速率”。将其设置为最快速度后再次运行相同的测试会得到小于 5% 的更可接受的丢包率。

要实际回答问题:

  1. 获取允许您固定传输速率并支持多播的最快接入点。肯定有接入点可以自动将多播数据包转换为单播。对于速度问题,仅使用 5GHz 宽信道是不够的,因为客户端实际上可以以多种不同的速度进行通信。

  2. 无法想象在 iOS 设备上事情会有所不同,因为主要的决定因素是接入点。

  3. 请参阅 1,因为它取决于接入点。

编辑:在对一些交流 AP 进行更多测试后,结果证明多播的重要事情是能够设置可用速率。多播仍然使用 g 速度,因此可用的物理速率为 6、9、12、18、24、36、48 和 54Mbps。大多数 AP 将默认为较慢的速度,因此能够禁用它们以强制其使用更高的速率将大大加快速度。能够设置这可能是组播 AP 最重要的标准。例如,在现代版本的 DD-WRT 中,可以使用命令行上的“wl rateset”命令进行设置。它确实隐藏得很好,大多数固件不允许设置。