【源码解析】hostapd(7)管理帧处理
本文最后更新于 28 天前,其中的信息可能已经有所发展或是发生改变。

NL80211模块接口

hostapd主要的一个功能便是处理管理帧,在过去,接收和发送管理帧都需要由 monitor 模式的接口来进行,那时需要一个运行 master 模式的接口来处理标准流量,还需要另一个单独的接口负责进行认证、密钥管理等工作。第二个接口可以使用标准的 Linux socket 进行读写,而不需要任何特殊的 API 。作为备份,nl80211 驱动仍然支持该方法

后来,nl80211 实现了用于发送管理帧(NL80211_CMD_FRAME)与接收返回(NL80211_CMD_REGISTER_FRAME)的特殊命令。这样就可以在用户空间使用单一的接口来管理无线基础设施了。这是目前推荐的使用管理帧的方法,可以被用于所有实现 AP 模式的 mac80211 驱动

hostapd模块对管理帧的处理

管理帧的接收

关于wifi管理帧的处理,大体流程是,hostapd会提前将网卡设置为AP模式,创建socket绑定网卡,底层硬件在接收到wifi数据后首先将数据从内核传到用户态,由hostapd设置的TX事件的回调,在对应的回调函数中分析帧格式

接受内核发送的管理帧是通过nl80211来实现,具体是通过NL80211_CMD_FRAME来进行接收,hostapd中使用hostapd_mgmt_rx来接受内核发来的数据

在mac80211中也会有关于管理帧的处理逻辑

管理帧的构造和发送

对于管理帧的构造则是通过hostapd和驱动来一起完成

hostapd (用户空间) 的职责:构造主要内容和逻辑

hostapd 负责管理接入点 (AP) 的高层逻辑和策略,因此它需要构造管理帧的大部分内容

  • 构造帧内容: hostapd 生成认证响应、关联响应、EAPOL 密钥交换消息、解除认证/解除关联请求等帧的负载 (payload) 和各种信息元素 (IEs)。它决定了帧中的安全参数、支持速率、SSID、认证算法等具体内容
  • 安全和加密: 密钥管理和管理帧保护 (PMF, 802.11w) 的加密逻辑都在 hostapd 中实现

驱动/内核 (内核空间) 的职责:封装、发送和底层处理

驱动程序和内核的 mac80211 子系统负责处理与硬件相关的底层任务

  • 底层封装: hostapd 将构造好的帧数据通过 Netlink 接口 (NL80211_CMD_FRAME 命令) 发送给内核。内核和驱动负责添加必要的底层 MAC 头部、CRC 校验、时间戳,并将数据包传输到物理空中
  • 信标帧的模板: 对于需要周期性、高精度发送的信标帧 (Beacon Frames),hostapd 会创建信标帧的“模板”并将其传递给内核/驱动。内核随后在硬件层面自动、周期性地发送这些信标帧,减轻用户空间的负担
  • 硬件卸载: 某些驱动和硬件甚至可以处理部分管理帧的自动响应(例如,简单的 Probe Response),但对于复杂的认证流程,控制权仍在 hostapd

wifi数据帧的处理

wifi数据帧的处理主要是在内核协议栈和驱动来进行完成,需要注意的是内核协议栈并不区分802.11数据帧和802.3数据帧,所有的802.11数据帧会转换成802.3数据帧。对于802.11数据帧和802.3数据帧之间的转化在物理层、wifi驱动和内核的mac80211模块来进行

参考文档

https://wireless.docs.kernel.org/en/latest/en/users/documentation/hostapd.html

Linux hostapd (Linux Wireless 文档翻译) – 知乎

上一篇
下一篇