Linux WiFi 架构解析:连接流程(基础篇二)

前言

Linux WiFi 架构解析:从用户态到驱动与硬件(基础篇一),我们知道在Wi-Fi的控制面上,是wpa_supplicant/hostapd 发起,通过 nl80211/cfg80211/mac80211/驱动/固件协同,完成扫描、认证/关联、安全协商与密钥安装等"把链路连起来并授权"的动作。

在数据面上,应用经 Socket API 进入 IP 协议栈,通过 net_device(wlan0) 与 mac80211/驱动完成收发;数据面是否可用取决于控制面授权(Authorized)与 IP 层就绪。

对于"WiFi 已连接/未连接",在工程语境里不是一个二值状态,而是一组分阶段完成的条件集合:

  • 链路层(802.11 L2):扫描 → 认证/关联 → 安全协商 → 受控端口授权

  • 网络层(IP L3):获取地址 → 建立路由(使IP可达)

  • 应用层(DNS L7):DNS 可用(可选但常见,常被当作"网络可用"的组成条件)

本文目标是建立一张心智模型:当你说"连接完成"时,具体意味着哪些阶段已完成;每个阶段在 Linux 里由哪些组件协作实现。

接下来我们使用一张动态行为图,按阶段拆解Wi-Fi的连接机制与流程。动态行为图的软件组件全部来自Linux WiFi 架构解析:从用户态到驱动与硬件(基础篇一),不清楚这个图片的同学们课可以回顾前面这篇博客的软件架构图。

Wi-Fi连接的动态行为图

动态行为图详解

序号 / 连接步骤 简短描述
1. Scan 请求(控制面) 用户态发起扫描请求,进入内核 WiFi 控制通路。
2. 配置扫描/切信道 内核将扫描参数下发给驱动/固件,并驱动信道驻留策略。
3. Probe/Passive scan 终端在目标信道发送 Probe 或被动监听以发现周围 BSS。
4. Beacon/ProbeResp AP 回应 ProbeResp 或周期性发送 Beacon,提供 BSS 信息与能力。
5. 扫描结果上报 驱动/固件将收集到的 BSS 信息上报给内核。
6. BSS 列表 内核汇聚并回传扫描结果(SSID/BSSID、频点、信号、RSN 等)。
7. Auth/Assoc 请求(控制面) 用户态选定目标 BSS,发起 802.11 认证/关联流程。
8. 建链路/关联 内核把建链路动作下发到驱动/固件,准备与 AP 交互。
9. 802.11 Auth/Assoc STA 与 AP 交换认证/关联管理帧,协商加入 BSS。
10. AuthResp/AssocResp AP 返回认证/关联响应,给出结果与(可能的)能力/原因信息。
11. 连接事件 驱动/固件将关联状态变化上报内核。
12. 已关联 用户态收到已关联事件;此时可能仍处于受控端口未授权状态。
13. Key 配置/PMF 参数(控制面) 用户态配置 RSN/PMF 相关安全参数,并触发密钥相关操作。
14. 安装密钥/启用受控端口 内核将密钥材料与控制参数下发至驱动/硬件路径,准备使能数据通路。
15. EAPOL(4-way / SAE 等) STA 与 AP 进行安全协商与确认(WPA2 4-way 或 WPA3 SAE 等)。
16. EAPOL AP 侧返回对应 EAPOL 报文以完成协商闭环。
17. 连接完成(L2) 会话密钥生效,受控端口授权(Authorized),链路层安全闭环完成。
18. 获取地址/建路由(L3) 通过 DHCP 或静态配置获得 IP 地址并建立路由,使 IP 可达。
19. IP 就绪 L3 配置生效,接口具备对外通信的基础条件。
20. 业务数据收发(数据面) 应用数据经 Socket→IP 栈→wlan0(net_device)→驱动/空口进行端到端传输。

Wi-Fi连接的关键路径

扫描(Scan)路径 :STA 在各信道被动接收 Beacon 或主动触发 Probe,收集并缓存周围 BSS 的关键信息(SSID/BSSID、频点、信号强度、RSN 能力),输出候选网络集合,供后续选网与连接决策使用。

认证/关联(Auth/Assoc)路径 :STA 选定目标 BSS 后发起 802.11 认证与关联,完成能力协商并加入该 BSS,形成"二层已加入"的连接关系;但在安全未完成前,链路通常仍处于受控端口未授权状态。

安全协商(WPA2/WPA3)路径 :基于 RSN 参数与凭据(PSK/SAE/802.1X 等)完成密钥派生与确认(WPA2 的 WPA 4-way handshake 或 WPA3 的 SAE 等),并将会话密钥安装到驱动/硬件,使受控端口授权(Authorized),这是 L2 意义上的"连接完成"。

IP 就绪(L3)路径 :在 L2 已可用的前提下,通过 DHCP 或静态配置获得地址并建立路由(常伴随 DNS 配置),使接口具备 IP 可达性;之后应用的数据面才能通过 Socket → IP 栈 → wlan0 稳定进行端到端通信。

小结

WiFi 连接更像"四段接力":扫描把候选 BSS 找出来 → 认证/关联把链路成员关系建起来 → 安全协商把会话密钥谈妥并生效 → IP 就绪把地址与路由配齐,最终进入可通信状态。

Linux 侧的协作链路可以理解为"一路下发、一路回报":用户态状态机(wpa_supplicant/hostapd)提出连接意图 → nl80211 作为控制通道进入内核 → cfg80211/mac80211 负责 802.11 配置与通用逻辑 → 驱动/固件/硬件执行具体动作并回传事件。

判定"连上了"要分 L2 与 L3:L2=已关联且密钥生效(受控端口 Authorized);L3=有 IP 地址与可用路由(IP 可达);DNS 属于应用层解析服务,常决定"能不能用域名访问",但不等同于 L3。

"控制面/数据面"是两条不同的通路:控制面推进扫描、关联、握手、装密钥等状态机;数据面则由应用经 Socket→Linux 网络协议栈→net_device(wlan0)→驱动完成收发。

相关推荐
这个DBA有点耶4 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下5 小时前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构
用户8055336980311 小时前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户0340952979111 小时前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
小鼻子的猫11 小时前
独立开发 30 天:2.5 万行代码,23 个 Bug,5 次重构——一个 AI 社区的诞生
架构
咖啡八杯11 小时前
GoF设计模式——命令模式
java·设计模式·架构
乘云数字DATABUFF11 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
candyTong12 小时前
阿里开源 AI Code Review 工具:ocr review 的执行链路解析
javascript·后端·架构
doiito1 天前
【Agent Harness】TPS的“自工程完结”教会了我一件事:别把Bug留给下一道工序
架构·rust