计算机网络基础:802.11 局域网的MAC帧

📌目录



⚖️ 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帧,这个看似简单的数据结构,实际上是现代无线通信的基石。