当前位置: 首页 > article >正文

WiFi 6的数据在发送端分片和在接收端重组的理解

        802.11ax是WiFi 6标准,其引入了一些新的特性和技术来提升无线网络的性能,其中包括帧聚合和帧分片。以下是它们的详细处理流程:

1. 帧聚合

帧聚合是一种提高传输效率的技术,它允许多个数据帧被聚合到一起,然后作为一个单独的数据包进行传输。在802.11ax中,主要使用了两种类型的帧聚合:

空间流聚合:在此类型中,AP可以将多个客户端设备的数据帧聚合到一起,然后通过相同的空间流(spatial stream)进行传输。这样可以提高单个AP与多个客户端设备之间的传输效率。

多用户聚合:在此类型中,AP可以将多个用户的数据帧聚合到一起,然后通过不同的空间流进行传输。每个用户的数据帧被单独处理,以避免碰撞和重传。这样可以提高AP与多个用户之间的总传输效率。

2. 帧分片

帧分片是一种将大尺寸数据帧分割成更小片段的技术。在802.11ax中,帧分片主要用于支持长距离传输和高吞吐量。以下是帧分片的处理流程:

数据切分:在发送端,首先将大尺寸的数据帧切分成多个小尺寸的片段。每个片段都包含必要的元数据(如数据类型、序列号等),以便接收端可以正确地重新组合原始数据帧。

逐片段传输:然后,每个小尺寸的片段被单独封装成一个数据包,并通过无线介质进行传输。每个数据包都使用相同的空间流进行传输。

接收端重组:在接收端,根据元数据重新组合这些片段,恢复出原始的数据帧。如果某个片段在传输过程中丢失或损坏,可以通过重传机制进行修复。

通过帧聚合和帧分片技术,802.11ax能够显著提高无线网络的传输效率和可靠性。这些技术有助于支持高吞吐量和低延迟的应用场景,如在线游戏、高清视频流等。

本文接下来主要介绍的是数据在发送端分片和在接收端重组的细节。

WiFi-6的STA应遵循ieee802.11-2020协议中规定的帧分片处理流程,但某些特殊情况除外。动态帧分片在聚合数据以适应受约束的PPDU持续时间方面提供了进一步的灵活性。

ieee802.11-2020协议定义了生成均匀片段化MSDU或MMPDU的程序,其中每个片段的长度相同,但最后一个片段除外。根据HT立即块确认协议,这些帧分片并不包括在A-MPDU中。

WiFi-6的STA可以协商使用不同级别的动态分段:

级别1:支持一个非A-MPDU的动态片段;不支持不包含S-MPDU的A-MPDU中的动态片段。

级别2:支持不包含S-MPDU的A-MPDU中的动态片段,但需满足以下条件:条件一,A-MPDU中任何给定MSDU或A-MSDU的不超过一个动态片段;该动态片段是在块确认协议下发送的。 条件二,不超过一个MPDU,它是A-MPDU中MMPDU的动态片段。

级别3:支持不包含S-MPDU的A-MPDU中的动态片段,但需满足以下条件:条件一,A-MPDU中任何给定MSDU或A-MSDU的不超过四个动态片段;这些动态片段是根据块确认协议发送的。 条件二,不超过一个MPDU,它是A-MPDU中MMPDU的动态片段。

需要注意的是:在2级或3级中运行的HE STA也支持发送和接收1级动态片段。在级别2下,可能有多个数据帧是动态片段,但它们具有不同的序列号和状态。

这里定义了生成非均匀分片的MSDU、A-MSDU或MMPDU的程序,其中每个分片的长度不一定相同。第一片段的长度应大于或等于接收方STA发送的HE Capabilities元素中的HE Capability Information字段中的minimum fragment size子字段中指示的最小片段大小。如果MSDU、A-MSDU或MMPDU的长度小于最小片段大小,则MSDU、A-MSDU或MMPDU不应被分段。用动态分片生成的碎片被称为动态分片。

这些过程允许在级别1、级别2和级别3中包括作为非A-MPDU的一个动态片段,并且允许在级别2和级别3中包含一个或多个MPDU的A-MPDU内包括一个或更多个动态片段。

HE STA遵循协议定义的用于生成这些片段的规则以及用于对接收到的动态片段进行碎片整理的规则。在协议中,HE STA遵循其发送的HE能力元素中的HE MAC能力信息字段中的动态分段支持子字段中指示的分段级别,除非在块确认建立过程期间交换的ADDBA请求和ADDBA响应帧中包括ADDBA扩展元素。在这种情况下,HE STA遵循其在块ack设置过程期间接收的ADDBA响应帧中的ADDBA扩展元素中指示的分段级别。

