仅连接一个WIFI客户端时,通过WIFI将UDP数据报发送到IP地址与通过WIFI广播之间有什么区别?

问题描述 投票:0回答:2

我正在尝试使用Raspberry PI作为客户端进行WIFI多播和广播。如果我通过WIFI进行子网广播或多播,则会丢失很多数据包。如果我“广播”到接收者的特定IP,则不会丢失任何数据包。我只有1个接收器/客户端连接到我的WIFI AP。我正在使用QT框架的QUDPSocket :: writeDatagram。因此,我只需要在那里设置IP并从本质上选择广播/子网-广播/多播。我已验证使用Wireshark设置了适当的MAC地址,并且一切似乎正确。我不明白为什么我会在性能上产生如此巨大的差异。全部为UDP,只有一个WIFI客户端。有什么想法吗?

编辑以回复Sam Mason:QUDPSocket :: writeDatagram需要一个IP地址。该IP地址指示您是单播,组播,广播还是子网广播。我循环调用此电话以达到1.5Mbps的固定发送速度。 (与我应该能够通过WIFI网络进行推送的速度相比,这比较慢,因此我的要求并不高)。我的问题确实是为什么单播会丢弃零个数据包,而所有其他方法都丢弃很多数据包。我知道非单播的“最低公分母”方面,但是我只连接了1个客户端,所以...这意味着什么?)。我确实是在对UDP单播和UDP广播与单客户端连接之间的真正区别进行了详尽的解释。

udp wifi broadcast multicast
2个回答
1
投票

简短的答案是:您正在看到特定WLAN路由器的实现细节的工件。其他路由器的行为可能会或可能不会有所不同。

详细信息:

WLAN在链路层上使用两种通用的通信模式:单独寻址或组寻址。

对于1:1通信,它使用单独寻址的通信,并且通过在链路层上进行确认和重新传输而使其变得健壮。用于单播UDP和TCP等。

对于一对多通信,它使用组地址帧,并且在链路层上根本没有防止丢包的保护措施。另外,在这种模式下,路由器可能会退回到最慢的WLAN传输速率(1MBits / s),以确保每个STA都能接收到它。

现在,WLAN路由器可以自由使用哪种模式用于哪个IP数据包:

从发送方到WLAN路由器的任何数据包(单播/多播/广播):单独寻址。这始终是1:1的关系(一个发送方到一个路由器)。

UDP单播和TCP等:它使用单独寻址的帧发送到目标STA。没有丢包。高速。

UDP多播:某些WLAN路由器(实际上很常见)很聪明,并且当只有一个客户端注册通过IGMP接收此多播组时,它们仍使用单独寻址的帧。当多个STA想要接收多播帧时,它将最有可能使用组地址(具有可见的数据包丢失)。路由器可以自由选择数据速率。通常,它将使用较高的数据速率,而不是1 MB的后备时间。

UDP广播:大多数WLAN路由器将盲目使用组寻址(具有可见的数据包丢失),并将使用1MB / s的后备数据速率作为最低公分母。

通过WLAN的UDP mutlicast和UDP广播的行为与通过以太网的UDP多播和UDP广播的行为非常不同。您必须期望有很多工件,数据包丢失,重新排序的数据包,非常慢的数据速率。

以上解释了为什么在使用1 MB / s后备数据速率通过慢速1MB / s组地址链路发射1.5 MB / s广播时看到丢失的数据包的原因。


0
投票

假设我正确解释了您的问题,那是因为单播比广播/多播运行快得多。有关更多信息,请参见https://superuser.com/a/695967,并且链接的问题For UDP broadcast gurus: Problems achieving high-bandwidth audio UDP broadcast over WiFi (802.11N and 802.11G)也相关

引用相关部分:

由于Wi-Fi要求以一种“最低公分母”的传输速度发送多播和广播,因此通过Wi-Fi进行的任何类型的多播/广播都会变慢。

如果您包括几行相关的代码,那将是很好的选择,因为您的用法有些模棱两可。例如“广播到接收者的特定IP”是什么意思?我假设您的意思是发送!

© www.soinside.com 2019 - 2024. All rights reserved.