Wi-Fi 技术学习:基于 IEEE 802.11ax 的 MU-OFDMA 触发帧结构与抓包解析

MU-OFDMA 传输可以从 MU - 触发帧 开始,之后各站点会返回 CTS(清除发送)帧;或者也可以由 AP 主动发送 CTS 帧,以确保在 AP 传输期间,其他设备不会发起传输。

下图出自 IEEE 802.11ax 草案

图 1:(MU-RTS/CTS)下行 MU PPDU/ACK 响应及网络分配向量(NAV)设置

PCAP 抓包中的 MU-OFDMA 流程

以下抓包是通过 Intel AX210 无线网卡采集的,我已隐去了 MAC 地址。

你可以看到,该抓包的结构与上方图 1 中草案定义的流程完全一致。

  1. MU-RTS 触发帧
  2. CTS 响应:按图 1 中的流程,本应由各设备返回 CTS,但在本次抓包中是 AP 向自身发送 CTS(CTS to self),以确保 AP 传输期间没有其他设备发起传输。
  3. 数据传输HE-MU PPDU,使用 160 音调的资源单元(RU)。
  4. ACK 响应:AP 完成数据发送后,各设备返回 ACK。如果 HE 非 AP 站点收到触发帧或 UMRS 控制字段,会以 HE TB PPDU 的形式进行响应。

图 2:基于 AX210 的抓包(PCAP)

让我们来研究 MU - 触发帧

触发帧有多种类型,而我们关注的是在 MU-OFDMA 传输中,用于向不同用户分配资源的触发帧。

那么,我们可以从 MU - 触发帧中获得哪些信息呢

图 3:触发帧 ------ 基于 AX210 的抓包(PCAP)

抓包(PCAP)中显示的字段,与 IEEE 草案图 9-64 里定义的帧格式完全一致。现在我们来逐一解析每个字段:

  • 帧控制(Frame control)
    • 版本控制(Version control)
    • 帧类型与子类型(Frame type and subtype)
    • 标志位(Flags),这也是帧控制字段的一部分,我之前未重点标注。
  • 持续时间(Duration):传输该帧所需的时间。
  • RA/TA 字段(RA/TA field) :这是一个广播帧,因此接收地址始终为 ff:ff:ff:ff:ff:ff;在本场景中,发送地址为 AP 的地址。
  • 公共信息(Common info):包含 AP 的部分配置信息,供客户端配置其上行传输。
  • 用户信息(User info) :与客户端设备关联的资源单元(RU)信息,包含对应的关联标识符(AID)。
  • 填充位(Padding)与帧校验序列(FCS):功能显而易见,不再赘述。

触发帧的大多数字段都沿用了传统帧的格式,但有两个新增的信息字段需要重点关注:

  1. 公共信息(Common info)
  2. 用户信息(User info)

现在我们来看抓包(PCAP)中的公共字段。

现在我们来看抓包(PCAP)中的公共字段。

图 4:触发帧公共信息字段

这里包含了一些关键信息,我们将从第一个字段开始逐一解析:

  • 我们已知这是一个 MU-RTS 触发帧,这一点在公共信息字段中也有体现。
  • UL 长度子字段:表示所请求的 HE TB PPDU 中 L-SIG LENGTH 字段的值。
  • 更多触发帧(More TF):指示后续是否还有触发帧需要传输。
  • 载波侦听(CS):该字段设为 1 时,表示用户信息字段中标识的站点(STA)需要使用能量检测(ED)来侦听信道状态,并结合网络分配向量(NAV)判断是否响应。
  • 上行带宽(UL BW):通常用于描述响应的上行带宽。但在 MU-RTS 中,公共信息字段的 UL BW 子字段表示承载 MU-RTS 的帧自身的带宽。

表 1:UL BW 编码

其他公共信息字段解析

  • 保护间隔(GI)与 HE-LTF 类型:指示 HE TB PPDU 响应所使用的 GI 和 HE-LTF 类型。

表 2:GI 和 HE-LTF 子字段编码

  • MU-MIMO HE-LTF 模式:公共信息字段的该子字段用于指示,当 HE TB PPDU 的资源单元(RU)占用整个带宽且分配给多个非 AP 站点(即上行 MU-MIMO)时,所使用的 HE-LTF 模式。
  • 当 GI & HE-LTF 类型子字段的值为 2x HE-LTF + 1.6 μs GI4x HE-LTF + 3.2 μs GI 时,需参考表 3;否则,该子字段设为指示 HE 单流导频 HE-LTF 模式。

表 3:MU-MIMO HE-LTF 模式编码