HE STA应将ADDBA请求或ADDBA响应帧中的ADDBA扩展元素中的HE分段操作子字段(如果存在)设置为小于或等于其发送的HE能力元素中的动态分段支持子字段的值。

HE STA应将ADDBA响应帧中的ADDBA扩展元素(如果存在)中的HE分段操作子字段设置为小于或等于接收到的ADDBA请求帧中的DDBA扩展元素中的HE分片操作子字段(如果存在的话)的值。

下面是动态帧分片的相关细节:

对于级别1和级别2的动态分段,以下内容适用:

第一:发送一个或多个动态片段的始发STA应针对每个片段请求来自接收方STA的即时响应。

第二:发起方STA应按照10.4中定义的顺序发送片段。

对于3级动态分段,并非所有动态分段都需要立即响应,并且不需要按顺序发送动态分段。如果接收方发送的HE Capabilities元素中的A-MSDU Fragmentation Support子字段为1,则HE STA可以发送A-MSDU的动态片段。

发起方STA不应同时向同一接收方STA发送大于Nmax的多个未决MSDU和A-MSDU(如果支持的话)的动态片段,其中MSDU和A-MSDU的Nmax(如果支持)是基于接收方STA传输的HE Capabilities元素中的Maximum number of Fragmented MSDU/a-MSDU子字段来计算的。术语未决是指包含MSDU、A-MSDU或MMPDU的全部或部分的MPDU,对于该MPDU,传输已经开始,并且MSDU、A-MSDU或MMPDU的递送尚未完成(即,尚未接收到对最终片段的确认,并且由于重传、生存期或某些其他原因,MSDU、A-MSDU或MMADU尚未被丢弃)。

注意:未完成MMPDU的动态片段不计入针对Nmax限制的检查中。

如果先前发送的MSDU、A-MSDU或MMPDU的所有动态片段在接收STA处已明确失败,则发起方STA可重新发送完整MSDU、A-MSDU或MMPDU。如果先前发送的MSDU、A-MSDU或MMPDU的片段中的一个或多个在接收STA处明确失败,则始发STA可以重新发送失败的片段(关于术语明确失败的定义,参见下一段)。重传片段的帧体长度和内容应与最初传输的片段相同,并且在该STA的MSDU、A-MSDU或MMPDU的使用寿命内应保持固定,除非帧未加密,在最初传输片段之前的所有片段都已接收,并且初始发送的片段之后的所有片段要么已经明确失败,要么还没有被发送。在这种情况下,重新发送的片段的帧体长度和内容可能与最初发送的片段不同。

如果发起方STA接收到包含以下内容的即时响应,则片段在接收STA处明确是失败的:

1、有效的第一个MPDU不是Ack帧、压缩的块确认帧或多STA块确认帧,其所有先前的EOF前MPDU定界符都被接收。

2、不包含BA信息字段且TID等于分段的BA信息字段的多STA块确认帧。

3、压缩的块确认帧或多STA块确认帧,其中包含BA信息字段,其TID等于分段的TID,但不确认收到分段。

发起方STA不得向接收方STA发送未在A-MPDU中携带的MPDU或携带不满足上述条件的动态片段的A-MPDU。

级别1的动态帧分片

如果从接收方STA接收的HE Capabilities元素的HE MAC Capabilities Information字段中的 Dynamic Fragmentation Support 子字段为 1、2 或 3,则发起方 STA 可以使用级别 1 动态分段向接收方STA传输MSDU、A-MSDU(如果接收方支持)或MMPDU(非A-MPDU)或 MMPDU的一个动态分段,该MMPDU是非A-MPDU,并且未根据块确认协议发送到接收方 STA。

发起方 STA 可以使用 1 级动态分段根据块确认协议将分段的 MSDU 或 A-MSDU(如果受接收方支持)传输到接收方 STA,前提是满足以下条件:从接收方 STA 接收的 HE Capabilities 元素中的 Dynamic Fragmentation Support 子字段为 1、2 或 3;对于与 MSDU 或 AMSDU 的 TID 关联的块确认协议,如果从接收方 STA 接收的 ADDBA 响应帧中存在 ADDBA 扩展元素,则 HE 分段操作子字段为 1。

