第二十五节:通信之WLAN(WiFi聚合)

news2024/12/26 21:16:56

欢迎大家一起学习探讨通信之WLAN。为了减少帧交互中额外资源占用开销,提高WiFi网络系统整体运行效率,802.11n协议引入定义了聚合功能。本节将基于协议定义内容和实例,详细分析“A-MSDU"和“A-MPDU”两种聚合功能。

关键字

S1G(Sub 1 GHz):支持运行在1Ghz以下的设备。

DMG(directional multi-gigabit):支持吞吐大于1Gb/s的设备。

好。先回顾下“MSDU”的定义。

基于OSI模型,802.11协议将“数据链路层”定义分为“LLC子层”和“MAC子层”。

在OSI模型数据从第7层传送到第3层,在第3层将IP Header添加到来自第4层到第7层的数据中,并将数据封装成一个IP包。

接下来IP包被送到数据链路层,在LLC子层,添加LLC数据,并对其与IP数据包进行封装,封装后的数据包格式,802.11协议定义称为:MAC Service Data Unit,缩写(MSDU),其长度最大为2304个字节。

简单的来说,MSDU的定义为一个IP包数据加上LLC数据。关于802.11协议对“数据链路层”的定义介绍见《WiFi基础学习到实战(二)》。

MAC子层提供服务可对某些场景的MSDUs进行排序。

在上层协议不支持对MSDUs重新排序时,应该选择严格顺序服务。当使用严格顺序服务时,该STA应该关闭MAC省电功能,阻止其休眠。

如下图所示,在MAC Header的control字段使用1bit表示是否使用严格顺序。

“1”表示MSDU或分片,在使用严格顺序服务传输。

在探讨802.11聚合功能前,先通过抓包实例分析,同时使能“A-MSDU”和“A-MPDU”聚合功能,帧的组成形式。如下图所示,A-MPDU包含3个A-MPDU子帧。

前两个A-MPDU子帧都包含一个A-MSDU。A-MSDU聚合由两个A-MSUD子帧组成,如下图所示。

通过抓包实例,同时使能“A-MSDU”和“A-MPDU”聚合功能,帧组成形式如下图所示。接下来,开始详细分析A-MSDU和A-MPDU组成得各个字段。

注:协议规范【原】

1. MSDU format is part of the IEEE 802 family of LAN standards, and as such all MSDUs are LLC PDUs as defined in ISO/IEC 8802-2: 1998.

2. If a higher layer protocol using the data service cannot tolerate this possible reordering, the optional StrictlyOrdered service class should be used.

1.1 A-MSDU聚合

A-MSDU是包含有相同TID和地址等符合A-MSDU聚合规则的MSDU,将MSDU称作A-MSDU子帧。802.11协议定义了“基本A-MSDU子帧”,“短A-MSDU子帧”和“动态A-MSDU子帧”三种格式。

1.1.1 基本A-MSDU子帧格式

基本A-MSDU子帧由A-MSDU子帧Header,MSDU和Padding组成。长度为4字节对齐。协议定义格式如下图所示:

  • A-MSDU子帧Header:由DA,SA和长度组成。该字段与802.3帧格式相同。

  • DA:A-MSDU子帧包含的目的地址。占6个字节。

  • SA:A-MSDU子帧包含的原地址。占6个字节。

  • Length:指明MSDU的长度。占2个字节。

802.11n协议A-MSDU聚合子帧都使用的为该子帧格式。

1.1.2 Short A-MSDU子帧格式

短A-MSDU子帧格式由A-MSDU子帧Header,MSDU和Padding组成。A-MSDU子帧Header仅包含Length,占2个字节,表示MSDU的长度。其他字段与基本A-MSDU子帧相同。协议定义格式如下图所示:

使用在设备间直连数据传输场景,A-MSDU子帧的SA/DA值和优先级相同。需要转发的帧无法使用。

1.1.3 动态A-MSDU子帧格式

动态A-MSDU子帧格式由A-MSDU子帧Header,MSDU和Padding组成。A-MSDU子帧header包含子帧控制字段,动态配置调整DA和SA字段。其他字段与基本A-MSDU子帧格式相同。协议定义格式如下图所示:

