当应用程序通过802.11 WiFi网络发送UDP单播数据报时,有人可以解释它是如何工作的吗?假设非阻塞UDP套接字。为了具体,假设802.11n或802.11ac和一个相当新的Linux内核(Android Lollipop或Debian稳定)。具体来说,如果发送方NIC没有收到任何发送MPDU的肯定ACK,send()调用会返回-1并且内核中的套接字发送队列是否会显示为非空的netstat?并且NIC会重复发送相同的MPDU吗?
如果这不是正确的地方,请指出一个好的参考或其他StackExchange网站。
答案 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层协议,该协议可以承载任何上层协议。