跳转至

扫描到可用网络的完整生命周期

sequenceDiagram
    autonumber
    participant App as App / Network Stack
    participant Supplicant as wpa_supplicant / SME
    participant Driver as Host Driver (cfg80211)
    participant HW as Wi-Fi Device / MAC
    participant AP as Access Point (BSS)

    Note over HW,AP: 1. 扫描阶段 (Scan)
    Supplicant->>Driver: nl80211 TRIGGER_SCAN
    Driver->>HW: 执行主动/被动扫描
    HW->>AP: Probe Request
    AP-->>HW: Probe Response (或监听 Beacon)
    HW-->>Driver: BSS Report 事件上报
    Driver-->>Supplicant: SCAN_RESULTS (匹配 SSID, AKM, RSSI)

    Note over HW,AP: 2. 802.11 认证与关联 (Auth & Assoc)
    Supplicant->>Driver: nl80211 CONNECT (或 AUTH/ASSOC)
    Driver->>HW: 发送管理帧
    HW->>AP: Auth Request (Open System, Seq 1)
    AP-->>HW: Auth Response (status=0, Seq 2)
    HW->>AP: Assoc Request (Capabilities, RSN IE)
    AP-->>HW: Assoc Response (status=0, AID)
    HW-->>Driver: Assoc Event
    Driver-->>Supplicant: NL80211_CMD_CONNECT (已关联但受控端口未授权)

    Note over HW,AP: 3. 四次握手 (RSN 4-Way Handshake)
    Note over Driver,HW: 受控端口阻断普通单播,仅放行 EAPOL
    AP->>HW: EAPOL-Key M1 (ANonce)
    HW->>Supplicant: 上报 EAPOL M1 (计算 SNonce, PTK)
    Supplicant->>AP: EAPOL-Key M2 (SNonce + MIC)
    AP->>Supplicant: EAPOL-Key M3 (Install PTK flag, GTK, MIC)
    Supplicant->>Driver: SET_KEY (安装 PTK / GTK 到硬件加密引擎)
    Supplicant->>AP: EAPOL-Key M4 (确认)
    Supplicant->>Driver: PORT_AUTHORIZED (打通受控端口)

    Note over App,AP: 4. IP 获取与业务数据 (DHCP & Data)
    App->>Driver: DHCP Discover (UDP 67/68 广播)
    Driver->>HW: 加密并空口发送
    AP-->>App: DHCP Offer -> Request -> ACK (分配本地 IP)
    App->>AP: TCP/UDP 正常端到端业务通信

1. 扫描与候选网络

被动扫描监听 Beacon;主动扫描发送 Probe Request 并接收 Probe Response。扫描结果不仅包含 SSID/RSSI,还包含信道、能力、加密套件与负载等信息。扫描不到时先检查 regulatory domain、信道、扫描 dwell、并发角色和设备是否处于可扫描状态。

2. 认证与关联

常见 Open System Authentication 只是 802.11 管理过程,不等同于 WPA 密钥认证。Association Request/Response 协商能力、速率、HT/VHT/HE、QoS 等参数,并由 AP 分配 Association ID。

3. 密钥握手

WPA2-Personal 的四次握手可抽象为:

sequenceDiagram
    participant AP
    participant STA
    AP->>STA: M1 ANonce
    STA->>AP: M2 SNonce + MIC
    AP->>STA: M3 protected Key Data + MIC
    STA->>AP: M4 confirmation

排查时比“第几次握手”更重要的是:Replay Counter 是否单调、MIC 是否有效、密钥安装时机是否正确、重传后双方状态是否一致。WPA3/SAE 还增加提交/确认等流程,应先确认双方实际选择的 AKM。

4. 受控端口与 IP

关联完成后,普通业务通常仍受 Port Control 限制;EAPOL 需要被特殊放行。握手成功后才进入 DHCP:Discover、Offer、Request、ACK。若抓到 EAPOL 完成却没有 DHCP,应转向数据队列、聚合/重排序、桥接、防火墙和 DHCP 服务,而不是继续追认证帧。

5. 连通性与漫游

获得地址不代表 DNS、网关和公网连通。平台可能执行 captive portal 检测并决定 UI 状态。漫游时还要处理旧 BSS 的队列、密钥、BA Session 与新 BSS 的快速建链,状态清理不完整容易造成“看似已漫游但业务断流”。

最小故障表

最后成功事件 下一项证据
扫描完成 候选 BSS 是否被过滤、拒绝原因
Authentication Response Association status code
Association Response EAPOL M1/M2、AKM 与 cipher
四次握手完成 密钥安装事件、controlled port
DHCP Discover 发出 空口是否出现、AP 是否返回 Offer
获得地址 ARP/ND、DNS、网关与连通性探测

Scan request 的完整生命周期

一次扫描有 request identity、信道列表、主动/被动策略、dwell budget 和取消状态。收到 BSS 结果不代表扫描结束;scan done 也不代表找到了可用候选。

候选过滤还检查 AKM/cipher、能力、允许信道、RSSI/黑名单策略及历史失败。应保留每个被拒候选的 reason。多角色场景还要计算离开 home channel 的上限,避免扫描造成 AP Beacon 或 STA 接收窗口违约。

Cancel、interface delete 和 Firmware scan done 交错时,一个请求只应有一个 terminal completion。迟到的 BSS report 不能继续访问已释放请求。参考 cfg80211 接口生命周期

“Connected”在不同层的含义

观察点 可以证明 仍不能证明
Auth status=0 管理认证阶段成功 RSN 认证完成
Assoc status=0/AID 加入 BSS、能力结果 Key/controlled port ready
cfg80211 connect result 对应连接/关联操作结果 DHCP 和应用可达
supplicant COMPLETED 安全过程达到其完成状态 IP 配置、互联网服务
DHCP ACK 获取 IPv4 租约 DNS、网关之外的可达性

在 Host supplicant 完成握手的常见实现中,关联成功通知必须先到达,supplicant 才能继续安全流程。不能为了“connected 时 Key 必须 ready”而延迟该通知至握手后,从而制造循环等待。真正需要明确的是各通知/API 的语义和受控端口 gate。

一个失败分支的走读

教学情景:Association 成功、M1/M2 正常、M3 重发、Host 没有 M4 TX。先查 M3 是否到 supplicant,再查 MIC/replay 判定、Key 安装返回、M4 生成/提交。若 M4 已在空口出现而 AP 继续发 M3,再看 AP 接收与处理,不能只归因于本端。

不同层的 status/reason 不宜覆盖成一个“连接超时”:保存 AP status、Host errno、FW reason、最后事件和 deadline,让一次超时能够回溯到具体阶段。

IP 路径的独立验证

IPv4 走 DHCP/ARP,IPv6 可能走 RA/SLAAC/ND 或 DHCPv6,不能要求所有连接都出现 DORA。对 UDP DNS、网关和业务地址分层测试;captive portal 策略可能改变 UI,却未改变 802.11 关联。

复习追问与答案

扫描不到与扫描结果被丢弃如何区分? 比较 PHY/MAC 接收、FW BSS 上报、cfg80211 BSS cache 和候选过滤,定位第一处缺失。

错误密码一定在 Association 被拒吗? 不一定,PSK 不匹配常表现为后续握手失败;SAE 等 AKM 的失败阶段不同。

关联事件能否早于密钥安装? 可以,而且 Host 处理握手时通常如此;不要混淆关联与端口授权。

深入:安全与漫游状态建链到 DHCP 案例