子帧控制字段占2个字节。格式如下图所示。

  • Bit0-13:表示MSDU的长度。

  • Bit14:表示DA是否存在。

  • Bit15:表示SA是否存在。

动态A-MSDU子帧格式仅被S1G STA传输数据使用。

1.1.3 A-MSDU聚合相关规定

  • A-MSDU中仅包含DA和SA映射到相同的RA和TA的MSDUs。但RA和TA填充规则与是否携带A-MSDU无关。

  • A-MSDU子帧通过Padding字段确保其4字节对齐,除最后一个A-MSDU子帧无Padding。

  • A-MSDU生存周期只有当包含所有的MSDU生存周期到期,该A-MSDU生存周期才会被终止。因此,存在组成A-MSDU的MSDU生存周期已过,还会被传输的情况。

  • 设备间A-MSDU传输,其A-MSDU的长度不应超过彼此指定的最大接收长度。

  • A-MSDU支持的最大长度,受支持MPDU最大长度的约束。

  • A-MSDU将被传递给MAC子层,添加MAC Header,封装为一个MPDU传输。

1.2.1 A-MSDU聚合抓包实例

下图为抓到的A-MSDU聚合帧。其由2个A-MSDU子帧组成,其MSDU长度都为1508个字节,如下图所示。

第1个A-MSDU子帧长度:

1524 = 1508(MSDU) + 14(Header) + 2(Padding)

第2个A-MSDU子帧长度:

1522 = 1508(MSDU) + 14(Header)。

第1个子帧长度通过padding字段填充2字节【ae dd】,整个子帧长度4字节对齐。

第2个子帧长度,因A-MSDU最后一个子帧无padding字段,无填充,未作4字节对齐。如下图所示,

1.2.2 A-MSDU聚合相关协商字段

802.11n协议定义支持“7935字节”和“3839字节” 两种A-MSDU最大长度。

在HT Info字段用1bit表示,如下图所示。

  • “1”表示A-MSDU最大长度“7935”。

  • “0”表示A-MSDU最大长度“3839”。

BA聚合协商时,在BA Action帧中,使用1bit表示是否支持A-MSDU聚合。

下表为不同协议定义支持的A-MSDU最大长度。

注:协议规范【原】

1. The A-MSDU subframe header contains three fields: DA, SA, and Length. The order of these fields and thebits within these fields are the same as the IEEE 802.3™ frame format.

2. In the Basic A-MSDU subframe, each A-MSDU subframe (except the last) is padded so that its length is amultiple of 4 octets. The last A-MSDU subframe has no padding.

3. A non-S1G STA transmitting an A-MSDU shall not use the Dynamic A-MSDU frame format.

4. The Short A-MSDU subframe structure is used only between a pair of STAs that communicate directly.

2.1 A-MPDU聚合

在分析A-MPDU聚合前,先来看下A-MDPU聚合帧的一般格式,如下图所示。

EOF Padding字段格式

  • EOF Padding子帧:包含0个或多个EOF Padding子帧。一个EOF Padding子帧是一个A-MPDU子帧,其MPDU长度为0, EOF字段为1。

  • EOF Padding字节:占0-3字节,为了实现A-MPDU子帧4字节对齐。

如下图实例A-MPDU聚合抓包。A-MPDU聚合包含4个A-MPDU子帧。

由上可知,A-MPDU是由多个拥有相同TID,RA地址和Key ID等信息的MPDU组成。MPDU格式详细介绍见《WiFi基础学习到实战(二)》。

注:协议规范【原】

1. All of the MPDUs within an A-MPDU are addressed to the same RA.

2. All protected MPDUs within an A-MPDU have the same Key ID.

2.1.1 A-MPDU子帧格式

协议定义A-MPDU子帧格式如下图所示。

MPDU 界定符:占4字节。每个bit定义如下图所示。

  • bit0:指示帧的结束。

      • EOF字段在HT PPDU的所有A-MPDU子帧中应设置为0。

      • EOF字段在VHT/S1G PPDU中仅包含一个MPDU长度非0的A-MPDU子帧时,设置为1。

      • EOF字段在VHT/S1G PPDU中包含MPDU长度非0的A-MPDU子帧个数大于1,设置为0。

  • bit1:保留位。

  • bit2-15:表示MPDU的长度。如为0,表示MPDU不存在,用于填充,满足最小MPDU开始时间需求。

  • bit16-23:对bit0-16进行校验。

  • bit24-31:界定符标记,用于发现确定其是MPDU的界定符。固定填充为“0x4E”。

