通过802.11n进行UDP单播 - L2正向ACK对Linux套接字发送缓冲区

时间:2015-11-24 15:01:08

标签: linux sockets networking udp 802.11

当应用程序通过802.11 WiFi网络发送UDP单播数据报时,有人可以解释它是如何工作的吗?假设非阻塞UDP套接字。为了具体,假设802.11n或802.11ac和一个相当新的Linux内核(Android Lollipop或Debian稳定)。具体来说,如果发送方NIC没有收到任何发送MPDU的肯定ACK,send()调用会返回-1并且内核中的套接字发送队列是否会显示为非空的netstat?并且NIC会重复发送相同的MPDU吗?

如果这不是正确的地方,请指出一个好的参考或其他StackExchange网站。

2 个答案:

答案 0 :(得分:0)

在我的理解中。 Wifi(第2层)不关心UDP / TCP协议,对于wifi硬件,它只是一个帧,

演员会像这样行事.....

帧发送 - >没有确认 - >再次重试 - >没有确认 - >重试 - >没有确认 - >重试......

重试几次后,wifi硬件将丢弃此帧并在NIC缓冲区中发送下一帧。 wifi驱动程序不应该始终保留此帧,因为帧丢失或丢失通常是wifi中的情况。

然后我们现在讨论UDP网络协议,因为它是无阻塞的UDP套接字,UDP不关心任何错误,它只是继续发送和发送....

Android手机有一项功能 - “miracast”,它还使用UDP作为视频流协议,并使用wifi传输数据。也许你可以检查这个功能是如何工作的。

答案 1 :(得分:0)

第2层(在这种情况下,Wi-Fi)对所使用的第3层协议(IP,IPX等)一无所知,更不用说第4层协议(TCP,UDP,SPX等)使用:Wi-Fi不知道IP,它不知道UDP。网络层的重点是它们彼此独立。 Wi-Fi可以承载任何第3层协议,而第3层协议可以承载任何第4层协议,该协议可以承载任何上层协议。