【WIFI】WIFI数据的处理流程
本文最后更新于 28 天前,其中的信息可能已经有所发展或是发生改变。

概述

wifi数据的处理不管是发送还是接收,最终都是依赖于底层硬件,所以数据的流动一定会经过硬件、wifi驱动、内核,在用户空间中通常会使用hostapdwpa_sublicant来进行管理

数据的发送

数据包起源于用户空间的应用程序,应用程序会创建一个socket去绑定一个接口(如,以太网接口、wifi接口)然后通过socket去发送,现在通常会使用nl80211提供的接口来传输。数据从用户空间来到内核空间后,会先后通过套接字(nl80211)层、网络(协议栈)层、设备无关(mac80211)层

设备在来到套接字层后内核传输这些数据时会创建一个叫做sk_buff的数据结构,这个数据结构就是平时说到的skb,数据会在网络层中封装各种协议的头部尾部。mac80211层则是屏蔽了不同的硬件设备之间的差异,内核抽象出了一系列公共接口并将其使用数据结构ieee80211_ops来进行封装,各个wifi驱动只需要实现这些接口并向内核注册

数据从mac80211传到驱动后,还会将数据转化成底层硬件可以识别的形式,然后将数据发送给硬件

数据的接收

当数据包在空中被无线设备捕捉到后,硬件会向内核发出一个中断,然后调用提前注册好的驱动程序中的对应的中断回调。驱动会将接收到的数据包做的处理后发到mac80211模块,驱动的部分不同的厂家实现都不同,这一部分会涉及到802.3数据帧到802.11数据帧的转换

数据进入mac80211后会针对数据帧和管理帧进行不同的处理,如果接收到的是数据帧则会通过通过 netif_receive_skb 交付到网络协议栈。在协议栈中,各层网络协议将会对数据进行解析,识别协议首部。如果接收到的是控制帧则会通过ieee80211_sta_rx_queued_mgmt来处理,一部分控制帧会在mac80211模块中处理完成,还有一些会发送到用户空间的管理程序(wpa_sublicant

参考文档

浅谈Linux内核无线子系统(超详细~) – 知乎

《无线网络权威指南 第五版》

上一篇
下一篇