级别2的动态帧分片

如果满足以下条件之一,发起方STA可以根据块确认协议将分段的MSDU或A-MSDU(如果接收方支持)传输到使用级别2动态分段的接收方STA:

条件1:从接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support子字段为2;对于与MSDU或AMSDU的TID关联的块确认协议,如果从接收方STA接收的ADDBA响应帧中存在ADDBA扩展元素,则HE分段操作子字段为2。

条件2:从接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support子字段为3;对于与MSDU或A-MSDU的TID关联的块确认协议,ADDBA Extension元素存在,并且从接收方STA接收的ADDBA响应帧中的HE Fragmentation Operation子字段为2。

发起方STA可以向接收方STA传输以下内容:

1、MSDU、A-MSDU(如果收件人支持)或MMPDU的一个动态分段,该分段是使用1级动态分段的非A-MPDU。

2、每个MSDU或A-MSDU最多有一个MSDU或A-MSDU(如果接收方支持)的动态分段,在A-MPDU中最多有一个MMPDU的动态分段,其中AMPDU包含至少一个使用2级动态分段的动态分段;MSDU或A-MSDU的动态片段应根据块确认协议发送。

级别3的动态帧分片

只要满足以下条件,发起方STA可以根据块确认协议或分段MMPDU使用级别3动态分段将分段的MSDU或A-MSDU(如果接收方支持)传输到接收方STA:

条件1:从接收方STA接收的HE Capabilities元素中的Dynamic Fragmentation Support 子字段为3。

条件2:对于与MSDU或A-MSDU的TID关联的块确认协议,如果从接收方STA接收的 ADDBA响应帧中存在ADDBA扩展元素,则HE分段操作子字段为3。

另外,级别3分段允许在同一A-MPDU中包含的MSDU或A-MSDU的多个分段,减少片段的传输延迟。

发起方 STA 可以向接收方 STA 传输以下内容:

1、MSDU、A-MSDU(如果收件人支持)或 MMPDU 的一个动态分段,该分段是使用 1 级动态分段的非 A-MPDU。发起方 STA 应遵循协议定义的生成 S-MPDU 的规则。

2、每个MSDU或A-MSDU最多有四个MSDU或A-MSDU的动态片段(如果接收方支持),A-MPDU中最多有一个MMPDU的动态片段,其中AMPDU包含至少一个使用3级动态分段的动态片段;MSDU或A-MSDU的动态片段应根据块确认协议发送。

2.1、发起方 STA 应将每个 MPDU 的 Fragment Number 子字段设置为小于 4 的值。

2.2、发起方 STA 应遵循协议定义的生成 A-MPDU 的规则,但 A-MPDU 应包含序列号子字段范围不超过 BL/4 的 MPDU,其中 BL 是对应于传输片段的 TID 的压缩 BlockAck 或多 STA BlockAck 帧的 Block Ack 位图字段的长度。

下面是动态帧聚合的相关细节

如果HE STA不支持动态分段,则应将它传输的HE Capabilities元素的HE MAC Capabilities Information字段中的Dynamic Fragmentation Support子字段设置为0。否则,HE STA应按如下方式设置 Dynamic Fragmentation Support 子字段:

如果STA支持级别1的动态帧分片的过程接收动态分段,则设置为1、2 或 3。

如果STA支持级别2的动态帧分片的过程接收动态分段,则设置为2 或 3。

如果STA支持级别3的动态帧分片的过程接收动态分段,则设置为3。

如果HE STA支持接收动态分段,则应将dot11HEDynamicFragmentationLevel设置为其传输的HE Capabilities元素中Dynamic Fragmentation Support子字段的值。

如果分片是在 级别1、级别2或者级别3分片方式下发送的,则该分片属于动态分片。

动态帧聚合整理应遵循协议中定义的规则,但以下情况除外:

1、接收方STA应支持同时接收多个未完成的MSDU和A-MSDU的动态分段,当支持来自等于Nmax的同一发送STA时,其中MSDU和A-MSDU(如果支持)的Nmax 是从STA传输的HE功能元素中的分段MSDU/A-MSDU指数子字段获得的。术语“未完成”是指包含全部或部分MSDU或A-MSDU的MPDU,其传输已开始,但MSDU或AMSDU的交付尚未完成(即,尚未收到对最终片段的确认,并且MSDU、A-MSDU或MMPDU未因重试而被丢弃, 寿命,或其他原因)。接收方STA应支持从发送STA并发接收一个未完成的MMPDU的动态片段。

