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帧结构图 Beacon帧结构(帧体部分) MAC头部 固定字段 信息元素(IE) FCS 固定字段 Timestamp Beacon Interval Capability Info 信息元素(可变长度) SSID | Supported Rates | DS Parameter Set HT Capabilities | VHT Capabilities HE Capabilities | ...

固定字段是每个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厂商要固件补丁。