4. Beacon 帧解析:WiFi 网络的“心跳”信号
Beacon 帧,说白了就是 WiFi 网络的“心跳包”。
AP 每隔一段时间就会往外广播一次,告诉周围的设备:“我在这儿,我叫这个名儿,我能提供这些服务。” 你手机上的 WiFi 列表,就是靠抓这些 Beacon 帧填出来的。
我个人习惯,做配网抓包分析时,第一件事就是先看 Beacon 帧。为什么?因为它稳定、周期固定、信息量大。如果连 Beacon 都抓不全,那后面的 Probe Request、Association 基本就不用看了——信道大概率没锁对。
4.1 Beacon 帧的结构
Beacon 帧属于管理帧,帧体结构很清晰。我直接拆开给你看:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| Timestamp | 8 | AP 的 64 位时间戳,用于同步 |
| Beacon Interval | 2 | 发送间隔,单位 TU(1024 μs) |
| Capability Info | 2 | 能力信息,比如是否支持 WPA、是否加密 |
| SSID | 变长 | 网络名称,最大 32 字节 |
| Supported Rates | 变长 | 支持的速率集 |
| DS Parameter Set | 1 | 当前信道编号 |
| HT / VHT / HE Capabilities | 变长 | 802.11n/ac/ax 能力 |
| Vendor Specific | 变长 | 厂商自定义信息,比如小米、华为的配网扩展 |
嗯,这里要注意:Beacon Interval 默认是 100 TU,也就是大约 102.4 毫秒。但很多厂商会改这个值。我遇到过某款智能灯,Beacon Interval 设成了 200 TU,结果配网时手机扫描总是超时——因为它等 Beacon 等太久了。
4.2 Beacon 帧在配网中的作用
配网场景下,Beacon 帧承担了三个关键角色:
- 信道锚点:设备通过扫描 Beacon 帧,确定 AP 在哪个信道上。
- 时间同步:Timestamp 字段用于设备与 AP 的时间对齐,这对后续的省电模式很重要。
- 能力协商:Capability Info 和 HT/VHT 字段告诉设备,AP 支持多高的速率、是否加密、是否支持 WMM。
你想想看,如果 Beacon 帧丢了,设备就不知道 AP 在哪个信道。它只能盲目地跳频去扫,这过程叫 Passive Scan。效率极低,而且容易漏包。
核心结论:Beacon 帧的丢包,直接导致设备无法锁定 AP 信道,配网流程卡死在第一步。
4.3 抓包实战:如何过滤 Beacon 帧
用 Wireshark 抓 Beacon 帧,过滤条件很简单:
wlan.fc.type_subtype == 0x0008
或者更直观一点:
wlan.fc.type == 0 && wlan.fc.subtype == 8
我个人习惯把 Beacon 帧单独列出来,然后看三个关键指标:
- Beacon Interval 是否稳定:相邻两个 Beacon 帧的时间差,应该在 100 TU 左右。如果波动超过 ±10%,说明 AP 负载高或者信道干扰严重。
- SSID 是否完整:有些厂商会在 Vendor Specific 字段里塞配网信息,比如小米的 IoT 配网扩展。如果 Beacon 帧被截断,这些信息就丢了。
- RSSI 是否一致:同一 AP 的 Beacon 帧,信号强度应该基本稳定。如果忽高忽低,说明设备在移动,或者天线有问题。
小技巧:在 Wireshark 里加一列 wlan.beacon_interval,可以快速对比每个 Beacon 帧的间隔值。我曾经靠这个发现某款路由器在 2.4G 频段上 Beacon Interval 飘到了 150 TU,导致 IoT 设备频繁掉线。
4.4 Beacon 帧丢包的常见原因
我在项目中遇到过几次 Beacon 帧丢包的情况,总结下来无非这几种:
| 原因 | 表现 | 排查方向 |
|---|---|---|
| 信道冲突 | Beacon 帧间隔不规律,部分帧 CRC 错误 | 换信道,或者用 DFS 信道 |
| AP 负载过高 | Beacon 帧延迟发送,间隔拉长 | 检查 AP 的 CPU 和内存占用 |
| 设备天线问题 | RSSI 波动大,部分 Beacon 帧信号弱到无法解码 | 检查天线连接,或者换设备测试 |
| 802.11 省电模式 | 设备在 DTIM 间隔内休眠,错过了 Beacon | 调整 DTIM 周期,或者关闭省电模式 |
嗯,这里要特别提一下 DTIM。DTIM 是 Beacon 帧里的一个特殊标记,告诉休眠的设备“有缓存数据要收”。如果 DTIM 周期太长,设备醒来的次数就少,省电但容易丢包。我曾经调试一款电池供电的传感器,DTIM 设成了 5,结果 Beacon 帧丢了 30%,配网成功率直接腰斩。
避坑指南:我曾经在调试某款智能插座时,发现 Beacon 帧在 2.4G 频段上频繁丢包。折腾了两天,最后发现是隔壁办公室的微波炉在干扰。嗯,微波炉的 2.4G 辐射是真的猛,Beacon 帧直接被打成碎片。
4.5 Beacon 帧与配网广播丢包的关系
配网广播丢包,很多时候根子就在 Beacon 帧上。我给你画个流程图,你就明白了:
从图上可以看得很清楚:Beacon 帧是配网流程的起点。设备上电后,第一件事就是等 Beacon。如果等不到,它就只能盲目跳频,或者干脆超时报错。
我遇到过最典型的场景:某款智能摄像头在 5G 频段上配网,但 AP 的 Beacon 帧只在 2.4G 频段上发。摄像头扫了半天,一个 Beacon 都没收到,直接报“网络不可用”。后来我抓包一看,5G 信道上干干净净,连个 Beacon 的影子都没有。
4.6 如何验证 Beacon 帧是否丢包
验证方法其实很简单:
- 在 AP 旁边用电脑抓包,连续抓 10 秒。
- 过滤出 Beacon 帧,看数量是否接近
10 / 0.1024 ≈ 97 个。 - 如果少于 80 个,说明有丢包。
- 再在设备位置抓一次,对比两次的 Beacon 帧数量。
如果设备位置的 Beacon 帧数量明显少于 AP 旁边,那问题就在无线链路上——要么是干扰,要么是距离太远,要么是天线不行。
实战经验:我一般会在 AP 旁边抓一次,然后在设备位置抓一次,两次对比。如果设备位置的 Beacon 帧数量只有 AP 旁边的 60%,那配网成功率基本不会超过 50%。
嗯,Beacon 帧解析就讲到这里。记住一句话:Beacon 帧是 WiFi 网络的“心跳”,心跳停了,配网就死了。 抓包时,先看 Beacon,再看别的。