一直在研究Linux无线802.11驱动,突然出现这个问题:
假设STA A向STA B发送一个正常的数据包,根据802.11标准,STA B如果成功接收到STA A的数据包,将发送ACK。同时STA A将切换到接收状态以接收STA的ACK B.
我的问题是:
控制在 STA A 接收 ACK 从 tx 切换到 rx 的代码在哪里?它是由硬件完成的,还是由驱动程序完成的?
如果有人能启发我,真的很感激。谢谢!
通常,ACK 需要以 SIFS 标准发送,请参阅(https://en.wikipedia.org/wiki/Short_Interframe_Space)。SIFS 的实际值因协议而异(例如,在上面的共享链接中可以看到 802.11b 其仅 10uS 相似)。
从技术上讲,必须在 10uS 内接收数据包并发送 ack。在软件中这样做是可能的,但不鼓励这样做,因为这种硬时间依赖性。因此,通常 802.11 ACK 由硬件生成。
从一些实现80211的同事那里找到答案:ACK由硬件处理,对于其他一些具有严格时序要求的低MAC相关功能也是如此。