MPDU长度字段由2bit高位和14bit的低位组成。HT帧格式时,高位2bit用作保留位。协议定义如下。

    • VHT 帧格式:Lmpdu = Llow + Lhigh * 4096  (最大值:16384 = 4096 + 3 * 4096)

    • HT 帧格式:Lmpdu = Llow (最大值:4096)

    • DMG帧格式:Lmpdu = L (最大值:16384 = 2 ^ 14)

  • 每个A-MPDU子帧由MPDU界定符和MPDU组成。

  • 非最后一个A-MPDU子帧都包含Padding,确保子帧长度为4字节对齐。

  • HT和DMG PPDU,最后一个A-MPDU子帧不包含Padding。

  • VHT和S1G PPDU,最后一个A-MPDU子帧包含Padding。

注:协议规范【原】

1. In VHT PPDU or S1G PPDU, an A-MPDU subframe with EOF set to 0 shall not be added after any A-MPDU subframe with EOF set to 1。

2. In VHT PPDU or S1G PPDU, an A-MPDU subframe with EOF set to 1 and with MPDU Length field set to 0 shall not be added before an A-MPDU subframe that contains an S-MPDU。

3. The EOF field shall be set to 0 in all A-MPDU subframes that are carried in an HT PPDU.

2.1.2 A-MPDU聚合长度

A-MPDU聚合最大长度就为可接收PSDU的长度。下表为不同PPDU支持MPDU和A-MPDU的最大长度。

HT PPDU支持的A-MPDU聚合最大长度为65535。在HT capa info中的A-MPDU参数字段,如下图所示。

HT Capa字段中A-MPDU相关参数占1字节,定义如下:

  • bit0-1:表示支持A-MPDU最大长度。

    计算公式:Length = 2^(13 + bit0-1) - 1。

    如实例 Length = 2^16 -1 = 65535。

  • bit2-4:表示MPDU最小传输占用时间。占用3bit。如实例space为16us。

      • “0” 表示无限制  “1” 表示1/4 us

      • “2” 表示1/2 us  “3”表示1 us

      • “4” 表示2 us   “5”表示4 us

      • “6”表示8 us    “7”表示16 us

  • bit5-7:保留位。

2.1.3 最小的MPDU开始Spacing字

802.11协议对MDPU最小长度做了限制,即通过最小的MPDU开始Spacing字段。WiFi设备不应该在目标接收设备指定的最小时间内,传输多个MPDU。

在A-MPDU聚合中,连续的两个MPDU字节长度L应等于或大于:

L >=  Tmmss * rate / 8。

  • Tmmss:即最小的MPDU开始Spacing字段对应的值。

  • rate:当前PHY传输数据的速率。

为了满足A-MPDU中两个连续MPDU传输要求,应使用长度为0的MPDU界定符进行填充。

2.1.4 A-MPDU解聚合

  • 基于A-MPDU聚合格式,接收方需要检测到MPDU界定符,并校验其是否有效。

  • 找到有效的的MPDU界定符后,将可获取到MPDU内容。下一个MPDU界定符在当前MPDU后的第1个4字节。直到PPDU结束。

  • 如MPDU界定符无效,则继续查找MPDU界定符,直到找到有效的MPDU界定符或PSDU结束。

因此,即使接收有错误,接收端根据有效的MPDU界定符可恢复1个或多个MPDU内容。

注:协议规范【原】

1. The purpose of the MPDU delimiter is to locate the MPDUs within the A-MPDU so that the structure of the A-MPDU can usually be recovered when one or more MPDU delimiters are received with errors.

2.1.5 A-MPDU聚合相关规定及说明

相关规定

  • WiFi设备支持接收的A-MPDU最大长度将在支持协议指定的字段内指明。如HT PHY将在HT Capa element中,VHT PHY将在VHT Capa element。

  • A-MPDU中的所有MPDU都拥有相同的Duration值。且参考PPDU最后一个MPDU Duration值。

  • PLCP Header中指明PPDU是否为A-MPDU聚合,同时,指明其长度。

  • WiFi设备不应传输大于接收端支持A-MPDU长度的PPDU帧。

