欢迎大家一起学习探讨通信之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 公众号。
谢谢大家支持~!