3、WiFi广播帧详解:Beacon帧、Probe Request/Response帧、广播MAC地址(FF:FF:FF:FF:FF:FF)
好,咱们今天来啃一块硬骨头——WiFi广播帧。说实话,很多做嵌入式WiFi开发的朋友,写了几年代码,对这三类帧还是一知半解。Beacon帧、Probe Request/Response帧,还有那个全F的广播MAC地址,它们到底在配网过程中扮演什么角色?
我个人习惯,在讲协议细节之前,先画一张全景图。这样你心里有个谱,后面看代码才不会晕。
核心观点:WiFi配网的本质,就是让未联网的设备通过广播帧“喊话”,找到配网通道,然后拿到目标路由器的SSID和密码。这三类帧就是喊话用的“喇叭”和“耳朵”。
3.1 Beacon帧——AP的“我是谁,我在哪”
Beacon帧,说白了就是AP(路由器或热点)每隔一段时间对外广播的“名片”。默认间隔是100ms,也就是一秒钟喊10次。你想想看,一个AP在那边不停地喊:“我叫TP-LINK_XXXX,我在信道6,我支持802.11n,加密方式是WPA2...”
我在项目中遇到过一个问题:客户说他们的智能灯配网成功率低,抓包一看,Beacon帧间隔被路由器设置成了300ms。设备扫描时间窗口太短,经常漏掉。嗯,这里要注意——Beacon帧的间隔直接影响设备发现速度。
Beacon帧的核心字段,我列个表给你看:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| Timestamp | 8 | AP的时钟同步值,用于STA同步 |
| Beacon Interval | 2 | 发送间隔,单位TU(1TU=1024μs),默认100 |
| Capability Information | 2 | AP的能力标识,如是否支持加密、是否IBSS等 |
| SSID | 可变(0-32) | 网络名称,隐藏SSID时长度为0 |
| Supported Rates | 可变 | 支持的速率集合,如1、2、5.5、11 Mbps |
| DS Parameter Set | 1 | 当前信道编号 |
| HT Capabilities(可选) | 26 | 802.11n高吞吐量能力 |
避坑指南:我曾经调试一个项目,设备死活搜不到某个AP。抓包发现Beacon帧的SSID长度为0——AP开启了隐藏SSID。这种情况下,设备必须通过主动扫描(Probe Request)才能发现它。所以,如果你的配网方案依赖Beacon帧被动扫描,记得提醒用户关闭隐藏SSID。
3.2 Probe Request/Response——主动出击 vs 被动应答
Beacon帧是AP主动喊,但设备不能光等着听。万一AP的Beacon间隔太长,或者信道没对上呢?这时候就需要Probe Request帧出场了。
Probe Request,就是设备主动喊一嗓子:“附近有没有叫Xiaomi_xxx的AP?或者,不管你是谁,都给我回一声!”
Probe Request有两种模式:
- 定向探测(Directed Probe Request):帧里携带具体的SSID,只有匹配的AP才回复。效率高,但需要提前知道SSID。
- 广播探测(Broadcast Probe Request):SSID字段为空或为广播SSID,所有听到的AP都得回复。配网初期最常用。
Probe Response呢,就是AP收到Probe Request后的回复。它的帧结构和Beacon帧几乎一样,只是帧类型不同。我习惯把Probe Response看作“按需定制的Beacon”——AP平时不主动说,但你问了,我就告诉你。
关键区别:Beacon帧是AP主动广播,Probe Response是被动应答。配网时,设备通常先发Probe Request做主动扫描,再结合Beacon帧做被动扫描,双管齐下,确保不漏掉任何一个AP。
3.3 广播MAC地址——FF:FF:FF:FF:FF:FF
这个地址你肯定见过,但你真的理解它吗?
FF:FF:FF:FF:FF:FF,48位全1,是IEEE定义的广播MAC地址。任何网卡收到目标地址为全F的帧,都必须无条件接收并处理。它不挑人,不挑设备,谁都能收。
在WiFi配网场景下,广播MAC地址用在两个地方:
- Beacon帧的目标地址:AP发送Beacon时,目标地址填FF:FF:FF:FF:FF:FF,表示“这条消息是给所有人的”。
- Probe Request的目标地址:设备发送广播探测时,目标地址也是全F,表示“谁听到谁回答”。
你可能会问:那Probe Response的目标地址呢?它可不是广播。AP回复Probe Response时,目标地址是发送Probe Request的那个设备的MAC地址。这是单播,不是广播。
注意:广播帧在WiFi网络中会被所有在同一BSS(基本服务集)内的设备接收。但在配网场景下,设备还没关联AP,所以广播帧实际上是在所有信道上被所有设备“偷听”。这也是为什么配网时设备需要快速切换信道——它得确保自己能在正确的信道上听到广播。
3.4 三种帧在配网中的实际配合
好了,理论说完了,咱们看看实际配网时这三类帧是怎么配合的。我拿一个典型的智能灯配网流程举例:
- 设备上电,进入配网模式。灯开始在所有信道上发送Probe Request(广播探测),目标MAC填FF:FF:FF:FF:FF:FF。
- 手机APP同时发送Beacon帧或Probe Response。有些配网方案(如SmartConfig)让手机发送包含SSID/密码的Beacon帧,设备通过监听Beacon来获取信息。
- 设备收到正确的Beacon或Probe Response后,解析出目标路由器的SSID和密码,然后主动连接。
- 连接成功后,设备停止扫描,进入正常工作模式。
你看,整个过程就是Beacon帧、Probe Request/Response帧、广播MAC地址这三者的组合拳。缺了任何一个,配网都玩不转。
我的经验:调试配网问题时,第一步永远是抓空口包。用Wireshark或者OmniPeek,过滤条件设成wlan.fc.type_subtype == 8(Beacon)、wlan.fc.type_subtype == 4(Probe Request)、wlan.fc.type_subtype == 5(Probe Response)。看看这三类帧有没有在正确的信道上出现,目标MAC是不是全F,SSID对不对。80%的配网问题,抓包一看就明白了。
3.5 一个简单的抓包示例
最后,给你看一个实际的Beacon帧抓包片段。别怕,我不让你背字段,你只需要知道怎么看:
Frame 1: 242 bytes on wire (1936 bits)
Radiotap Header v0, Length 18
802.11 Beacon frame, Flags: ....
BSSID: 00:1a:2b:3c:4d:5e (AP的MAC)
Destination: Broadcast (ff:ff:ff:ff:ff:ff) ← 广播目标地址
Source: 00:1a:2b:3c:4d:5e
...
Tag: SSID Parameter Set: "TP-LINK_Home"
Tag: Supported Rates: 1(B), 2(B), 5.5(B), 11(B), 18, 24, 36, 54
Tag: DS Parameter Set: Channel 6
Tag: RSN Information: WPA2-PSK-CCMP
...
看到没?目标地址是广播MAC,SSID是TP-LINK_Home,信道6,加密方式是WPA2。这就是一个标准的Beacon帧。设备收到后,就知道附近有个叫TP-LINK_Home的AP,在信道6上,支持WPA2加密。