📌目录
- [⚖️ 802.11局域网的MAC帧:无线通信的数据封装艺术](#⚖️ 802.11局域网的MAC帧:无线通信的数据封装艺术)
-
- [🎯 一、MAC帧概述与整体结构](#🎯 一、MAC帧概述与整体结构)
- [📦 二、帧控制字段详解](#📦 二、帧控制字段详解)
- [🌐 三、地址字段详解](#🌐 三、地址字段详解)
- [📊 四、序列控制字段](#📊 四、序列控制字段)
- [🔍 五、管理帧详解](#🔍 五、管理帧详解)
-
- (一)管理帧概述
- (二)Beacon帧
- (三)认证与关联帧
- [(四)Probe Request/Response](#(四)Probe Request/Response)
- [📝 六、控制帧与数据帧](#📝 六、控制帧与数据帧)
- [📝 总结](#📝 总结)

⚖️ 802.11局域网的MAC帧:无线通信的数据封装艺术
当您在无线网络中发送一条微信消息时,这条消息会经历一场精心编排的"变形记"------从应用层的文字,变成传输层的UDP数据报,变成网络层的IP包,最终变成无线电波在空中传播。而在这一切发生之前,它首先需要被封装成一个结构精良的802.11 MAC帧。MAC帧就像是无线通信世界中的"标准信封",无论您发送的是网页请求、视频流还是简单的文字消息,都必须按照这个信封的格式来"装填"------收件人地址、发件人地址、帧的类型、有效载荷、校验序列,缺一不可。这个看似简单的帧结构,实际上承载着802.11协议设计的精髓:它要能够标识帧的优先级和类型,要能够携带足够的地址信息来支持复杂的漫游和桥接,要能够通过序列号和确认机制来确保可靠传输,要能够支持分片来应对不可靠的无线信道,更要能够在效率和功能之间找到恰到好处的平衡。理解802.11 MAC帧的结构,不仅是理解无线网络工作原理的钥匙,更是理解为什么WiFi能够从最初2Mbps的"玩具协议"演进为如今Gbps级"信息高速公路"的技术基础。本文将系统解析802.11 MAC帧的完整结构、每个字段的详细含义以及不同类型帧的应用场景。

🎯 一、MAC帧概述与整体结构
(一)MAC帧的核心地位
MAC帧(Medium Access Control Frame) 是802.11协议栈中数据链路层的核心数据结构,承载着所有在无线介质上传输的信息。从用户数据到控制信令,从认证请求到关联响应,一切都封装在统一格式的MAC帧中。
MAC帧的核心使命:
| 使命 | 说明 |
|---|---|
| 数据封装 | 将上层数据封装为可传输的帧格式 |
| 地址寻址 | 标识发送者、接收者和路由信息 |
| 差错检测 | 通过FCS检测传输错误 |
| 顺序控制 | 通过序列号管理帧顺序 |
| 协议控制 | 通过帧类型实现协议功能 |
MAC帧在数据处理流程中的位置:
802.11数据封装流程:
[应用层数据]
│
▼
[传输层: TCP/UDP Header + Data]
│
▼
[网络层: IP Header + TCP/UDP + Data]
│
▼
[MAC层: MAC Header + IP Packet + FCS]
│
▼
[物理层: PLCP Preamble + MAC Frame + PHY Trailer]
│
▼
[无线电波: 2.4/5/6 GHz信号在空中传播]
(二)MAC帧的通用格式
802.11 MAC帧采用统一的三段式结构:MAC Header(MAC头)、Frame Body(帧体)和FCS(帧校验序列)。
MAC帧完整结构:
802.11 MAC帧通用格式:
字节数: 2 2 6 6 6 2 6 可变 4
│ │ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│Address2│Address3│ Seq │Address4│ Frame │ FCS │
│Control │ ID │ (RA) │ (TA) │ (SA/DA)│Control │ (SA) │ Body │ │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ MAC头 │ │ MAC头 │ │ MAC头 │
└───────────┘ └───────────┘ └───────────┘
总长度: 最小24字节(无帧体),最大2352字节
各部分作用概览:
| 部分 | 长度 | 包含内容 | 作用 |
|---|---|---|---|
| MAC Header | 24-30字节 | 帧控制、地址、序列控制 | 定义帧类型和控制信息 |
| Frame Body | 0-2312字节 | 信息负载 | 承载上层数据或控制信息 |
| FCS | 4字节 | CRC-32校验 | 帧完整性检查 |
MAC帧最小尺寸分析:
最小MAC帧 (ACK帧):
Bytes: 2 2 6 6 4
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│Address2│ FCS │
│Control │ ID │ (RA) │ (TA) │ │
└────────┴────────┴────────┴────────┴────────┘
最小帧长度: 14字节
帧控制: 2字节
Duration: 2字节
地址1: 6字节
地址2: 6字节
FCS: 4字节 (在物理层添加)
无Frame Body,ACK帧只携带控制信息
(三)帧体长度与帧类型关系
不同类型的MAC帧具有不同的帧体长度和内容。
帧类型与帧体关系:
| 帧类型 | 帧体长度 | 说明 |
|---|---|---|
| 控制帧 | 0字节 | 不携带数据,仅控制信息 |
| ACK | 0字节 | 最简帧 |
| RTS | 0字节 | 仅请求发送控制信息 |
| CTS | 0字节 | 仅允许发送控制信息 |
| 管理帧 | 24-256字节 | 携带网络管理信息 |
| Beacon | 可变 | 携带网络参数 |
| Probe Request | 0字节 | 可选SSID |
| Probe Response | 可变 | 携带网络参数 |
| Association Request | 可变 | 携带能力信息 |
| 数据帧 | 0-2312字节 | 携带上层数据 |
| Null帧 | 0字节 | 仅用于电源管理 |
最大帧长度分析:
最大MAC帧计算:
最大帧体: 2312字节 (Maximum MSDU Size)
MAC头: 24字节 (基础) / 30字节 (含Address4)
FCS: 4字节
理论最大: 2312 + 30 + 4 = 2346字节
802.11规范: MAC Header(最大30) + MSDU(2312) + ICV(8) + MIC(8) ≈ 2346
实际最大数据负载 (加密情况):
- MSDU: 2304字节 (加密前)
- IV: 4字节 (WPA-TKIP)
- EIV: 4字节 (WPA2-CCMP)
- MIC: 8字节
- ICV: 4字节 (WEP)
- FCS: 4字节
📦 二、帧控制字段详解
(一)帧控制字段结构
帧控制字段(Frame Control Field) 是MAC帧中最重要的字段,位于帧的最前端,占用2字节(16位),定义了帧的基本属性。
帧控制字段完整结构:
帧控制字段(2字节 = 16位)详细结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│Pro│Ty│Su│To│Fra│ Mo│Re│Po│Mo│ We│ │ │ │
│tcl│pe│bty│DS│mg│dy │se│w_ │re│ p│ R │ R │ R │
│Ver│ │ │ │ │ │ │ │Da│ │svd│svd│svd│
└──┴──┴──┴──┴──┴──┴──┴──┴─────┴───┴───┴───┘
总共: 2字节 = 16位
帧控制字段子字段列表:
| 字段 | 位数 | 位置 | 说明 |
|---|---|---|---|
| Protocol Version | 2 | 位0-1 | 协议版本,当前为0 |
| Type | 2 | 位2-3 | 帧大类 |
| Subtype | 4 | 位4-7 | 帧子类 |
| To DS | 1 | 位8 | 发送给DS的帧 |
| From DS | 1 | 位9 | 来自DS的帧 |
| More Frag | 1 | 位10 | 更多分片标志 |
| Retry | 1 | 位11 | 重传帧标志 |
| Power Mgmt | 1 | 位12 | 电源管理位 |
| More Data | 1 | 位13 | 更多数据标志 |
| WEP | 1 | 位14 | 加密标志 |
| Order | 1 | 位15 | 严格顺序标志 |
(二)协议版本与帧类型
协议版本(Protocol Version) 用于标识802.11协议的版本号,确保不同版本间的兼容性。
协议版本取值:
| 版本值 | 说明 |
|---|---|
| 00 | 当前使用,原始802.11协议 |
| 01-11 | 保留,尚未使用 |
帧类型(Type) 将帧分为三大类:
| 类型值 | 类型名称 | 二进制 | 说明 |
|---|---|---|---|
| 00 | 管理帧 (Management) | 00 | 网络建立、维护、断开 |
| 01 | 控制帧 (Control) | 01 | 信道访问控制、确认 |
| 10 | 数据帧 (Data) | 10 | 传输用户数据 |
| 11 | 保留 | 11 | 扩展用 |
帧子类型(Subtype) 与类型组合确定具体帧:
| Type | Subtype值 | 帧名称 |
|---|---|---|
| 00 (管理) | 0000 | Association Request |
| 00 (管理) | 0001 | Association Response |
| 00 (管理) | 0010 | Reassociation Request |
| 00 (管理) | 0011 | Reassociation Response |
| 00 (管理) | 0100 | Probe Request |
| 00 (管理) | 0101 | Probe Response |
| 00 (管理) | 1000 | Beacon |
| 00 (管理) | 1010 | Disassociation |
| 00 (管理) | 1011 | Authentication |
| 00 (管理) | 1100 | Deauthentication |
| 01 (控制) | 1011 | RTS |
| 01 (控制) | 1100 | CTS |
| 01 (控制) | 1101 | ACK |
| 01 (控制) | 1010 | PS-Poll |
| 10 (数据) | 0000 | Data |
| 10 (数据) | 0100 | Null |
(三)地址相关字段
To DS和From DS两个字段共同标识帧的传输方向和地址含义。
DS(分布式系统)概念:
DS (Distributed System) 示意图:
无线域 (BSS) DS (有线网络)
┌─────────────────┐ ┌─────────────────┐
│ │ │ │
│ [STA A] │ │ │
│ \ │ │ │
│ \ [AP] ──┼─────┼── [路由器] ── [互联网]
│ / │ │ │
│ [STA B] │ │ │
│ │ │ │
└─────────────────┘ └─────────────────┘
DS = 连接各AP的有线网络基础设施
AP = 无线域与DS的桥梁
DS字段组合含义:
| To DS | From DS | 帧类型 | 地址字段含义 |
|---|---|---|---|
| 0 | 0 | IBSS/管理/控制 | 全部4地址用于Ad-Hoc或管理帧 |
| 0 | 1 | From AP | Addr1=DA, Addr2=BSSID(TA), Addr3=SA |
| 1 | 0 | To AP | Addr1=BSSID(RA), Addr2=SA, Addr3=DA |
| 1 | 1 | WDS/桥接 | Addr1=RA, Addr2=TA, Addr3=DA, Addr4=SA |
地址字段映射详解:
To DS = 0, From DS = 1 (From AP / 下行帧):
┌─────────┬─────────┬─────────┐
│ Address1│ Address2│ Address3│
├─────────┼─────────┼─────────┤
│ DA │ BSSID │ SA │
│(目的STA)│(发送AP) │(原始源) │
└─────────┴─────────┴─────────┘
应用场景:
AP发送给STA的数据帧
Address1 = STA的MAC地址
Address2 = AP的MAC地址 (BSSID)
Address3 = 原始发送端的MAC地址
(四)分片与重传字段
More Frag和Retry字段用于帧的分片传输和重传管理。
More Frag字段:
| 值 | 含义 |
|---|---|
| 0 | 这是最后一个分片或非分片帧 |
| 1 | 还有后续分片 |
分片传输示意:
分片传输示例 (一个1500字节的帧被分为3个分片):
原始帧: [Header][1500字节数据][FCS]
分片1: [Header, More Frag=1][500字节][FCS]
分片2: [Header, More Frag=1][500字节][FCS]
分片3: [Header, More Frag=0][500字节][FCS]
每个分片:
- 独立发送,需要独立ACK
- 使用相同序列号
- 分片号(Frag Number)区分顺序
- 最后一个分片More Frag=0
Retry字段:
| 值 | 含义 |
|---|---|
| 0 | 这是新帧或第一次传输 |
| 1 | 这是重传帧 |
Retry字段的作用:
python
# 接收端处理Retry帧的逻辑
接收端收到帧后:
1. 检查序列号 (Sequence Number)
2. 如果序列号已存在:
- 如果Retry=1 → 丢弃重复帧
- 如果Retry=0 → 异常,丢弃
3. 如果是新序列号:
- 缓存并处理该帧
- 更新接收状态
(五)电源管理与数据指示
Power Mgmt、More Data和Order字段用于电源管理和数据流控制。
Power Mgmt字段:
| 值 | 发送方状态 |
|---|---|
| 0 | 活跃状态 (Active) |
| 1 | 节能状态 (Power Save) |
Power Mgmt使用场景:
STA进入休眠:
STA → AP: Frame Control, Power Mgmt = 1
STA进入休眠状态
AP开始缓存该STA的数据
STA唤醒:
STA → AP: PS-Poll帧
AP → STA: 发送缓存数据
More Data字段:
| 值 | 含义 |
|---|---|
| 0 | 无更多数据 |
| 1 | AP有更多数据缓存 |
More Data使用场景:
AP → STA: Frame, More Data = 1
表示: AP还有该STA的缓存数据
STA应发送PS-Poll请求更多数据
应用:
批量数据传输
组播/广播数据通知
Order字段:
| 值 | 含义 |
|---|---|
| 0 | 不需要严格顺序 |
| 1 | 需要严格顺序交付 |
Order字段使用:
场景: 使用802.11聚合帧 (A-MPDU)
当Order=1时:
- 接收端必须按顺序处理帧
- 不允许重新排序
- 通常用于安全敏感的聚合流
🌐 三、地址字段详解
(一)四种地址字段的语义
802.11 MAC帧使用四个地址字段(Address1-Address4),每个字段占用6字节,包含48位的MAC地址。
地址字段标准定义:
| 地址字段 | 标准名称 | 含义 | 说明 |
|---|---|---|---|
| Address1 | RA | Receiver Address | 接收端地址 |
| Address2 | TA | Transmitter Address | 发送端地址 |
| Address3 | - | 辅助地址 | 根据帧类型变化 |
| Address4 | SA | Source Address | 源地址(仅WDS使用) |
实际地址名称映射:
| 场景 | Address1 | Address2 | Address3 | Address4 |
|---|---|---|---|---|
| IBSS数据帧 | DA | SA | BSSID | - |
| To AP | BSSID | SA | DA | - |
| From AP | DA | BSSID | SA | - |
| WDS | RA | TA | DA | SA |
(二)BSSID与SSID的关系
BSSID(Basic Service Set Identifier) 是BSS的唯一标识符,通常是AP的MAC地址。
BSSID的构成:
| BSSID类型 | 来源 | 说明 |
|---|---|---|
| AP的MAC | 固定MAC地址 | 正常AP的BSSID |
| 虚拟AP MAC | 本地管理MAC | 多SSID时各虚拟AP不同 |
| IBSS地址 | 随机生成 | Ad-Hoc模式的BSSID |
BSSID与SSID的关系:
BSSID vs SSID:
SSID: "MyOfficeWiFi" (服务集标识符)
- 用户可读的网络名称
- 可配置、可隐藏
- 同一SSID可有多个AP
BSSID: 00:11:22:33:44:55 (基本服务集标识符)
- AP的MAC地址
- 全球唯一
- 用于帧的路由
关系:
同一SSID可以有多个BSSID (漫游)
每个BSSID对应一个物理AP (或虚拟AP)
(三)特殊地址值
802.11定义了一些特殊的MAC地址值,用于广播、多播和特定功能。
特殊地址值:
| 地址值 | 含义 | 说明 |
|---|---|---|
| FF:FF:FF:FF:FF:FF | 广播地址 | 发送给所有站点 |
| 01:80:C2:00:00:00 | 慢速协议地址 | 协议保留 |
| 01:80:C2:00:00:03 | 慢速协议地址 | 协议保留 |
| 33:33:xx:xx:xx:xx | IPv6多播前缀 | IPv6组播 |
| 01:00:5E:xx:xx:xx | IPv4多播前缀 | IPv4组播 |
| 01:80:C2:00:00:0E | 802.1D桥接地址 | STP等 |
广播与多播帧处理:
广播/多播帧特点:
目的地址: FF:FF:FF:FF:FF:FF (广播)
xx:xx:xx:xx:xx:xx (多播)
处理方式:
- 所有接收范围内的STA都收到
- 不发送ACK确认
- 使用基本速率发送
- 不加密 (WPA3前)
- 可靠性较低
应用:
- Beacon帧
- Probe Response
- ARP请求 (某些实现)
- IPv6邻居发现
📊 四、序列控制字段
(一)序列控制字段结构
序列控制字段(Sequence Control Field) 占2字节,包含分片号和序列号,用于帧的顺序管理和重复检测。
序列控制字段结构:
序列控制字段(2字节 = 16位):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│ Sequence Number │ Frag Number │
│ (12 bits) │ (4 bits) │
└──┴─────────────────────────────┴─────────────┘
字段说明:
| 字段 | 位数 | 取值范围 | 说明 |
|---|---|---|---|
| Sequence Number | 12 | 0-4095 | 帧的序列号 |
| Fragment Number | 4 | 0-15 | 分片号 |
(二)序列号管理
序列号(Sequence Number) 是发送端为每个帧分配的唯一编号,用于接收端检测重复帧和重组分片。
序列号规则:
python
# 序列号管理规则
# 发送端规则:
if 发送新帧:
sequence_number = (sequence_number + 1) % 4096
elif 重传帧:
# 使用相同序列号
pass
# 分片帧规则:
for fragment in fragments:
fragment.sequence_number = current_sequence_number
fragment.fragment_number = fragment_index
# 接收端规则:
if sequence_number == last_received:
if fragment_number == next_expected:
# 正常分片
else:
# 丢弃(重复)
elif sequence_number > last_received:
# 新帧,更新状态
else:
# 旧帧(wrap-around情况需特殊处理)
序列号应用示例:
序列号使用示例:
帧1: Sequence=100, Frag=0, More Frag=1 (分片1/3)
帧2: Sequence=100, Frag=1, More Frag=1 (分片2/3)
帧3: Sequence=100, Frag=2, More Frag=0 (分片3/3)
帧4: Sequence=101, Frag=0, More Frag=0 (新帧)
接收端重组:
[帧1][帧2][帧3] → 重组为完整MSDU (Sequence=100)
[帧4] → 单独处理 (Sequence=101)
(三)分片号管理
分片号(Fragment Number) 标识同一帧的不同分片,从0开始递增。
分片号规则:
| 规则 | 说明 |
|---|---|
| 第一分片 | Fragment Number = 0 |
| 最后分片 | Fragment Number = 任意值, More Frag = 0 |
| 中间分片 | Fragment Number 递增 |
| 重传 | 分片号保持不变 |
分片重组流程:
分片重组流程:
接收端缓冲区:
Sequence=100, Frag=0: [分片0数据]
Sequence=100, Frag=1: [分片1数据]
Sequence=100, Frag=2: [分片2数据]
等待:
if 收到 Fragment Number=0:
等待后续分片
启动重组计时器
重组完成:
if 收到 More Frag=0:
if 所有分片已收齐:
按分片号顺序重组
交付上层
清除缓冲区
else:
丢弃不完整帧
超时处理:
if 重组超时:
丢弃所有分片
重置缓冲区
🔍 五、管理帧详解
(一)管理帧概述
管理帧(Management Frame) 用于网络的建立、维护和断开,是WLAN正常运行的基础。
管理帧类型汇总:
| 子类型 | 名称 | 功能 |
|---|---|---|
| 0000 (0) | Association Request | 请求关联BSS |
| 0001 (1) | Association Response | 响应关联请求 |
| 0010 (2) | Reassociation Request | 漫游时重关联 |
| 0011 (3) | Reassociation Response | 响应重关联 |
| 0100 (4) | Probe Request | 主动扫描网络 |
| 0101 (5) | Probe Response | AP响应扫描 |
| 0110 (6) | Timing Advertisement | 定时信息 |
| 0111 (7) | Reserved | 保留 |
| 1000 (8) | Beacon | AP广播网络信息 |
| 1001 (9) | ATIM | Announcement Traffic Indication |
| 1010 (10) | Disassociation | 解除关联 |
| 1011 (11) | Authentication | 身份认证 |
| 1100 (12) | Deauthentication | 解除认证 |
| 1101 (13) | Action | 动作帧 |
| 1110-1111 | Reserved | 保留 |
(二)Beacon帧
Beacon帧(信标帧) 是AP周期性广播的帧,宣告无线网络的存在,携带网络配置参数。
Beacon帧结构:
Beacon帧完整结构:
┌─────────────────────────────────────────────────────────────┐
│ MAC Header (24 bytes) │
│ Frame Control: 08 00 (Beacon类型) │
│ Duration: 0 │
│ Address1: FF:FF:FF:FF:FF:FF (Broadcast) │
│ Address2: 00:11:22:33:44:55 (AP MAC) │
│ Address3: 00:11:22:33:44:55 (BSSID) │
│ Sequence Control: xxxx │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: │
│ Timestamp (8 bytes): 同步时钟 │
│ Beacon Interval (2 bytes): 102.4 ms │
│ Capability Information (2 bytes): ESS + Privacy + ... │
│ SSID Parameter Set: "MyWiFi" │
│ Supported Rates: 6,9,12,18,24,36,48,54 Mbps │
│ DS Parameter Set: Channel 6 │
│ Traffic Indication Map (TIM): 缓存指示 │
│ ERP Information: 扩展物理层参数 │
│ RSN Information: 安全参数 │
│ HT Capabilities: 802.11n能力 │
│ ... │
├─────────────────────────────────────────────────────────────┤
│ FCS (4 bytes): CRC-32校验 │
└─────────────────────────────────────────────────────────────┘
关键Beacon参数:
| 参数 | 说明 | 典型值 |
|---|---|---|
| Timestamp | 64位时间戳,用于同步STA时钟 | 每Beacon递增 |
| Beacon Interval | Beacon发送间隔 | 100 TUs (102.4ms) |
| Capability Information | 能力信息 | ESS/IBSS, 加密等 |
Capability Information字段:
Capability Information (2字节 = 16位):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│ES│ES│ │ │ CF│ CF│ Pre│ Pr│ │ │ │ │ │ │
│S │S │Sp│Pb│ Pol│ Pol│s │iv │ │ │ │ │ │ │
│ │ │ec│ │l │l │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
子字段:
ESS (bit 0): 1=基础设施网络, 0=IBSS
IBSS (bit 1): 1=Ad-Hoc网络
CF-Poll (bit 2-3): 免竞争轮询
Privacy (bit 4): 1=需要加密
Short Preamble (bit 5): 短前导码
PBCC (bit 6): PBCC调制
Channel Agility (bit 7): 信道敏捷
Spectrum Management (bit 8): 频谱管理
Short Slot Time (bit 10): 短时隙
APSD (bit 11): 自动省电递送
... (其他保留位)
(三)认证与关联帧
Authentication和Association帧是STA加入BSS的核心流程。
Authentication帧结构:
Authentication帧 (Type=00, Subtype=11):
┌─────────────────────────────────────────────────────────────┐
│ MAC Header │
│ Frame Control: B0 00 (Management, Auth) │
│ Address1: BSSID (AP MAC) │
│ Address2: SA (STA MAC) │
│ Address3: BSSID │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: │
│ Authentication Algorithm: 0=开放系统, 1=共享密钥 │
│ Authentication Sequence: 1 (递增) │
│ Status Code: 0 (成功) │
│ Challenge Text (可选): 共享密钥认证用 │
├─────────────────────────────────────────────────────────────┤
│ FCS │
└─────────────────────────────────────────────────────────────┘
Association帧结构:
Association Request帧:
┌─────────────────────────────────────────────────────────────┐
│ MAC Header │
│ Frame Control: 00 00 (Management, Assoc Req) │
│ Address1: BSSID │
│ Address2: STA MAC │
│ Address3: BSSID │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: │
│ Capability Information: STA支持的能力 │
│ Listen Interval: STA休眠周期 │
│ SSID: 要关联的网络名称 │
│ Supported Rates: STA支持的速率 │
│ Extended Supported Rates: 扩展速率 │
│ HT Capabilities: 802.11n能力 (可选) │
│ VHT Capabilities: 802.11ac能力 (可选) │
├─────────────────────────────────────────────────────────────┤
│ FCS │
└─────────────────────────────────────────────────────────────┘
关联流程中的帧交换:
STA加入BSS完整流程:
STA AP 有线网络
│ │ │
│ ── 1. Probe Request ──────────>│ │
│ (扫描可用网络) │ │
│ │ │
│ <── 2. Probe Response ─────────│ │
│ (AP宣告自己) │ │
│ │ │
│ ── 3. Authentication ─────────>│ │
│ Algorithm=Open │ │
│ │ │
│ <── 4. Authentication ─────────│ │
│ Status=Success │ │
│ │ │
│ ── 5. Association Request ────>│ │
│ SSID + Capability │ │
│ │ │
│ <── 6. Association Response ───│ │
│ Status=Success, AID │ │
│ │ │
│ │── 7. 绑定STA信息 ──────────────>│
│ │ (以太网桥接表更新) │
│ │ │
◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄◄
数据传输开始
(四)Probe Request/Response
Probe帧用于STA主动发现和验证无线网络。
Probe Request帧:
Probe Request帧 (Type=00, Subtype=4):
┌─────────────────────────────────────────────────────────────┐
│ MAC Header │
│ Frame Control: 40 00 (Management, Probe Req) │
│ Address1: FF:FF:FF:FF:FF:FF (广播) │
│ Address2: STA MAC │
│ Address3: FF:FF:FF:FF:FF:FF (广播) │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: │
│ SSID: "MyWiFi" 或 "" (通配符,扫描所有) │
│ Supported Rates: STA支持的速率 │
│ Extended Supported Rates: 扩展速率 │
│ 802.11n/ac/ax Capabilities: STA能力 (可选) │
├─────────────────────────────────────────────────────────────┤
│ FCS │
└─────────────────────────────────────────────────────────────┘
Probe Response帧:
Probe Response帧 (Type=00, Subtype=5):
┌─────────────────────────────────────────────────────────────┐
│ MAC Header │
│ Frame Control: 50 00 (Management, Probe Resp) │
│ Address1: 请求的STA MAC │
│ Address2: AP MAC (BSSID) │
│ Address3: BSSID │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: (与Beacon相同结构) │
│ Timestamp │
│ Beacon Interval │
│ Capability Information │
│ SSID: "MyWiFi" │
│ Supported Rates │
│ ... │
├─────────────────────────────────────────────────────────────┤
│ FCS │
└─────────────────────────────────────────────────────────────┘
📝 六、控制帧与数据帧
(一)控制帧概述
控制帧(Control Frame) 辅助信道访问和数据传输,不携带上层数据。
控制帧类型:
| 子类型 | 名称 | 用途 |
|---|---|---|
| 1010 (10) | PS-Poll | 休眠站点请求数据 |
| 1011 (11) | RTS | 请求发送权 |
| 1100 (12) | CTS | 允许发送 |
| 1101 (13) | ACK | 确认接收 |
| 1110 (14) | CF-End | 结束无竞争周期 |
| 1111 (15) | CF-End+CF-ACK | 结束并确认 |
(二)RTS/CTS帧
RTS和CTS帧用于解决隐藏节点问题和信道预约。
RTS帧结构:
RTS帧 (Control Frame):
Bytes: 2 2 6 6 4
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│Address2│ FCS │
│Control │ ID │ (RA) │ (TA) │ │
└────────┴────────┴────────┴────────┴────────┘
RTS字段说明:
- Frame Control: 0xB4 00 (Type=01, Subtype=1011)
- Duration: 后续帧所需时间 (微秒)
- Address1 (RA): RTS的目标接收方
- Address2 (TA): RTS的发送方
- FCS: 帧校验
Duration字段计算:
Duration = SIFS + CTS + SIFS + DATA + SIFS + ACK
例如 (假设传输1500字节):
Duration = 16 + 14 + 16 + 1234 + 16 + 14 = 1310 μs
CTS帧结构:
CTS帧 (Control Frame):
Bytes: 2 2 6 4
│ │ │ │
▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│ FCS │
│Control │ ID │ (RA) │ │
└────────┴────────┴────────┴────────┘
CTS字段说明:
- Frame Control: 0xC4 00 (Type=01, Subtype=1100)
- Duration: RTS Duration - SIFS - CTS时间
- Address1: 与RTS的TA相同 (确认该RTS的发送方)
- FCS: 帧校验
CTS Duration计算:
CTS_Duration = RTS_Duration - SIFS - CTS_Frame_Time
例如:
CTS_Duration = 1310 - 16 - 14 = 1280 μs
(三)ACK帧
ACK帧确认数据帧的正确接收,是802.11可靠传输的基础。
ACK帧结构:
ACK帧 (Control Frame):
Bytes: 2 2 6 4
│ │ │ │
▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│ FCS │
│Control │ ID │ (RA) │ │
└────────┴────────┴────────┴────────┘
ACK字段说明:
- Frame Control: 0xD4 00 (Type=01, Subtype=1101)
- Duration: 通常为0 (正常帧后) 或 自适应值 (分段传输)
- Address1: 要确认的帧的发送端地址
- FCS: 帧校验
ACK的Address1:
- 必须等于被确认帧的Address2 (发送端地址)
- 确保正确的发送端收到ACK
(四)数据帧
数据帧(Data Frame) 承载上层数据,是唯一真正传输用户数据的帧类型。
数据帧基本结构:
数据帧结构:
┌─────────────────────────────────────────────────────────────┐
│ MAC Header (24 bytes) │
│ Frame Control: 08 02 (Data, To DS=1, From DS=0) │
│ Duration: 计算值 │
│ Address1: BSSID (RA) │
│ Address2: SA │
│ Address3: DA │
│ Sequence Control │
├─────────────────────────────────────────────────────────────┤
│ Frame Body: │
│ LLC Header: 目的地服务访问点 (DSAP, SSAP, Control) │
│ Information: 上层数据 (IP包等) │
│ Padding: 对齐填充 (可选) │
│ MIC: 消息完整性校验 (加密时) │
│ ICV: 完整性校验值 (WEP时) │
├─────────────────────────────────────────────────────────────┤
│ FCS: CRC-32校验 │
└─────────────────────────────────────────────────────────────┘
常见数据帧子类型:
| 子类型 | 名称 | 说明 |
|---|---|---|
| 0000 (0) | Data | 纯数据帧 |
| 0001 (1) | Data + CF-ACK | 数据帧带确认 |
| 0010 (2) | Data + CF-Poll | 数据帧带轮询 |
| 0011 (3) | Data + CF-ACK + CF-Poll | 组合帧 |
| 0100 (4) | Null | 空帧 (电源管理用) |
| 0101 (5) | CF-ACK | 仅确认 |
| 0110 (6) | CF-Poll | 仅轮询 |
| 0111 (7) | CF-ACK + CF-Poll | 确认+轮询 |
Null帧的特殊用途:
Null帧结构:
Bytes: 2 2 6 6 2 4
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌────────┬────────┬────────┬────────┬────────┬────────┐
│ Frame │ Dur/ │Address1│Address2│ Seq │ FCS │
│Control │ ID │ (RA) │ (TA) │ Ctrl │ │
└────────┴────────┴────────┴────────┴────────┴────────┘
Frame Body: 无 (0字节)
Null帧用途:
1. 电源管理:
- STA发送Null帧, Power Mgmt=1
- AP得知STA进入休眠
2. 保持连接:
- 定期发送Null帧保持与AP的关联
- 检测连接状态
(五)LLC子层封装
LLC(Logical Link Control) 子层位于MAC层之上,负责上层协议(如IP)的封装。
802.2 LLC SNAP封装:
LLC SNAP封装:
┌──────────────────────────────────────────────────────────────┐
│ 802.3 Ethernet Frame │
├──────────────────────────────────────────────────────────────┤
│ Dest MAC │ Src MAC │ Length │ Data │ FCS │
└───────────┴─────────┴────────┴──────┴───────┘
↑
但802.11使用不同封装
802.11数据帧中的LLC SNAP:
┌─────────────────────────────────────────────────────────────┐
│ Frame Body: │
│ ┌────────┬────────┬────────┬────────────────────────────────┐│
│ │ DSAP │ SSAP │ Ctrl │ OUI + Ethertype / Data ││
│ │ (1B) │ (1B) │ (1B) │ (3B) + (2B) / Data ││
│ └────────┴────────┴────────┴────────────────────────────────┘│
│ DSAP: 目的服务访问点 (0xAA = SNAP) │
│ SSAP: 源服务访问点 (0xAA = SNAP) │
│ Ctrl: 控制字段 (0x03 = Unnumbered) │
│ OUI: 组织唯一标识符 (0x000000 = 直接封装) │
│ Ethertype: 以太网类型 (0x0800 = IPv4, 0x86DD = IPv6) │
└─────────────────────────────────────────────────────────────┘
典型封装:
- SNAP Header: AA AA 03 00 00 00
- Ethertype: 08 00 (IPv4)
- 或者:
- SNAP Header: AA AA 03 XX XX XX
- (XX XX XX = 厂商OUI)
📝 总结
802.11 MAC帧是无线通信数据封装的核心,统一的帧结构支撑着从管理信令到用户数据传输的全部功能。
🎯 MAC帧概述:MAC帧是802.11协议栈的核心数据结构;采用三段式结构:MAC头、帧体、FCS;最小14字节,最大2346字节;承载管理帧、控制帧和数据帧。
📦 帧控制字段:16位字段定义帧的基本属性;包含协议版本、帧类型、帧子类型;To DS/From DS指示地址含义;More Frag、Retry、Power Mgmt等控制位实现协议功能。
🌐 地址字段:四个地址字段(Address1-4)承载RA/TA/SA/DA信息;地址含义根据To DS/From DS组合变化;BSSID标识BSS,SSID是网络名称;支持广播、多播和单播。
📊 序列控制字段:12位序列号管理帧顺序;4位分片号标识分片;接收端用于检测重复帧和重组分片。
🔍 管理帧详解:Beacon帧宣告网络存在,携带网络参数;Probe帧用于网络发现;Authentication和Association帧实现安全接入;每种管理帧有特定的信息元素结构。
⚖️ 控制帧与数据帧:RTS/CTS解决隐藏节点问题;ACK确保可靠传输;数据帧携带LLC SNAP封装的IP包;Null帧用于电源管理。
💡 实践启示:理解MAC帧结构是诊断无线网络问题的基础;帧类型和子类型决定了协议的处理方式;序列号用于分析丢包和重复帧;Wireshark等工具可解析802.11帧进行网络分析。
核心启示:802.11 MAC帧的故事,是协议设计中"标准化"与"灵活性"完美结合的典范。尽管不同类型的帧(管理、控制、数据)承载着完全不同的功能------Beacon宣告网络存在、RTS预约信道、Data传输用户数据------但它们都遵循统一的三段式帧结构:MAC Header定义控制信息,Frame Body承载内容,FCS提供完整性校验。这种设计哲学让802.11协议既保持了简洁性(物理层只需理解一种帧格式),又提供了足够的灵活性(通过帧类型和子类型组合实现丰富功能)。帧控制字段的16位设计堪称精妙------它用最小的空间(仅2字节)承载了帧的"身份证":协议版本确保向后兼容,帧类型将帧分为三大类,子类型进一步细分具体功能,DS位决定地址语义,其他控制位实现电源管理、分片、重传等高级特性。这种"惜字如金"的设计在资源受限的无线环境中尤为重要。当我们在咖啡厅里轻松刷着手机时,这一帧一帧精心设计的数据包正在复杂的无线环境中穿行------Beacon帧告诉我们网络在哪里,Probe帧帮助我们发现网络,Authentication帧保护我们接入网络,Data帧承载着我们的每一次点击和滑动。802.11 MAC帧,这个看似简单的数据结构,实际上是现代无线通信的基石。