序言
在所有的802.11协议中,很少有见到对MAC帧头部内容的进行优化的,最多也只是加内容,很少有见到对于具体内容做优化的。这点也是因为802.11ah工作在Sub-1G频段上,才可以这样做吧,本文主要关心802.11ah的MAC头部压缩(MAC Header Compression)。当然这种压缩并不是通常意义上编码的压缩,而是指体积的一种裁剪,压缩帧头部的大小。为了降低头部的大小,802.11ah在处理的时候基本思想就两点,
- 没用的字段删掉,把一些功能提出来用一个bit控制即可。
- 用AID来代替MAC地址,将地址大小压缩一下。
基本上述两个基本思想,我们下面具体讨论下协议中的设计。
802.11ah的MAC Header版本
802.11ah定义了一种新的帧头部类型,即PV1类型(Protocol Version 1),而对应的传统的802.11 MAC header就是PV0类型了。
如何实现MAC Header定义不同的版本号呢?我们以一个基本的802.11 MAC Header作为示例,如下图所示

其中第一个字段就是Frame control,这个字段其实功能非常强大,其负责定义802.11 MAC Header的整个格式。比如说802.11数据帧和802.11 ACK/CTS之类的帧结构上是有差异的,这个结构差异就是通过Frame control字段控制的。而且需要注意的是,802.11 MAC Header并不是按照普通的TLV解析方案,也不是固定死的结构,而是基于Frame control定义的一种动态的解析方案,这一点在写协议精读的时候,我在展开来说。在本文中,我们主要关于Frame Control控制协议版本的功能,Frame Control字段(下图是普通的802.11的Frame Control)打开为

其中第一个字段就是Protocol Version,总共占两位。这个字段是整个协议的版本定义,通过这个字段可以二次修改对于Type和Subtype的解析,然后通过type相关字段的解析,进一步确定Frame Control里面其他字段的解析,这是一种级联的格式定义。所以,在802.11ah中,就是通过该字段定义MAC Header的版本号,老的叫做PV0,新的叫做PV1。
Remark:不过需要注意的是,802.11ah里面不是绝对就使用PV1类型的帧,在一些情况下,照样也会使用PV0类型的MAC头部。
802.11ah PV1的Frame Control
关于802.11ah的PV1 Frame Control的解析实际上是可以注意下的,在802.11ah中,新增的PV1结构的Frame Control和传统的802.11在解析结构上还是有点区别的。

上图是802.11ah PV1的Frame Control字段。这里可以和前面的普通802.11的Frame control对比下,注意,这个Frame Control的具体内容和上一节中Frame Control有区别。PV1的Frame Control总长度还是15个bits,不过具体字段上的解析就有不少区别了。比如Type字段变成了3位,实际上就显示了802.11ah帧有更多的类型,那么协议显示如下


而传统的帧类型就一共4种,0管理,1控制,2数据,3扩展,但是在PV1 type中,0和3是QoS Data,1是管理,2是控制,7是扩展。
在PV1类型的Frame control中我们还可以看到关于第13~15位的用法,实际上是代替了传统的关于QoS Control部分功能的字段,比如ACK Policy。在传统的802.11协议中,该字段是放在MAC头部中的QoS Control部分的,这里降到了Frame control中,那么在MAC Header部分就能够裁剪压缩了。另外我们还需要注意From DS字段还保留着,但是To DS字段已经没了,但是在帧结构中还存在A1,A2,A3,A4这种case,那么在PV1中具体是在SID字段中解析出来的,这个在下一节中讨论。
802.11ah PV1的MAC Header
然后我们下面继续对比下802.11ah PV1的MAC Header(参考802.11ah-2016)和标准的802.11 MAC Header(参考802.11-2016)。下图中的PV1就是802.11ah新增的MAC头部了,实际上就是删了几个冗余的字段,图中的A1的A就是address的意思。

对比下图的传统头部我们看一下

裁剪的部分主要是针对三个字段:Duration/AID,QoS Control,HT Control。
- 第一个是Duration/AID字段,这个机制比较重要,现在是通过RID机制来代替的(协议中的名字是SID字段),就是Secondary Virtual Carrier Sense机制来代替了基于Duration字段的NAV(也就是Virtual Carrier Sense),这个讨论RID的时候展开来说,这里知道802.11ah的头部少了这个字段即可。
- 第二个QoS Control,前面在PV1的Frame Control也说过了,基本功能已经提取到Frame Control中了,所以QoS Control就不再需要了。
- 第三个HT Control是802.11n对应的,在802.11ah中没有什么需要用到的功能,所以可以删了。
地址压缩的部分主要是针对Address 1(Address 2也可以做类型优化,但是Address 1的功能最突出)。传统的802.11头部中,Address 1是6个Byte,对应节点的BSSID,也就是通常意义上的MAC地址。而在802.11ah中,该字段最多可以压缩到2个Byte,协议中命名为SID(Short ID) Field,其核心内容是节点BSSID对应的AID地址。那么SID具体打开如下

也就是说在802.11ah的MAC头部中,A1字段可以解析成SID field,并且进一步解析中,其前0-12位解析成AID。第13和14位还解析成功能字段,用来体现帧结构中是否有A3和A4的内容,对应到传统的802.11协议,这里A3和A4不是通过SID机制来做的,而是通过From DS和To DS两个字段对应解析的。而第15位是用来显示有没有执行MSDU的帧聚合的。
另外Sequence Control也是可以优化掉的。从而通过这个方式就可以将MAC Header进行大量的压缩,减少其体积了。
802.11ah PV1的使用条件
其实802.11ah PV1帧结构的使用一般而言是没有前置条件的,但是由于其要用到AID的功能,并且有一些预设的参数。所以在节点和AP关联的时候,就需要通过管理帧中的Element进行一些预先的协商。
在802.11ah的管理帧中,新加了一个Element为233,该Element就是用来预设Header Compression的,也就是PV1的前置条件。

该Element的内容如下

其中Header Compression Control还可以进一步打开如下

由于内容太过细节,这里就不展开了,笔者也是作为一种笔记放在这里,怕自己忘了。
802.11ah PV1的性能
前面论述了很多都是关于MAC帧头部的优化,其实说到头说到尾,其实没有优化几个字段,那么到底有没有性能提高呢?
这里我们就需要注意下802.11ah的应用场景了。我们说IoT的场景一般都是小包场景,所以我们就假设数据包大小为100 Bytes。
- 传统的802.11 MAC Header,那么对应数据是100 Bytes,MAC Header是24 Bytes(参考在802.11ah PV1的MAC Header中显示的标准MAC Header,其中A3和A4=0),在这种情况下,MAC Header所占比例为24 Bytes/124 Bytes = 19.35%。
那么在802.11ah的最短的情况下,那么我们最短的MAC Header如下图(参考IEEE 802.11-12/01122r0)

进一步我们认为A3=0,那么MAC Header的大小等于2+2+6+2=12 Bytes.
- 所以对应802.11ah PV1 MAC Header,数据为100 Bytes的时候,MAC Header为12 Bytes,那么PV1 MAC Header所占比例为12 Bytes/112 Bytes = 10.71%。
对比一下,这里大约有19.35%-10.71%=8.64%的相对增益,所以说PV1 MAC header压缩还是有一定用处的。
本文为原创文章,如需转载须注明出处和原文链接。

欢迎大家关注我们的微信公众号:无线技术大讲堂,请搜索公众号(must_wireless)。
来源:oschina
链接:https://my.oschina.net/u/4286638/blog/4844498