4、Beacon帧详解:无线网络的“心跳信号”
Beacon帧,说白了就是AP(接入点)每隔一段时间就喊一嗓子:“我在这儿!我叫这个名字!我能用这些速率!我支持这些新特性!”
我刚开始做Wi-Fi抓包时,总觉得Beacon帧就是一堆重复的广播包,没啥好看的。直到有一次定位一个终端连不上AP的问题,抓了半小时的包,才发现AP的Beacon帧里HT Capabilities字段全是0——原来AP的802.11n模式根本没开。嗯,从那以后我再也不敢小看Beacon帧了。
4.1 Beacon帧的作用:同步与网络发现
Beacon帧有两个核心作用,我分别说说。
4.1.1 网络发现
终端(STA)要加入一个Wi-Fi网络,第一步就是找到这个网络。怎么找?两种方式:
- 主动扫描:STA发Probe Request,AP回Probe Response。
- 被动扫描:STA啥也不发,就等着听AP定期广播的Beacon帧。
被动扫描省电啊,终端只需要在信道间切换,监听Beacon帧即可。我做过一个低功耗IoT项目,设备就是靠被动扫描来发现网络的,功耗比主动扫描低了将近40%。
4.1.2 时间同步
Beacon帧里带了一个Timestamp字段,AP每发一个Beacon,就把自己的时钟值放进去。终端收到后,拿这个值校准自己的本地时钟。
为什么要同步?因为Wi-Fi的省电机制(比如PS-Poll、WMM-PS)都依赖时间同步。终端和AP约好了“我什么时候醒来收数据”,时钟对不上,数据就丢了。
关键点:Beacon帧的发送间隔通常是100ms(默认),但实际项目中我见过有的AP设成200ms甚至500ms。间隔越长,AP越省电,但终端扫描发现网络的时间也越长。你想想看,手机连Wi-Fi时转圈圈转半天,可能就是Beacon间隔设太大了。
4.2 Beacon帧结构:从头部到Body
Beacon帧是管理帧的一种,帧结构分三部分:MAC头部、帧体(Frame Body)、FCS校验。咱们重点看帧体里的信息元素(Information Element,简称IE)。
下面这张图是我自己画的Beacon帧结构,你看一眼就明白了。
固定字段是每个Beacon帧都有的,信息元素则根据AP的能力和配置动态添加。我抓包时,最常看的就是信息元素这块——它暴露了AP的所有“底牌”。
4.3 解析Beacon帧中的关键信息
下面我挑几个最重要的字段,结合实战经验给你讲讲。
4.3.1 SSID:网络的名字
SSID就是Wi-Fi的名字,长度1~32字节。抓包时你会发现,有的AP在Beacon帧里把SSID长度设为0——这叫“隐藏SSID”。
我的经验:隐藏SSID其实没啥用,因为Probe Response帧里还是会带SSID。终端连这种网络时,会主动发Probe Request(里面带SSID),反而暴露了“我在找这个网络”。我建议项目中别用隐藏SSID,除了增加兼容性问题,没任何安全收益。
4.3.2 Supported Rates:支持的速率
这个字段告诉终端:AP支持哪些物理层速率。速率值用802.11的速率索引表示,比如2(表示1Mbps)、4(2Mbps)、11(5.5Mbps)、22(11Mbps)等等。
我遇到过一个问题:一个802.11b的老终端连不上802.11n的AP。抓包一看,AP的Beacon帧里Supported Rates只列出了11Mbps和5.5Mbps,但老终端只支持1Mbps和2Mbps。AP没把基本速率集配全,终端直接拒绝加入。
| 速率索引 | 实际速率 | 调制方式 | 常见场景 |
|---|---|---|---|
| 2 | 1 Mbps | DBPSK | 802.11b基本速率 |
| 4 | 2 Mbps | DQPSK | 802.11b基本速率 |
| 11 | 5.5 Mbps | CCK | 802.11b |
| 22 | 11 Mbps | CCK | 802.11b |
| 12 | 6 Mbps | OFDM | 802.11a/g基本速率 |
| 24 | 12 Mbps | OFDM | 802.11a/g |
| 36 | 18 Mbps | OFDM | 802.11a/g |
| 48 | 24 Mbps | OFDM | 802.11a/g |
| 72 | 36 Mbps | OFDM | 802.11a/g |
| 96 | 48 Mbps | OFDM | 802.11a/g |
| 108 | 54 Mbps | OFDM | 802.11a/g |
4.3.3 Capability Info:能力信息
这个字段只有2字节,但信息量很大。它用位图表示AP支持的能力,比如:
- ESS/IBSS:AP模式还是Ad-hoc模式
- Privacy:是否启用加密(WEP/WPA/WPA2/WPA3)
- Short Preamble:是否支持短前导码
- Spectrum Management:是否支持DFS(动态频率选择)
- QoS:是否支持802.11e(WMM)
注意:Capability Info里的Privacy位只表示“我加密了”,但不告诉你用哪种加密。要确认具体加密方式,得看Beacon帧里的RSN IE(WPA/WPA2)或MDE(WPA3)。我见过一个项目,AP的Privacy位为1,但RSN IE里啥也没有——结果终端以为有加密,实际是开放网络,连上去才发现不对。
4.3.4 HT Capabilities:802.11n的能力
HT(High Throughput)是802.11n引入的。Beacon帧里的HT Capabilities IE告诉终端:
- 信道带宽:20MHz还是40MHz
- MCS速率集:支持哪些MCS索引(0~15还是0~31)
- SM Power Save:空间复用省电模式
- Greenfield模式:是否支持纯HT模式
- Short GI:是否支持短保护间隔(400ns)
我抓包时,经常看HT Capabilities里的MCS Set字段。如果AP只支持MCS 0~7(单流),那它的最高速率就是65Mbps(20MHz, Short GI)。如果支持MCS 0~15(双流),最高能到130Mbps。你想想看,终端连上AP后速度上不去,很可能就是AP的MCS能力有限。
4.3.5 VHT Capabilities:802.11ac的能力
VHT(Very High Throughput)是802.11ac的。这个IE比HT的更复杂,关键信息包括:
- 信道带宽:80MHz、160MHz、80+80MHz
- MCS/NSS:支持的最高MCS(0~9)和空间流数(1~8)
- Short GI:80MHz和160MHz下的短GI支持
- MU-MIMO:是否支持多用户MIMO
实战技巧:VHT Capabilities里的Supported Channel Width Set字段,我建议你重点关注。有的AP虽然标称支持160MHz,但Beacon帧里这个字段只设了80MHz——说明它实际上只能用80MHz。终端看到这个,就不会去尝试160MHz连接,省去了不必要的协商时间。
4.3.6 HE Capabilities:802.11ax(Wi-Fi 6)的能力
HE(High Efficiency)是802.11ax的。这个IE更长,包含的信息更多:
- HE PHY Capabilities:信道带宽(20/40/80/160MHz)、MU-MIMO、OFDMA支持
- HE MAC Capabilities:TWT(目标唤醒时间)、BSS Color、A-MSDU聚合
- HE MCS/NSS:支持的最高MCS(0~11)和空间流数
- PPE Thresholds:每包能量检测阈值
我最近在做一个Wi-Fi 6的项目,发现很多终端连上AP后,明明支持OFDMA,但AP的Beacon帧里HE Capabilities的OFDMA位没置1——结果终端只能当普通802.11ac用。后来查了AP的驱动配置,才发现是固件版本太老,OFDMA功能没开。
4.4 实战:用Wireshark解析Beacon帧
说了这么多理论,咱们来点实际的。下面是我用Wireshark抓的一个Beacon帧的解析结果,我挑几个关键字段给你标注一下。
Frame 123: 256 bytes on wire (2048 bits)
Radiotap Header v0
IEEE 802.11 Beacon frame, Flags: ....
Type/Subtype: Beacon (0x08)
Frame Control: 0x8008
.000 0000 0000 0000 = Duration: 0
Receiver address: ff:ff:ff:ff:ff:ff (广播)
BSS Id: 00:1a:2b:3c:4d:5e
Fragment number: 0
Sequence number: 1234
IEEE 802.11 wireless LAN management frame
Fixed parameters
Timestamp: 1234567890
Beacon Interval: 100 (ms)
Capability Info: 0x0431
.... .... .... ...1 = ESS: 1
.... .... .... ..0. = IBSS: 0
.... .... ...1 .... = Privacy: 1
.... .... ..0. .... = Short Preamble: 0
.... ...1 .... .... = Spectrum Management: 1
.... ..0. .... .... = QoS: 0
Tagged parameters
Tag: SSID
Tag Number: 0
Tag length: 8
SSID: MyWiFi
Tag: Supported Rates
Tag Number: 1
Tag length: 8
Supported Rates: 12(B), 18, 24, 36, 48, 72, 96, 108
Tag: HT Capabilities (802.11n)
Tag Number: 45
Tag length: 26
HT Capabilities Info: 0x01fe
A-MPDU Parameters: 0x03
Supported MCS Set: 0x0000ffff
Tag: VHT Capabilities (802.11ac)
Tag Number: 191
Tag length: 12
VHT Capabilities Info: 0x03800120
Supported MCS/NSS Set: 0x0000ff00
Tag: HE Capabilities (802.11ax)
Tag Number: 255
Tag length: 22
HE Capabilities Info: 0x00000000
HE PHY Capabilities: 0x00000000
我的习惯:在Wireshark里,我一般直接搜“Beacon frame”过滤,然后看Tagged parameters部分。重点关注三个东西:SSID(确认网络)、Supported Rates(确认基本速率)、HT/VHT/HE Capabilities(确认AP的真实能力)。如果发现AP宣称支持802.11ac但VHT Capabilities字段缺失,那八成是抓包时AP没发完整,或者AP的ac模式没开。
4.5 避坑指南:Beacon帧常见问题
最后,我总结几个我在项目中踩过的坑,你遇到了可以少走弯路。
- Beacon帧丢失:在干扰严重的信道,Beacon帧可能被淹没。终端扫描时如果连续丢几个Beacon,就会认为这个AP不可用。我建议在项目中,AP的Beacon发送功率不要设得太低,至少保证在覆盖边缘能收到。
- Beacon间隔不一致:有的AP为了省电,动态调整Beacon间隔。终端如果按固定间隔监听,可能错过Beacon。我遇到过一款AP,标称100ms间隔,实际抓包发现间隔在80~120ms之间抖动——终端因此频繁重同步,功耗增加了15%。
- HT/VHT/HE Capabilities不匹配:AP的Beacon帧里宣称支持某个能力,但实际连接时又不支持。比如Beacon里说支持40MHz带宽,但关联后终端发现AP只工作在20MHz。这种问题通常是AP的驱动bug,我建议抓包确认后,直接找AP厂商要固件补丁。