4. 连接流程优化:扫描策略、Beacon帧监听、认证与关联、4次握手与PMK缓存、快速漫游(802.11r)
Wi-Fi连接,说白了就是STA(你的手机/设备)和AP(路由器)之间的一场“握手舞”。跳得好,秒连;跳不好,卡顿、掉线、连不上全来了。这一章,我带你把这套舞步拆开揉碎,看看每一步能怎么优化。
4.1 扫描策略:主动 vs 被动,别让设备“瞎转悠”
设备要连网,第一步得知道周围有哪些AP。扫描就两种方式:主动扫描和被动扫描。很多工程师不重视这个,结果设备在空旷环境里扫描半天,功耗还高。
4.1.1 被动扫描:等信标,省电但慢
AP会定期广播Beacon帧(通常每100ms发一次)。设备只需要切换信道,然后“听”就行了。优点是设备不用主动发数据,省电。缺点是——你得等。如果Beacon周期是100ms,设备在每个信道上至少要等100ms才能确定有没有AP。扫完2.4G的13个信道,光等就要1.3秒。
4.1.2 主动扫描:发探测请求,快但“吵”
设备主动在信道上发Probe Request帧,AP收到后回复Probe Response。这样设备不用等Beacon周期,每个信道几十毫秒就能搞定。但缺点也很明显:主动扫描会占用无线介质,增加空口冲突概率。在密集AP环境下,一堆设备同时发Probe Request,信道会变得很“吵”。
| 对比项 | 被动扫描 | 主动扫描 |
|---|---|---|
| 触发方式 | 监听AP周期性Beacon | 设备主动发送Probe Request |
| 扫描速度 | 慢(每个信道100ms+) | 快(每个信道10-50ms) |
| 功耗 | 低(仅接收) | 高(收发+等待响应) |
| 空口占用 | 几乎无 | 高(Probe Request/Response交互) |
| 适用场景 | 低功耗IoT设备、待机状态 | 快速漫游、用户主动触发连接 |
4.2 Beacon帧监听:不只是听个响
Beacon帧里藏着很多关键信息。很多工程师只关注SSID和信号强度,其实Beacon帧的“毛细血管”里都是宝。
我个人习惯,在调试连接问题时,第一件事就是抓Beacon帧,看这几个字段:
- Timestamp(时间戳):用于同步TSF时钟,对漫游和节能模式至关重要。
- Beacon Interval(信标间隔):默认100TU(约102.4ms)。如果AP配置了200TU,设备被动扫描时间会翻倍。
- Capability Information(能力信息):是否支持WMM、802.11r、802.11k/v等。设备根据这个决定是否发起快速漫游。
- HT/VHT/HE Capabilities(高吞吐/极高吞吐/高效能力):决定了连接速率上限。如果AP支持160MHz带宽但Beacon里没广播,设备可能只协商80MHz。
- RSN IE(健壮安全网络信息元素):包含加密套件、AKM套件、PMKID等。这是4次握手的前置信息。
4.3 认证与关联:从“认识”到“建立连接”
扫描到AP后,设备需要经过认证(Authentication)和关联(Association)两个步骤,才能进入数据通信阶段。
4.3.1 认证(Authentication)
早期Wi-Fi用开放系统认证(Open System Authentication),其实就是走个过场——设备发个认证帧,AP回个成功帧,完事。现在WPA2/WPA3下,认证过程被集成到了4次握手里,但802.11管理帧层面的认证仍然存在。
4.3.2 关联(Association)
设备发送Association Request帧,包含自身的能力信息(支持的速率、信道带宽、节能模式等)。AP回复Association Response,分配AID(关联ID),并确认协商的能力集。
这里有个优化点:关联请求的重试机制。如果AP没收到Association Request(比如信道干扰),设备需要重发。默认重试间隔可能很长(几百毫秒)。我建议在驱动层将重试间隔缩短到50ms,并设置3次重试上限。这样既保证成功率,又不会让用户感觉“转圈圈”。
4.4 4次握手与PMK缓存:别每次都从头来
关联成功后,如果是安全网络,就进入4次握手阶段。这是连接流程中最耗时、最容易出问题的环节。
4.4.1 4次握手流程
- AP → STA: AP发送EAPOL-Key帧(包含ANonce)。
- STA → AP: STA回复EAPOL-Key帧(包含SNonce + MIC)。
- AP → STA: AP发送EAPOL-Key帧(包含GTK + MIC + 加密的GTK)。
- STA → AP: STA回复EAPOL-Key帧(确认)。
每次握手都需要计算PTK(成对临时密钥),涉及HMAC-SHA1/AES等运算。在低功耗MCU上,一次握手可能耗时50-100ms。
4.4.2 PMK缓存:省掉一半时间
PMK(成对主密钥)是4次握手的“种子”。如果设备之前和AP成功完成过4次握手,AP可以缓存PMKID。下次连接时,设备在Association Request里带上PMKID,AP发现缓存命中,就可以跳过完整的4次握手,直接进入密钥派生阶段。
嗯,这里要注意:PMK缓存是有时效的。WPA2标准建议缓存时间不超过24小时。但在实际项目中,我建议设置为4-6小时,既保证安全,又提升重连速度。
4.5 快速漫游(802.11r):无缝切换的秘诀
在多个AP组成的网络中,设备从一个AP切换到另一个AP时,如果重新走一遍完整的认证+4次握手,延迟可能达到几百毫秒。对于VoIP、视频通话等实时业务,这就是卡顿和掉线。
802.11r(快速漫游)的核心思想是:在关联之前,就把密钥协商好。
4.5.1 802.11r的两种模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Over-the-Air(OTA) | 设备通过管理帧(Authentication/Reassociation Request)携带FT(快速过渡)信息元素,直接和目标AP协商PTK。 | AP之间没有有线骨干网,或需要简化部署。 |
| Over-the-DS(OTDS) | 设备通过当前AP(原AP)转发FT请求到目标AP。目标AP生成密钥后,通过原AP返回给设备。 | AP之间有可靠的有线骨干网(如CAPWAP隧道)。 |
4.5.2 802.11r的优化点
- 减少握手次数: 传统漫游需要4次握手(4个EAPOL帧),802.11r只需要2次(FT Authentication + Reassociation)。
- 预计算密钥: 设备在关联当前AP时,就可以通过FT信息元素获取相邻AP的PMK-R1(漫游密钥)。切换时直接使用,无需重新计算。
- 零等待切换: 理想情况下,802.11r的切换延迟可以控制在20ms以内。
4.6 连接流程优化全景图
下面这张图,我把整个连接流程的优化点串起来了。你可以把它当作调试时的检查清单。
4.7 实战建议:从抓包到调优
最后,给你几个可以直接上手的建议:
- 抓包分析: 用Wireshark抓取连接过程的802.11管理帧。重点关注Probe Request/Response、Beacon、Authentication、Association、EAPOL-Key帧的间隔时间。如果某个步骤耗时超过200ms,就是优化目标。
- 调整扫描参数: 在驱动层暴露扫描策略配置接口。允许用户根据场景选择“快速扫描”(主动)或“省电扫描”(被动)。
- 验证PMK缓存: 在AP端查看PMK缓存命中率。如果命中率低于80%,检查PMKID是否在Association Request中正确携带。
- 802.11r兼容性测试: 不同芯片厂商的802.11r实现可能有差异。我建议在实验室搭建多AP环境,用不同品牌的STA测试漫游延迟。如果发现某个STA漫游失败,大概率是FT信息元素解析问题。