6

我正在尝试使用专用网络上的 UDP 广播通过 WiFi 将多声道音频从一台服务器发送到多台客户端计算机。

我正在使用名为 Pure Data 的软件,以及名为 netsend~ 和 netreceive~ 的 UDP 广播工具。代码在这里: http ://www.remu.fr/sound-delta/netsend~/

长话短说,我能够在点对点网络中将 9 个频道发送到一台客户端计算机,但是当我尝试向 2 个客户端广播时(还没有尝试更多),我得到了没有声音。我可以压缩音频并通过 UDP 广播成功地将 4 个压缩通道(未压缩大小的 10%)发送到 2 个客户端。或者我可以通过 UDP 广播向 2 个客户端发送 1 个频道,但会出现一些故障。

WiFi路由器是Linksys WRT300N。所有计算机都运行 Windows XP。IP 地址为 192.168.1.x,子网掩码为 255.255.255.0,子网广播地址:192.168.1.255。

我很好奇 - 路由器中的 UDP 广播数据包会发生什么?如果我的子网掩码为 255.255.255.0,那么路由器是否为从广播地址发送的每个数据包生成 254 个数据包?

我的 WiFi 带宽至少为 100Mbps,但我似乎无法通过 UDP 广播向多个客户端发送超过 10Mbps 以上的音频。

是什么阻止我发送音频达到 WiFi 的带宽限制?

任何关于套接字代码修改、网络设置、路由器设置、子网修改的建议......非常感谢!

谢谢尼克

4

4 回答 4

7

您的问题是由接入点的速率控制算法引起的。通过单播,接入点跟踪每个特定接收器可以可靠接收的数据速率,并以该速率发送。对于多播,接入点不知道哪些接收器对数据感兴趣,因此简单的接入点以尽可能低的速率(1Mb/s)发送数据。更好实施的接入点可以以最慢的连接客户端正在使用的速率发送数据,最好的接入点使用 IGMP 侦听来查看谁在接收每个 IP 多播流,它们将从接收器中为该流选择最慢的速率.

最简单的解决方案是当您拥有少量 WiFi 接收器时不使用多播。

于 2010-12-03T00:40:51.030 回答
3

Are all parties connected via WiFi or is the sender using a wired connection to the Access Point? Broadcast data will be transmitted as unicast data from a station to an access point and the access point will then retransmit the data as broadcast/multicast traffic so it will use twice the on-air bandwidth compared to when the sender sits on the wired side of the AP.

When sending a unicast frame the AP will wait for an ACK from the receiving station and it will retransmit the frame until the ACK arrives (or it times out). Broadcast/multicast frames are not ACKed and therefore not retransmitted. If you have a busy/noisy radio environment this will cause the likelyhood of dropped packets to increase, potentially a lot, for multicast traffic compared to unicast traffic. In an audio application this could certainly be audible.

Also, IIRC, broadcast/multicast traffic does not use the RTS/CTS procedure for reserving the media which exarbates the dropped packets problem.

It could actually be the case that multiple unicast streams work better than a single multicast stream under less-than-ideal radio conditions given that the aggregated bandwidth is high enough.

If you can I would suggest that you use wireshark to sniff the WiFi traffic and take a look at the destination address in the 802.11 header. Then you can verify if the packets are actually broadcast or not over the air.

于 2009-11-30T10:53:00.197 回答
1

Your design is failing due to a common misconception with WiFi speeds. With 802.11n the number 300mb/s is the link speed, not the actual bandwidth available for user data or even the IP layer. The effective bandwidth is closer to 40mb/s best case, have a look at the FAQ on SmallNetBuilder.com that discusses this in further detail.

http://www.smallnetbuilder.com/wireless/wireless-basics/31083-smallnetbuilders-wireless-faq-the-essentials

于 2010-11-28T04:45:12.157 回答
0

我很好奇 - 路由器中的 UDP 广播数据包会发生什么?如果我的子网掩码为 255.255.255.0,那么路由器是否为从广播地址发送的每个数据包生成 254 个数据包?

不,“路由器”不会生成 254 个单独的数据包。此外,我怀疑该协议利用“多播”地址而不是使用“广播”地址。

由于广播/多播流量很容易被滥用,因此有许多网络设备默认限制/阻止此类流量。当然,一些重要的协议(例如 ARP、DHCP)依赖于广播/多播地址来运行,默认情况下不会被阻止。

因此,检查路由器上的多播/广播控制旋钮可能是一件好事。

于 2009-11-15T01:10:15.003 回答