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

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

谢谢大家支持~!

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Android中调试WiFi,通常会使用wpa_supplicant和wpa_cli。下面是一些总结和步骤: 1. 在设备上运行wpa_supplicant 在设备上运行wpa_supplicant,它是一个用于处理WiFi连接的后台进程。可以在终端中使用以下命令启动它: ``` wpa_supplicant -iwlan0 -Dwext -c /data/misc/wifi/wpa_supplicant.conf ``` 其中,`wlan0` 是设备的WiFi接口名称,`wext` 是驱动程序的类型,`/data/misc/wifi/wpa_supplicant.conf` 是包含WiFi配置信息的文件路径。 2. 使用wpa_cli进行WiFi连接 wpa_cli是一个命令行工具,用于与wpa_supplicant进行交互并管理WiFi连接。可以在终端中使用以下命令启动它: ``` wpa_cli -iwlan0 ``` 此时会进入wpa_cli交互模式。可以使用以下命令执行一些操作: - `scan` 扫描可用的WiFi网络 - `scan_results` 查看扫描结果 - `add_network` 添加一个新的WiFi网络配置 - `set_network` 设置WiFi网络配置 - `enable_network` 启用WiFi网络 - `disable_network` 禁用WiFi网络 - `status` 查看当前连接状态 例如,如果要连接到名为“mywifi”的WiFi网络,可以执行以下步骤: 1. 扫描可用的WiFi网络 ``` > scan ``` 2. 查看扫描结果 ``` > scan_results ``` 会显示可用的WiFi网络列表,找到名为“mywifi”的网络并记下其network id。 3. 添加一个新的WiFi网络配置 ``` > add_network ``` 会返回一个新的network id。 4. 设置WiFi网络配置 ``` > set_network <network_id> ssid "mywifi" > set_network <network_id> psk "mypassword" ``` 其中,`<network_id>` 是上一步中返回的新的network id,`mywifi` 是WiFi网络的SSID,`mypassword` 是WiFi网络的密码。 5. 启用WiFi网络 ``` > enable_network <network_id> ``` 6. 查看连接状态 ``` > status ``` 如果连接成功,会显示类似于以下内容的信息: ``` wpa_state=COMPLETED ip_address=192.168.1.100 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值