当只有一个 WIFI 客户端连接时,通过 WIFI 向 IP 地址发送 UDP 数据报和通过 WIFI 广播有什么区别?

What's the difference between sending a UDP datagram to an IP address over WIFI and broadcasting over WIFI when only one WIFI client is connected?

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

编辑以回应 Sam Mason: QUDPSocket::writeDatagram 需要一个 IP 地址。该 IP 地址决定了您是单播、多播、广播还是子网广播。我正在循环调用此调用以实现 1.5Mbps 的固定 tx 速度。 (与我应该能够通过我的 WIFI 网络推送的内容相比,这很慢,所以我并没有要求太多)。我的问题确实是为什么单播应该丢弃零个数据包,而所有其他方法都丢弃大量数据包。我知道非单播的 'lowest common denominator' 方面,但我只连接了 1 个客户端,所以...这是什么意思?)。我真的很想对 UDP 单播和 UDP 广播与单客户端连接之间的真正区别进行详细的解释。

假设我正确解释了您的问题,那是因为单播运行速度比 broadcast/multicast 快得多。看到 https://superuser.com/a/695967 for more information, and the linked question For UDP broadcast gurus: Problems achieving high-bandwidth audio UDP broadcast over WiFi (802.11N and 802.11G) 也是相关的

引用相关部分:

Any kind of multicast/broadcast over Wi-Fi is going to be slow because Wi-Fi requires multicasts and broadcasts to be sent at a kind of "lowest common denominator" transmission speed.

如果您包含一些相关的代码行,那就太好了,因为您的措辞有些含糊。例如“'broadcast' 到接收方的特定 IP”是什么意思?我假设你只是想发送!

简短的回答是:您看到的是特定 WLAN 路由器的实施细节的伪影。其他路由器的行为可能不同也可能不同。

详情:

WLAN 在 link 层使用两种通用通信模式:单独寻址或群组寻址。

对于 1:1 通信,它使用单独寻址的通信,并且通过 link 层上的确认和重传使其变得健壮。这用于单播 UDP 和 TCP 等。

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

现在 WLAN 路由器可以自由选择使用哪个 IP 数据包的模式:

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

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

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

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

WLAN 上的 UDP 多播和 UDP 广播的行为与以太网上的 UDP 多播和 UDP 广播有很大不同。您必须预料到很多伪像、数据包丢失、重新排序的数据包、非常慢的数据速率。

上面解释了为什么在使用 1MB/s 回退数据在慢速 1MB/s 组地址 link 上触发 1.5 MB/s 广播时看到大量丢失的数据包率。