3. 802.11 帧结构:管理帧、控制帧、数据帧的区别与作用

做无线抓包这么多年,我见过太多工程师对着抓到的报文一脸茫然。说白了,看不懂 802.11 帧结构,你就没法跟空口通信「对话」。这一章咱们就把帧结构拆开揉碎,讲清楚三类帧的区别,以及帧头里那些关键字段到底在说什么。

3.1 三类帧:管理、控制、数据

802.11 定义了三种帧类型,你可以把它们想象成网络世界里的三种「信使」:

  • 管理帧:负责建立和维护连接。比如 Beacon、Probe Request/Response、Association Request/Response。
  • 控制帧:负责协调信道访问。比如 RTS、CTS、ACK、Block ACK。
  • 数据帧:负责承载上层数据。就是我们真正要传的 IP 包。

我记得刚入行时,有个老工程师跟我说:「你抓包先看 Frame Control 字段的前两位,00 是管理帧,01 是控制帧,10 是数据帧。」这句话我一直记到现在。

类型 (Type) 子类型 (Subtype) 帧类型 常见例子
00 1000 管理帧 Beacon
01 1011 控制帧 RTS
01 1100 控制帧 CTS
01 1101 控制帧 ACK
10 0000 数据帧 Data
小技巧:在 Wireshark 里,你可以直接过滤 wlan.fc.type == 0 只看管理帧,或者 wlan.fc.type == 2 只看数据帧。控制帧是 type 1。

3.2 帧头各字段解析

一个标准的 802.11 帧头有 24 字节(不含可选字段)。咱们挑几个最重要的字段来讲。

3.2.1 Frame Control(2 字节)

这个字段是整个帧的「身份证」。它包含了协议版本、类型、子类型、To DS、From DS、More Fragments、Retry、Power Management、More Data、Protected Frame、Order 等标志位。

我个人习惯先看 To DS 和 From DS 这两个位。它们决定了帧的流向:

  • To DS=0, From DS=0:IBSS(Ad-hoc)模式,或者管理帧/控制帧。
  • To DS=1, From DS=0:从 STA 发往 AP。
  • To DS=0, From DS=1:从 AP 发往 STA。
  • To DS=1, From DS=1:WDS 桥接模式。
避坑指南:我曾经在定位一个吞吐量问题时,发现数据帧的 Retry 位被频繁置 1。这说明空口丢包严重,导致大量重传。如果你看到 Retry 位占比超过 10%,就该检查信道干扰或信号强度了。

3.2.2 Duration(2 字节)

Duration 字段用来设置 NAV(Network Allocation Vector)。说白了,就是告诉其他站点:「我要占用信道多久,你们在这段时间内别发数据。」

这个字段在控制帧里特别重要。比如 RTS 帧的 Duration 会覆盖整个数据交换过程(RTS + CTS + Data + ACK + 三个 SIFS)。CTS 帧的 Duration 则是 RTS 的 Duration 减去一个 SIFS 和一个 CTS 传输时间。

嗯,这里要注意:有些抓包工具会把 Duration 显示为微秒值,但实际在帧里是以 1 微秒为单位的整数。

3.2.3 Address 字段(4 × 6 字节)

802.11 帧最多可以有 4 个地址字段,分别是:

  • Address 1:接收地址(RA)
  • Address 2:发送地址(TA)
  • Address 3:BSSID 或目的地址(DA)
  • Address 4:仅在 WDS 模式下使用

你想想看,为什么需要这么多地址?因为无线帧在空口传输时,中间可能经过 AP 转发。比如一个 STA 发数据给另一个 STA,帧头里会同时包含源 MAC、目的 MAC、以及 AP 的 BSSID。

常见误区:很多人以为 Address 1 就是目的地址。其实不一定!在 AP 发给 STA 的帧里,Address 1 是 STA 的 MAC(接收方),Address 3 才是真正的源 MAC(比如互联网上的服务器)。千万别搞混了。

3.2.4 Sequence Control(2 字节)

这个字段包含两部分:

  • Fragment Number(4 位):分片编号,范围 0-15。
  • Sequence Number(12 位):序列号,范围 0-4095。

序列号是抓包分析里最常用的字段之一。每个发出的数据帧都会分配一个递增的序列号。如果抓到的报文里序列号出现跳变或重复,说明空口有问题。

我记得有一次排查一个 Wi-Fi 通话卡顿的问题,发现序列号经常出现大于 100 的跳变。这说明 AP 在大量丢帧,导致重传队列里的帧被跳过。后来发现是 AP 的 CPU 过载了。

3.3 三类帧的典型交互流程

咱们用一张图来展示 STA 连接 AP 时的帧交互过程:

802.11 帧交互流程 802.11 帧交互流程(STA 连接 AP) STA AP Probe Request(管理帧) Probe Response(管理帧) Auth Request(管理帧) Auth Response(管理帧) Assoc Request(管理帧) Assoc Response(管理帧) 数据帧交换(Data + ACK 控制帧) Data(数据帧) ACK(控制帧) 管理帧 数据帧 控制帧

从这张图你能看到,连接建立阶段全是管理帧。数据开始传输后,每个数据帧后面都跟着一个 ACK 控制帧。如果 ACK 没收到,发送方就会重传。

3.4 实战:如何通过帧结构定位功耗问题

功耗问题跟帧结构有什么关系?关系大了。我举两个例子:

  1. 过多的管理帧:如果 STA 频繁发送 Probe Request(比如每 30 秒一次),Wi-Fi 模块就会频繁唤醒,导致待机功耗飙升。我曾经在客户项目里看到,某个手机在息屏状态下每小时发送 120 次 Probe Request,直接导致待机功耗多了 15mA。
  2. 重传导致功耗增加:数据帧的 Retry 位被置 1 时,说明发生了重传。每次重传都要消耗额外的发射能量。如果重传率超过 5%,功耗就会明显上升。
排查思路:抓包时重点关注管理帧的发送频率和数据帧的重传率。如果管理帧太多,检查扫描策略;如果重传率高,检查信道质量和发射功率。

3.5 小结

这一章咱们把 802.11 帧结构的核心内容过了一遍。三类帧各有分工,帧头里的 Duration、Address、Sequence Control 字段是抓包分析的关键。记住:管理帧管连接,控制帧管协调,数据帧管传输。下次抓包时,先看 Frame Control,再看序列号,你就能快速判断空口状态了。