第五章:MAC 层架构
深入解析 WiFi MAC 层:CSMA/CA 机制、帧结构、块确认、功耗管理及 QoS 支持
5.1 MAC 层概述
5.1.1 MAC 层功能
| ┌─────────────────────────────────────────────────────────┐
│ WiFi MAC 层功能 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 信道访问控制 │
│ ├─ CSMA/CA (载波侦听多路访问/冲突避免) │
│ ├─ 随机退避 │
│ └─ 虚拟载波侦听 (NAV) │
│ │
│ 2. 帧封装/解封装 │
│ ├─ 添加 MAC 头部和尾部 │
│ ├─ 帧校验序列 (FCS) │
│ └─ 帧聚合 (A-MSDU/A-MPDU) │
│ │
│ 3. 可靠性保障 │
│ ├─ 确认机制 (ACK/BA) │
│ ├─ 自动重传 (ARQ) │
│ └─ 序列号管理 │
│ │
│ 4. 连接管理 │
│ ├─ 扫描 (主动/被动) │
│ ├─ 认证和关联 │
│ └─ 漫游 │
│ │
│ 5. 功耗管理 │
│ ├─ 节能模式 (PSM) │
│ ├─ U-APSD │
│ └─ TWT (WiFi 6) │
│ │
│ 6. 安全 │
│ ├─ 加密 (TKIP/CCMP/GCMP) │
│ ├─ 认证 (PSK/802.1X) │
│ └─ 密钥管理 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.1.2 DCF/PCF/HCF 对比
| ┌─────────────────────────────────────────────────────────┐
│ MAC 协调功能对比 │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│ 功能 │ DCF │ PCF │ HCF │ EDCA │HCCA │
│ │(分布式) │ (点协调)│ (混合) │(增强 DCF)│ │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ 标准 │ 802.11 │802.11 │802.11e │802.11e │802.11│
│ 访问方式 │ 竞争 │ 轮询 │ 竞争 + 轮询│ 竞争 │ 轮询 │
│ 优先级 │ 无 │ 有 │ 有 │ 4 级 │ 有 │
│ QoS 支持 │ 无 │ 有限 │ 有 │ 有 │ 有 │
│ 典型应用 │ 普通数据│ 语音 │ 多媒体 │ 多媒体 │ 语音 │
│ 普及度 │ 广泛 │ 很少 │ 中等 │ 广泛 │ 很少 │
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘
DCF (分布式协调功能):
└─ 所有设备平等竞争信道
PCF (点协调功能):
├─ AP 轮询各 STA
└─ 无竞争访问 (CFP)
HCF (混合协调功能):
├─ EDCA: 增强分布式信道访问 (竞争)
└─ HCCA: HCF 控制信道访问 (轮询)
|
5.2 CSMA/CA 机制
5.2.1 CSMA/CA 原理
| ┌─────────────────────────────────────────────────────────┐
│ CSMA/CA 工作流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 发送流程: │
│ │
│ 1. 载波侦听 (CCA) │
│ ├─ 物理载波侦听:检测 RF 能量 │
│ └─ 虚拟载波侦听:检查 NAV │
│ │
│ 2. 信道空闲? │
│ ├─ 是:等待 DIFS │
│ └─ 否:等待信道空闲 + DIFS │
│ │
│ 3. 随机退避 │
│ ├─ 选择随机退避计数器 (0 ~ CW) │
│ ├─ 每空闲时隙减 1 │
│ └─ 计数器归零时发送 │
│ │
│ 4. 发送数据 │
│ │
│ 5. 等待 ACK │
│ ├─ 收到 ACK:成功,重置 CW │
│ └─ 超时:重传,CW = CW × 2 │
│ │
│ 竞争窗口 (CW) 变化: │
│ CWmin → CWmin×2 → CWmin×4 → ... → CWmax │
│ │
│ 典型值 (802.11n): │
│ ├─ CWmin = 15 │
│ └─ CWmax = 1023 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.2.2 帧间间隔
| ┌─────────────────────────────────────────────────────────┐
│ 帧间间隔 (IFS) │
├─────────────────────────────────────────────────────────┤
│ │
│ SIFS (短帧间间隔): │
│ ├─ 最短间隔,最高优先级 │
│ ├─ 用于:ACK、CTS、数据分片 │
│ └─ 典型值:10 μs (802.11a), 16 μs (802.11b) │
│ │
│ PIFS (PCF 帧间间隔): │
│ ├─ SIFS + 1 时隙 │
│ ├─ 用于:PCF 轮询 │
│ └─ 典型值:25 μs (802.11a) │
│ │
│ DIFS (DCF 帧间间隔): │
│ ├─ SIFS + 2 时隙 │
│ ├─ 用于:DCF 数据发送 │
│ └─ 典型值:34 μs (802.11a) │
│ │
│ AIFS (仲裁帧间间隔): │
│ ├─ SIFS + AIFSN × 时隙 │
│ ├─ 用于:EDCA (QoS STA) │
│ └─ AIFSN 根据接入类别不同 │
│ │
│ 时隙时间 (Slot Time): │
│ └─ 典型值:9 μs (802.11a/n/ac) │
│ │
│ 时序图: │
│ │
│ DIFS 数据 ACK │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ────┬──────────────────────────────────────┬──── │
│ │ 数据帧 │ │
│ │ │ │
│ ◄──────────── SIFS ───────────────────► │
│ │
└─────────────────────────────────────────────────────────┘
|
5.2.3 虚拟载波侦听 (NAV)
| ┌─────────────────────────────────────────────────────────┐
│ 虚拟载波侦听 (NAV) │
├─────────────────────────────────────────────────────────┤
│ │
│ NAV (网络分配向量): │
│ ├─ 计数器,表示信道将被占用的时间 │
│ ├─ 从帧头部的 Duration 字段获取 │
│ └─ NAV>0 时,认为信道忙 │
│ │
│ RTS/CTS 机制: │
│ │
│ 发送方 接收方 其他 STA │
│ │ │ │ │
│ │─── RTS ──────────►│ │ │
│ │ (Duration=T1) │ │ │
│ │ │─── CTS ──────────►│ NAV=T1 │
│ │ │ (Duration=T2) │ NAV 设置 │
│ │◄─── ACK ──────────│ │ │
│ │ │ │ │
│ │
│ 作用: │
│ ├─ 解决隐藏节点问题 │
│ └─ 减少冲突 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.3 帧结构
5.3.1 MAC 帧格式
| ┌─────────────────────────────────────────────────────────┐
│ MAC 帧格式 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌────────┬────────┬────────┬────────┬────────┬──────┐│
│ │Frame │Duration│ Address│ Address│ Address│ ... ││
│ │Control │ │ 1 │ 2 │ 3 │ ││
│ │ 2 byte │2 byte │6 byte │6 byte │6 byte │ ││
│ └────────┴────────┴────────┴────────┴────────┴──────┘│
│ │
│ ┌────────┬────────┬────────┬────────┐ │
│ │ Address│ Sequence│QoS Ctrl│ │ │
│ │ 4 │ Control │(可选) │ Frame │ │
│ │6 byte │ 2 byte │2 byte │ Body │ │
│ └────────┴────────┴────────┴────────┘ │
│ │
│ ┌────────┬────────┐ │
│ │ FCS │ │ │
│ │4 byte │ │ │
│ └────────┴────────┘ │
│ │
│ Frame Control 字段 (16 bit): │
│ ┌────┬────┬────┬────┬────┬────┬────┬────┐ │
│ │Proto│Type│Subtype│ToDS│FromDS│MoreFrag│Retry│ │
│ │2b │2b │ 4b │1b │ 1b │ 1b │1b │ │
│ ├────┼────┼────┼────┼────┼────┼────┼────┤ │
│ │PwrMgt│MoreData│Protected│Order│ │
│ │ 1b │ 1b │ 1b │ 1b │ │
│ └────┴────┴────┴────┴────┴────┴────┴────┘ │
│ │
└─────────────────────────────────────────────────────────┘
|
5.3.2 管理帧
| ┌─────────────────────────────────────────────────────────┐
│ 管理帧类型 │
├─────────────────────────────────────────────────────────┤
│ │
│ Beacon (信标帧): │
│ ├─ 用途:AP 定期广播,宣告网络存在 │
│ ├─ 周期:典型 100 TU (102.4 ms) │
│ └─ 内容:SSID、支持速率、信道、安全能力等 │
│ │
│ Probe Request/Response (探测请求/响应): │
│ ├─ 用途:主动扫描网络 │
│ ├─ Request: STA 广播,查询附近 AP │
│ └─ Response: AP 单播回复,类似 Beacon │
│ │
│ Authentication (认证帧): │
│ ├─ 用途:身份认证 │
│ ├─ 开放系统:两步 (请求 + 成功) │
│ └─ 共享密钥:四步 (WEP,已废弃) │
│ │
│ Association Request/Response (关联请求/响应): │
│ ├─ 用途:建立正式连接 │
│ ├─ Request: STA 请求加入 BSS │
│ └─ Response: AP 分配 AID,确认关联 │
│ │
│ Disassociation (解除关联): │
│ └─ 用途:终止关联 (礼貌断开) │
│ │
│ Deauthentication (解除认证): │
│ └─ 用途:终止认证 (强制断开) │
│ │
└─────────────────────────────────────────────────────────┘
|
5.3.3 控制帧
| ┌─────────────────────────────────────────────────────────┐
│ 控制帧类型 │
├─────────────────────────────────────────────────────────┤
│ │
│ RTS (Request To Send): │
│ ├─ 用途:请求发送,预约信道 │
│ ├─ 内容:Duration (NAV 设置) │
│ └─ 触发:CTS 响应 │
│ │
│ CTS (Clear To Send): │
│ ├─ 用途:允许发送 │
│ ├─ 内容:Duration (更新 NAV) │
│ └─ 响应:RTS │
│ │
│ ACK (确认): │
│ ├─ 用途:确认数据帧接收 │
│ ├─ 内容:接收帧的控制字段副本 │
│ └─ 发送:SIFS 后 │
│ │
│ Block ACK Request (BAR): │
│ ├─ 用途:请求块确认 │
│ └─ 用于:A-MPDU 聚合传输 │
│ │
│ Block ACK (BA): │
│ ├─ 用途:一次确认多个帧 │
│ ├─ 内容:位图,指示哪些帧收到 │
│ └─ 用于:提高聚合传输效率 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.4 块确认 (Block ACK)
5.4.1 块确认原理
| ┌─────────────────────────────────────────────────────────┐
│ 块确认机制 │
├─────────────────────────────────────────────────────────┤
│ │
│ 传统 ACK vs 块确认: │
│ │
│ 传统 ACK: │
│ 数据 1 → ACK → 数据 2 → ACK → 数据 3 → ACK │
│ (每个帧都需要 ACK,开销大) │
│ │
│ 块确认: │
│ 数据 1+2+3+...+N (A-MPDU) → Block ACK │
│ (一次确认多个帧,效率高) │
│ │
│ 块确认协商流程: │
│ │
│ 发起方 响应方 │
│ │ │ │
│ │── ADDBA Request ─►│ │
│ │ (提议 BA 参数) │ │
│ │ │ │
│ │◄─ ADDBA Response ─│ │
│ │ (接受/拒绝) │ │
│ │ │ │
│ │── 数据传输 (A-MPDU)─► │
│ │ │ │
│ │◄─ Block ACK ──────│ │
│ │ (位图确认) │ │
│ │ │ │
│ │── DELBA ─────────►│ (结束 BA 会话) │
│ │
└─────────────────────────────────────────────────────────┘
|
5.4.2 BA 位图
| ┌─────────────────────────────────────────────────────────┐
│ 块确认位图 │
├─────────────────────────────────────────────────────────┤
│ │
│ BA 位图结构: │
│ ┌────────┬────────────────────────────────────────┐ │
│ │起始序号│ 位图 (最多 64/256 bit) │ │
│ │ 16 bit │ │ │
│ └────────┴────────────────────────────────────────┘ │
│ │
│ 位图含义: │
│ ├─ bit 0: 起始序号帧是否收到 │
│ ├─ bit 1: 起始序号 +1 帧是否收到 │
│ └─ ... │
│ │
│ 示例: │
│ 起始序号 = 100 │
│ 位图 = 10110001... (bit 0=1, bit 1=0, bit 2=1...) │
│ │
│ 解释: │
│ ├─ 帧 100: 收到 (bit 0=1) │
│ ├─ 帧 101: 未收到 (bit 1=0) │
│ ├─ 帧 102: 收到 (bit 2=1) │
│ ├─ 帧 103: 收到 (bit 3=1) │
│ └─ ... │
│ │
│ 重传:未收到的帧需要重传 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.5 帧聚合
5.5.1 A-MSDU (聚合 MAC 服务数据单元)
| ┌─────────────────────────────────────────────────────────┐
│ A-MSDU 结构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MAC Header │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Subframe 1 │ │
│ │ ┌─────────┬─────────┬─────────────────────┐ │ │
│ │ │DA (6B) │SA (6B) │ MSDU (数据) │ │ │
│ │ └─────────┴─────────┴─────────────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Subframe 2 │ │
│ │ ┌─────────┬─────────┬─────────────────────┐ │ │
│ │ │DA (6B) │SA (6B) │ MSDU (数据) │ │ │
│ │ └─────────┴─────────┴─────────────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ ... │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ FCS (4B) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 特点: │
│ ├─ 多个 MSDU 聚合为一个 MAC 帧 │
│ ├─ 单一 MAC 头,单一 FCS │
│ ├─ 最大长度:3839 bytes (802.11n), 7935 bytes (802.11ac)│
│ └─ 接收端需要全部正确才能解包 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.5.2 A-MPDU (聚合 MAC 协议数据单元)
| ┌─────────────────────────────────────────────────────────┐
│ A-MPDU 结构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MPDU 1 │ │
│ │ ┌─────────┬─────────┬─────────┬─────────┐ │ │
│ │ │MAC 头 │ 帧体 │ FCS │ 填充 │ │ │
│ │ │ │ │ │ (0-3B) │ │ │
│ │ └─────────┴─────────┴─────────┴─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MPDU 分隔符 (Delimiter) │ │
│ │ ┌─────────┬─────────┬─────────┐ │ │
│ │ │ 长度 │ CRC │ 签名 │ │ │
│ │ │ (12b) │ (8b) │ (8b) │ │ │
│ │ └─────────┴─────────┴─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MPDU 2 │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ ... │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 特点: │
│ ├─ 多个 MPDU 聚合,每个有独立 MAC 头和 FCS │
│ ├─ 通过分隔符分隔 │
│ ├─ 最大长度:65536 bytes │
│ └─ 接收端可部分确认 (通过 Block ACK) │
│ │
│ A-MSDU vs A-MPDU: │
│ ├─ A-MSDU: 效率高,但错误影响大 │
│ └─ A-MPDU: 更灵活,支持部分确认 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.6 功耗管理
5.6.1 节能模式 (PSM)
| ┌─────────────────────────────────────────────────────────┐
│ 节能模式 (PSM) │
├─────────────────────────────────────────────────────────┤
│ │
│ 基本原理: │
│ ├─ STA 周期性睡眠,减少功耗 │
│ ├─ AP 缓存发往睡眠 STA 的数据 │
│ └─ STA 定期唤醒,检查是否有缓存数据 │
│ │
│ 工作流程: │
│ │
│ STA AP │
│ │ │ │
│ │── 关联 (PSM=1) ────►│ │
│ │ (进入节能模式) │ │
│ │ │ │
│ │◄── Beacon ──────────│ │
│ │ (TIM=1, 有缓存数据)│ │
│ │ │ │
│ │── PS-Poll ─────────►│ (请求缓存数据) │
│ │ │ │
│ │◄── 数据 ────────────│ │
│ │ │ │
│ │── ACK ─────────────►│ │
│ │ │ │
│ │ (返回睡眠) │ │
│ │
│ TIM (流量指示图): │
│ ├─ Beacon 中包含,指示哪些 STA 有缓存数据 │
│ ├─ DTIM (交付 TIM): 指示广播/组播数据 │
│ └─ 典型 DTIM 间隔:1-3 个 Beacon │
│ │
└─────────────────────────────────────────────────────────┘
|
5.6.2 U-APSD (自动省电交付)
| ┌─────────────────────────────────────────────────────────┐
│ U-APSD (802.11e) │
├─────────────────────────────────────────────────────────┤
│ │
│ 改进的节能模式: │
│ ├─ STA 触发 AP 发送缓存数据 │
│ ├─ 减少 PS-Poll 开销 │
│ └─ 支持 QoS 流量 │
│ │
│ 工作流程: │
│ │
│ STA AP │
│ │ │ │
│ │── 触发帧 ──────────►│ (任意上行数据) │
│ │ │ │
│ │◄── 服务周期开始 ────│ │
│ │ │ │
│ │◄── 数据 1 ──────────│ │
│ │── ACK ─────────────►│ │
│ │ │ │
│ │◄── 数据 2 ──────────│ │
│ │── ACK ─────────────►│ │
│ │ │ │
│ │◄── EOSP 数据 ───────│ (服务周期结束指示) │
│ │── ACK ─────────────►│ │
│ │ │ │
│ │ (返回睡眠) │ │
│ │
└─────────────────────────────────────────────────────────┘
|
5.6.3 TWT (目标唤醒时间,WiFi 6)
| ┌─────────────────────────────────────────────────────────┐
│ TWT (Target Wake Time) │
├─────────────────────────────────────────────────────────┤
│ │
│ WiFi 6 新特性: │
│ ├─ AP 与 STA 协商唤醒时间 │
│ ├─ STA 只在约定时间唤醒 │
│ └─ 大幅降低功耗,适合 IoT 设备 │
│ │
│ TWT 协商: │
│ │
│ STA AP │
│ │ │ │
│ │── TWT Request ─────►│ │
│ │ (建议唤醒时间) │ │
│ │ │ │
│ │◄── TWT Response ────│ │
│ │ (确认/修改) │ │
│ │ │ │
│ │ (睡眠直到 TWT) │ │
│ │ │ │
│ │ [TWT 到达] │ │
│ │ │ │
│ │ (唤醒,收发数据) │ │
│ │ │ │
│ │ (返回睡眠) │ │
│ │
│ TWT 类型: │
│ ├─ 个体 TWT: 每个 STA 独立协商 │
│ └─ 广播 TWT: 一组 STA 共享相同时隙 │
│ │
│ 优势: │
│ ├─ 减少竞争 │
│ ├─ 延长电池寿命 │
│ └─ 支持更多 IoT 设备 │
│ │
└─────────────────────────────────────────────────────────┘
|
5.7 QoS 支持 (802.11e)
5.7.1 接入类别 (AC)
| ┌─────────────────────────────────────────────────────────┐
│ 接入类别 (Access Category) │
├──────────┬─────────┬─────────┬─────────┬─────────┬──────┤
│ AC │ AIFSN │ CWmin │ CWmax │ TXOP │ 优先级│
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ AC_BK │ 7 │ 31 │ 1023 │ 0 │ 最低 │
│ (背景) │ │ │ │ │ │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ AC_BE │ 3 │ 31 │ 1023 │ 0 │ 普通 │
│ (尽力而为)│ │ │ │ │ │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ AC_VI │ 2 │ 15 │ 31 │ 3.008ms│ 高 │
│ (视频) │ │ │ │ │ │
├──────────┼─────────┼─────────┼─────────┼─────────┼──────┤
│ AC_VO │ 2 │ 7 │ 15 │ 1.504ms│ 最高 │
│ (语音) │ │ │ │ │ │
└──────────┴─────────┴─────────┴─────────┴─────────┴──────┘
说明:
├─ AIFSN 越小,等待时间越短,优先级越高
├─ CWmin 越小,退避范围越小,获得信道概率越高
└─ TXOP: 传输机会,一次获得信道后可连续发送的时间
|
5.7.2 EDCA 机制
| ┌─────────────────────────────────────────────────────────┐
│ EDCA (增强分布式信道访问) │
├─────────────────────────────────────────────────────────┤
│ │
│ 每 AC 独立退避: │
│ │
│ AC_VO: AIFSN=2, CW=7 ──► 退避计数器小,优先发送 │
│ AC_VI: AIFSN=2, CW=15 ──► │
│ AC_BE: AIFSN=3, CW=31 ──► │
│ AC_BK: AIFSN=7, CW=31 ──► 退避计数器大,最后发送 │
│ │
│ 内部冲突解决: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 如果多个 AC 同时退避到 0: │ │
│ │ ├─ 高优先级 AC 获得发送 │ │
│ │ └─ 低优先级 AC 执行虚拟冲突,增加 CW 重新退避 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ QoS 数据帧格式: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MAC 头 + QoS Control (2B) + 帧体 + FCS │ │
│ │ │ │ │
│ │ └─ TID (Traffic ID, 4 bit) │ │
│ │ └─ EOSP (服务周期结束,1 bit) │ │
│ │ └─ Ack Policy (2 bit) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
|
5.8 本章小结
本章详细介绍了 WiFi MAC 层架构:
- CSMA/CA:载波侦听、随机退避、帧间间隔
- 帧结构:管理帧、控制帧、数据帧格式
- 块确认:BA 协商、位图确认
- 帧聚合:A-MSDU、A-MPDU
- 功耗管理:PSM、U-APSD、TWT
- QoS 支持:EDCA、接入类别、TXOP
下一章将讲解芯片实现细节。
上一章:04-调制解调技术
下一章:06-芯片实现详解