更多公共信息字段

  • UL STBC:公共信息字段的该子字段指示所请求的 HE TB PPDU 是否使用 STBC 编码。设为 1 表示启用 STBC,设为 0 则表示不启用。
  • LDPC 额外符号段:该子字段指示所请求的 HE TB PPDU 中是否存在 LDPC 额外符号段。设为 1 表示存在,设为 0 则表示不存在。
  • AP 发射功率 :该子字段表示 AP 在所有天线的发射天线连接器处的总发射功率,单位为 dBm/20 MHz。发射功率计算公式为:PTX = -20 + FVal(其中 FVal 为该子字段的值),但当 FVal 大于 60 时为保留值。
  • 前 FEC 填充因子(Pre-FEC Padding Factor)与 PE 消歧(PE Disambiguity):定义见 IEEE 草案表 9-29g,编码方式与 HE SIG-A 中对应的子字段一致。
  • 多普勒(Doppler):该子字段设为 1 时,表示 HE TB PPDU 中包含中导码(midamble),设为 0 则表示不包含。
  • UL HE-SIG-A2 保留字段:该子字段的值会被包含在所请求的 HE TB PPDU 的 UL HE-SIG-A2 子字段中。HE AP 会将该子字段的值设为全 1。

用户信息(User Info)

顾名思义,该字段包含与用户相关的信息,用于指示 AP 为客户端设备配置的传输类型。

20MHz 带宽(最多支持 9 个用户)

在我们这个示例的触发帧中,仅包含了 2 台设备。

图 5:用户信息字段

  • AID(关联标识符)是在关联响应阶段分配给设备的。AID12 子字段的编码规则如下:

资源单元(RU)分配

RU 分配需要结合公共信息字段中的上行带宽(UL BW),因为 RU 分配的范围取决于信道带宽大小。RU 分配区域仅在使用 80+80 MHz 或 160 MHz 信道带宽时有效:

  • 如果 UL BW 子字段表示 20 MHz、40 MHz 或 80 MHz PPDU,则 RU 分配子字段的 B0 位设为 0。
  • 如果 UL BW 子字段表示 80+80 MHz 或 160 MHz,且 RU 分配子字段的 B0 位设为 0,则表示 RU 分配仅适用于主 80 MHz 信道。
  • 如果 UL BW 子字段表示 80+80 MHz 或 160 MHz,且 RU 分配子字段的 B0 位设为 1,则表示 RU 分配适用于副 80 MHz 信道。
  • 下一个字段 "RU 分配(音调数)",表示为该设备或站点分配了多少音调 / 资源单元(RU)用于下行传输。

用户信息字段的其他子字段

  • 上行 FEC 编码类型(UL FEC Coding Type):指示所请求的 HE TB PPDU 使用的编码类型。设为 0 表示 BCC 编码,设为 1 表示 LDPC 编码。
  • 上行 HE-MCS(UL HE-MCS):指示所请求的 HE TB PPDU 使用的 HE-MCS(调制与编码策略)。
  • 上行 DCM(UL DCM):指示所请求的 HE TB PPDU 是否使用 DCM(双载波调制)。设为 1 表示启用 DCM,设为 0 则表示不启用。如果公共信息字段中的 UL STBC 子字段设为 1,该字段也会设为 0。
  • 空间流分配(SS Allocation):指示所请求的 HE TB PPDU 的空间流数量及格式。
  • 上行目标接收功率(UL Target Receive Power):表示 AP 天线连接器处预期接收到的信号功率(所有天线的平均值),针对 HE TB PPDU 的 HE 部分,其定义见下表:

总结:

文章内容主要介绍了IEEE 802.11ax 标准与 Intel AX210 抓包,也解析了 MU-OFDMA 触发帧流程与结构:传输可由 MU 触发帧启动,AP 可发 CTS-to-self 防冲突;触发帧含传统字段与新增公共信息、用户信息;公共信息配置上行传输参数,用户信息分配 RU、MCS、空间流等资源,指导站点上行响应,等这些内容.

相关推荐
The_Uniform_C@t22 小时前
PWN | 对CTF WIKI的复现+再学习 (第九期)
网络·学习·网络安全
Hello_Embed3 小时前
Modbus 传感器开发:从寄存器规划到点表设计
笔记·stm32·单片机·学习·modbus
今儿敲了吗3 小时前
24| 字符串
数据结构·c++·笔记·学习·算法
烤麻辣烫3 小时前
正则表达式快速掌握
前端·javascript·学习·正则表达式·html
我命由我123454 小时前
C++ EasyX 开发,MessageBox 函数参数问题:“const char *“ 类型的实参与 “LPCWSTR“ 类型的形参不兼容
c语言·开发语言·c++·后端·学习·visualstudio·visual studio
带你看月亮4 小时前
Vue3解析学习 - handlers 模块
vue.js·学习
Дерек的学习记录5 小时前
C++:类和对象part2
c语言·开发语言·c++·学习
bill_man5 小时前
RHI学习笔记(1)-初识RHI
笔记·学习
知识分享小能手5 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 触发器 — 语法知识点及使用方法详解(17)
数据库·学习·sqlserver