相关说明

  • 场景1:PLCP Preamble信息解析无效或丢失。则整个A-MPDU将会被传输失败。

  • 场景2:聚合传输过程中,某个界定符解析无效或丢失,则只会丢失当前A-MPDU子帧。

  • 场景3:聚合传输过程中,使用界定符填充,遇到界定符EOF为1,长度为0。则将继续检测连续4字节子帧界定符。

注:协议规范【原】

1. A STA indicates in the Maximum A-MPDU Length Exponent field in its HT Capabilities element the maximum A-MPDU length that it can receive in an HT PPDU.

2. The Duration/ID fields in the MAC headers of all MPDUs in an A-MPDU carry the same value.

3. A STA shall not transmit an A-MPDU in an HT PPDU that is longer than the value indicated by the Maximum A-MPDU Length Exponent field in the HT Capabilities element received from the intended receiver.

4. The reference point for the Duration/ID field is the end of the PPDU carrying the MPDU. Setting the Duration/ID field to the same value in the case of A-MPDU aggregation means that each MPDU consistently specifies the same NAV setting.

本节分析了802.11协议定义的“A-MSDU”和“A-MPDU”聚合功能,基于实例和协议规定,分析了其聚合组成,每个聚合子帧的组成格式及相关各个字段的含义。“A-MSDU”子帧格式有三种定义格式“Basic A-MSDU子帧”,“Short A-MSDU子帧”和“Dynamic A-MSDU子帧”,使用在不同的场景和PHY类型中。

“A-MPDU”子帧格式由“界定符”,“MPDU”和“Padding”三个字段组成。界定符中包含当前子帧的标识字段和MPDU长度,接收端根据其获取A-MPDU中的MPDU数据。第二十五节探讨就到此,后续期待共同继续探讨学习。

注:

对以上所述专业知识有修正意见或建议,可随时留言反馈。如感兴趣更多通信知识,可关注“通信之WLAN” for WeChat 公众号。

谢谢大家支持~!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux0.12-10-6-tty_io.c

[539页] 10-6 tty_io.c程序 10-6-1 功能描述 每个tty设备有3个缓冲队列,分别是读缓冲队列(read_q)、写缓冲队列(write_q)和辅助缓冲队列(secondary),定义在tty_struct结构中(include/linux/tty.h)。 对于每个缓冲队列,读操作是从缓冲队列的…

数据可视化:部分整体类可视化图表大全

图表是处理数据的重要组成部分,因为它们是一种将大量数据压缩为易于理解的格式的方法。数据可视化可以让受众快速Get到重点。 数据可视化的图表类型极其丰富多样,而且每种都有不同的用例,通常,创建数据可视化最困难的部分是确定哪…

冯诺依曼体系结构详解

一.冯诺伊曼体系结构的概念: 约翰冯诺依曼(John von Neumann,1903.1.28-1957.2.8),美籍匈牙利数学家,计算机科学家,物理学家。是20世纪最重要的数学家之一,后来被称为计算机之父。 后…

计算机网络学习笔记-网络层

目录 概述 提供的两种服务:面向连接的虚电路、不面向连接的数据报 对比 虚拟互连网络 地址解析协议 ARP 主要作用 使用过程 位置 因特网控制报文协议 ICMP 作用 位置 种类 差错报告报文:终点不可达、源点抑制、时间超过、参数问题、改变路由…

【HMS Core】【ML Kit】活体检测FAQ合集

【问题描述1】 使用示例代码集成活体检测SDK时,报错state code -7001 【解决方案】 使用示例代码前请详细阅读示例工程中的“README”文件。您需要完成以下操作后才可以运行示例代码。 在AppGallery Connect网站下载自己应用的“agconnect-services.json”文件&a…

kaggle新赛推荐 | 从游戏中预测学生的表现

赛题名称:Predict Student Performance from Game Play 从游戏中预测学生的表现 赛题链接:https://www.kaggle.com/competitions/predict-student-performance-from-game-play 赛题背景 学习意味着有趣,这就是基于游戏的学习的用武之地。这…

Java大型货运系统源码(司机APP端+货主APP端)