2、接收方STA可能受10.5中定义的每个MSDU、A-MSDU和MMPDU的接收计时器规则的约束。

具有 dot11AMSDUFragmentationOptionImplemented true的STA应将HE Capabilities 元素中的A-MSDU Fragmentation Support子字段设置为1。否则,STA应将HE Capabilities元素中的A-MSDU Fragmentation Support子字段设置为0。

级别1的动态帧聚合

在接收到非A-MPDU或携带动态分段的A-MPDU时,接收方STA会使用Ack帧或多STA BlockAck帧进行响应(如果接收到的分段包含在请求立即响应的MPDU中)。接收方STA应遵循协议中定义的规则,用于为作为MPDU或在S-MPDU或启用ACK的单TID A-MPDU 中携带的请求动态片段生成Ack帧,用于生成包含对请求S-MPDU 的确认的规则,该请求包含对携带一个动态分段并在HE TB PPDU中携带的请求S-MPDU的确认,启用ACK的单TID A-MPDU或启用ACK的多TID A-MPDU。

级别2的动态帧聚合

在接收到作为动态分段的非A-MPDU或携带一个或多个动态分段的A-MPDU时,接收方STA使用以下帧之一进行响应:

如果接收到的片段是非A-MPDU或包含在A-MPDU中并请求立即响应,则为Ack帧或多 STA BlockAck帧。接收方STA应遵循协议中定义的规则,为请求动态分段生成Ack帧,该动态分段是MPDU或在S-MPDU或启用了确认的单TID A-MPDU中传输,以及上面定义的规则,用于生成多STA BlockAck帧,该帧包含对HE TB PPDU中携带的请求S-MPDU的确认,启用ACK的单TID A-MPDU或启用ACK的多TID A-MPDU。

如果接收到的MSDU或A-MSDU(如果有)(每个MSDU或A-MSDU最多一个片段)的片段包含在包含请求立即响应的MPDU的A-MPDU中,则为压缩BlockAck帧或多STA BlockAck 帧。接收方STA应遵循协议中定义的生成BlockAck帧的规则和生成Multi-STA BlockAck帧的规则,但STA应该如下处理:

处理1:将压缩 BlockAck 帧或多 STA BlockAck 帧的 Block Ack Starting Sequence Control 子字段中的Fragment Number子字段的LSB设置为0,该子字段对应于根据块确认协议发送的已接收分段的TID。

处理2:将Block Ack Bitmap字段的每个位设置为1,该字段对应于根据请求A-MPDU(不是S-MPDU)中包含的块确认协议发送的已接收片段的 Sequence Number 子字段和 TID子字段。

STA应更新仅当MSDU或 A-MSDU 成功重建时才收到分段的MSDU或A-MSDU的相应块确认记录。否则,STA 不应更新该MSDU或A-MSDU的块确认记录。

注意:接收方STA设置与MPDU的序列号和TID子字段对应的Block Ack位图字段的位,该子字段不是协议中定义的片段。

如果接收方STA从发起方STA接收到该TID的BlockAckReq帧,则接收方STA应丢弃在TID的HT即时块确认会话期间接收的任何不完整MSDU或A-MSDU片段,如果这些片段的序列号字段值小于BlockAckReq帧的起始序列号字段的值,或者序列号小于WinStartB。两个值的比较按照协议中所述的圆模4096进行。

级别3的动态帧聚合

在接收到作为动态分段的非A-MPDU或携带一个或多个动态分段的A-MPDU时,接收方STA使用以下帧之一进行响应:

如果接收到的片段是非A-MPDU或包含在请求立即响应的A-MPDU中,则为Ack帧或多 STA BlockAck帧。接收方STA应遵循协议中定义的规则,为请求动态分段生成 Ack帧,该动态分段是MPDU或在S-MPDU或启用了ack的单TID A-MPDU 中传输,以及协议中定义的规则,用于生成多STA BlockAck帧,该帧包含对HE TB PPDU中携带的请求S-MPDU的确认,启用ACK的单TID A-MPDU或启用ACK的多TID A-MPDU。

如果与 TID 对应的 MSDU 或 A-MSDU(如果有)的接收片段(每个 MSDU 或 AMSDU 的一个或多个片段)包含在 A-MPDU 中,则压缩 BlockAck 帧或多 STA BlockAck 帧,其中至少一个接收到的 MPDU 的片段编号字段对应于与接收的片段相同的 TID 具有非零值,该字段请求立即响应。接收方STA应遵循协议中生成BlockAck帧的规则和生成Multi-STA BlockAck帧的规则,但STA应该如下处理:

处理1:将压缩 BlockAck 帧或多 STA BlockAck 帧的 Block Ack Starting Sequence Control 子字段中的 Fragment Number 子字段的 LSB 设置为 1,该子字段对应于根据块确认协议发送的已接收分段的 TID。

处理2:将 Block Ack 位图字段位置 B 的每个位设置为 1,该字段对应于根据块确认协议发送的接收片段,否则应将其设置为 0,B 计算为 B = 4 × (SN – SSN) + FN,其中对序列号的操作执行模 4096。SN 是 MPDU 的 Sequence Number 子字段的值,其中包含指示其接收状态的片段。SSN 是 BlockAck 帧的 Block Ack Starting Sequence Control 子字段的 Starting Sequence Number 子字段的值。FN 是 Fragment Number 子字段中的值。

压缩 BlockAck 帧或多 STA BlockAck 帧,如果接收到的 MSDU 或 A-MSDU(如果有)的片段对应于 TID(每个 MSDU 或 AMSDU 的一个或多个片段)包含在 A-MPDU 中,其中所有接收的 MPDU 的片段编号字段对应于与接收的片段相同的 TID,则请求立即响应。接收方STA应遵循协议中生成BlockAck帧的规则和生成Multi-STA BlockAck帧的规则,但STA应该如下处理:

处理1:将压缩 BlockAck 帧或多 STA BlockAck 帧的 Block Ack Starting Sequence Control 子字段中的 Fragment Number 子字段的 LSB 设置为 0,该子字段对应于根据块确认协议发送的已接收分段的 TID。

处理2:将 Block Ack Bitmap 字段的每个位设置为 1,该字段对应于根据非 S-MPDU 请求的 A-MPDU 中包含的块确认协议发送的接收片段的序列号子字段和 TID 子字段。

STA 应更新仅当 MSDU 或 A-MSDU 成功重建时才收到分段的 MSDU 或 A-MSDU 的相应块确认记录。否则,STA 不应更新该 MSDU 或 A-MSDU 的块确认记录。

注意:接收方 STA 设置与 MPDU 的序列号和 TID 子字段对应的 Block Ack 位图字段的位,该子字段不是协议中定义的片段。

如果接收方 STA 从发起方 STA 接收到该 TID 的 BlockAckReq 帧,并且该分段的序列号字段值小于 BlockAckReq 帧的起始序列号字段值,或者序列号小于 WinStartB,则接收方 STA 应丢弃在 TID 的 HT 即时块确认会话期间接收的任何不完整 MSDU 或 A-MSDU 片段。两个值的比较按照协议中所述的4096进行。

以上只是我个人的一些理解,具体还是要以标准一些的规定为主。


http://www.kler.cn/news/136644.html

相关文章:

  • node.js学习Day1
  • h5页面与小程序页面互相跳转
  • 在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌
  • Linux下MySQL8.x的编译安装与使用
  • 「C/C++」C++17 之 std::variant 安全的联合体(变体)
  • wx.navigateTo和wx.reLaunch
  • 【快应用】快应用学习之兄弟组件通信
  • Vue框架学习笔记——创建Vue实例、实例与容器对应关系
  • C语言的5个内存段你了解吗?( 代码段/数据段/栈/堆)
  • Python将原始数据集和标注文件进行数据增强(随机仿射变换),并生成随机仿射变换的数据集和标注文件
  • 【C++ Primer Plus学习记录】for循环
  • 51.Sentinel微服务保护
  • 架构探索之路-第一站-clickhouse | 京东云技术团队
  • C++设计模式——单例模式
  • 基于单片机GPS轨迹定位和里程统计系统
  • 全国见!飞桨星河社区五周年,邀你共赴大模型盛宴!
  • 什么是调试和性能分析工具?
  • 【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘
  • 第二证券:龙头公司大手笔回购 港股今年以来回购总额逼近千亿港元
  • 基于Java封装继承多态实现的一个简单图书系统
  • 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
  • clickhouse分布式之弹性扩缩容的故事
  • MATLAB画图分辨率、图像大小研究
  • 使用drawio的图层构建更强大的图表
  • 剪辑视频怎么把说话声音转成文字?
  • 【面试】你有使用过链路追踪技术吗?