技术架构:spring boot、mybatis、redis、vue、element-ui 开发语言:java 开发工具:idea、vscode、hbuilder 前端框架:vue 后端框架:spring boot 数 据 库:mysql 移 动 端:uniapp混合开发原…

数据结构与算法(七)

二叉树 如果说树中的每个结点最多只能有两个子结点,这样的树我们就称为二叉树,二叉树可以为空。 特点: 每个结点最多有两棵子树,所以二叉树中不存在度大于二的结点棵树中,最大的结点的度称为树的度,结点的度:结点所…

Git 分支相关操作

1 创建一个分支 Create a new directory and initialize a Git repository. We are going to create a directory named “tutorial”. $ mkdir tutorial $ cd tutorial $ git init Initialized empty Git repository in /Users/eguchi/Desktop/tutorial/.git/进入这个tutori…

一篇文章全面了解光分路器、PLC分路器、拉锥分路器

光纤分路器 光纤分路器,又称为分光器,是将一根光纤信号按照既定的比例分解为两路或多路光信号输出,是接入FTTH方式的光无源器件。 例如,一个1x4光分路器就是将一根光纤中的光信号按照一定的比例分配给四根光纤。与WDM系统的波分复…

【Java入门】运算符

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Java入门篇系列,该专栏主要讲解:什么是java、java的数据类型与变…

放大镜-第14届蓝桥杯省赛Scratch中级组真题第3题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第138讲。 放大镜,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组编程第3题&#xff0…

MAC环境下使用 xray 工具

这里不做过多介绍,下面链接讲的非常清楚,下面记录一下遇到的坑。 https://docs.xray.cool/#/tutorial/webscan_basic_crawler Mac环境下选择对应的工具 下载完以后,放入自己的目录下,打开终端查看版本信息 ./xray_darwin_amd64 v…

Jupyter程序安装和使用指南【操作示例】

Jupyter Notebook(简称Jupyter)是一个交互式编辑器,它支持运行40多种编程语言,便于创建和共享文档。Jupyter本质上是一个Web应用程序,与其他编辑器相比,它具有小巧、灵活、支持实时代码、方便图表展示等优点。下面分别为大家演示如…

在CTEX文档生成中使用WinEit编辑带有公式符号的中文文档应用举例

CTEX文档生成中使用WinEit编辑带有公式符号的中文文档应用举例 CTEX在编辑文档格式和排版时具有优秀的性能,可批量处理文档格式,该用格式时候也非常快捷。下面举例介绍CTEX文档生成中怎样使用WinEit编辑带有公式符号的中文文档。 1.需要的代码 .在WinEi…

IT入门深似海,入门到放弃你学废了嘛

我一直觉得IT行业 程序员行业。甚至觉得程序员人群 是一个特殊存在的群体。 入门到放弃,是真的,IT门槛高嘛。 其实吧,IT编程门槛,是有的,但是对于感兴趣的,想学习IT编程同学来说,也是一件容易事…

Few-Shot Knowledge Graph Completion

[1911.11298] Few-Shot Knowledge Graph Completion (arxiv.org) 目录 Background Model Encoding Heterogeneous Neighbors Aggregating Few-Shot Reference Set Matching Query and Reference Set Matching Query and Reference Set Background 以往的KGC认为每个关系…

【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存

目录 功能需求 使用的技术点 注意点 实现步骤 代码 微信小程序-地图所在的wxml 微信小程序-地图所在的js 微信小程序-展示截图结果的wxml 微信小程序-展示截图结果的js H5-地图所在的html 完成效果 感谢阅读,欢迎讨论 功能需求 打开页面展示卫星地图&…

震惊!人工智能引发灰色经济,ChatGPT变身罪魁祸首!

人工智能技术的日益发展和普及,其呈现出无边界的开发空间,引领出无数的商业应用,越来越多的领域开始依赖这一技术,各种应用场景日益丰富,而其内在的巨大潜力也被不断开发。随之而来的则是,因为技术的滥用和…

13 张图,带你深入理解Synchronized,吊打所有大厂面试官

前言 分享一篇优质文章给你。 本文带读者们由浅入深理解Synchronized,让读者们也能与面试官疯狂对线,同时写出高性能的代码和架构。 在并发编程中Synchronized一直都是元老级的角色,Jdk 1.6以前大家都称呼它为重量级锁,相对于J…