![fabd00f3b6d3467881350d1fe710577b.png](https://img-blog.csdnimg.cn/img_convert/fabd00f3b6d3467881350d1fe710577b.png)
序言
本文按照顺序是应该讨论EDCA/HCCA的,但是在此之前,我们需要重新回顾下802.11e中的优先级部分。我们知道802.11协议实际上是一个纵深很长的协议,因为802.11既需要考虑到商业级WiFi的场景和需求,又需要考虑到低成本轻量级的终端。所以其设计的部分实际上有很多潜在内容,很不好让别人理解。
好比前面我们说了802.11e的优先级有默认的4种类型,但是实际上情况下,用户能不能根据自己需求自定义呢。这里就是本文讨论的Admission Control机制了,所以本文我们要说明下802.11e中几个非常容易混淆的概念,TID,TC,TS,TSpec,TClas。
再谈802.11的优先级
在我们前面的说明中,我们知道在802.11e中一共定义了4种流量种类。分别如下:
![69f5991ff6c7b533d3d638f39890b0bb.png](https://img-blog.csdnimg.cn/img_convert/69f5991ff6c7b533d3d638f39890b0bb.png)
上图说明,当流量MSDU到达802.11e定义的MAC层时,会根据其802.1D的tag标识被分别存放到4个不同的queue里,分别是AC_VO,AC_VI,AC_BE,AC_BK。这里对应关系我们在《802.11协议精读21:802.11e的优先级》一文中梳理过。
但是如果结合下图,估计很多人会比较晕,前面是4个优先级队列,然后下图变成了8个优先级队列了,笔者在这个点上也晕了很久。
![7ef31326bf43c12914fafd8794d769a5.png](https://img-blog.csdnimg.cn/img_convert/7ef31326bf43c12914fafd8794d769a5.png)
这是802.1D(802.1p)和802.11的QoS对应关系,因为前者是8个优先级,后者是4个。所以在数据到达MAC层的时候,每2个优先级队列还需要汇总一下,这个时候的汇总是采用队列调度的方式,最后按照802.11e的物理层参数发送出去。802.1D和802.11e的优先级对应关系如下:
![71bb57c83291f091521d55611dee87f7.png](https://img-blog.csdnimg.cn/img_convert/71bb57c83291f091521d55611dee87f7.png)
不过实际上还不止如此。要理解好这个问题,我们需要重新看一下QoS Control字段了。
QoS Control
![5496b42a074ef2e3fbdc72aca9d91a75.png](https://img-blog.csdnimg.cn/img_convert/5496b42a074ef2e3fbdc72aca9d91a75.png)
QoS control是802.11e中新增的一个MAC层的字段(Remark:802.11协议在演进的时候,MAC头部也会增加东西,如上图QoS Control是802.11e增加的,HT Control是802.11n增加的)。
QoS Control包含的内容如下:
![1ef46d300720e6eaf9139e48f64f386d.png](https://img-blog.csdnimg.cn/img_convert/1ef46d300720e6eaf9139e48f64f386d.png)
我们这里关于TID字段,TID字段的全称是Traffic identifier。我们可以注意到这个TID有4个Bit(即上图的B0-B3),所以一共可以表示16个类型。这里就要和我们前面发现的TC的问题关联起来了,这里TID一共可以表示16个,里面8个是对应TC,另外8个对应的是TS。
![4891d5bef6dbf3192883c04adc7e9242.png](https://img-blog.csdnimg.cn/img_convert/4891d5bef6dbf3192883c04adc7e9242.png)
- TC(Traffic Category):这个是对应的默认的QoS类型,也就是前面我们说的0~7,这几个TC类型。
- TS(Traffic Stream):这个是自定义的QoS类型,节点可以通过ADDTS过程和AP(WLC)协商,从而特定设置一些对应的QoS参数。
我们可以看到一些材料上,802.11e是可以进行流量准入控制的Admission Control,这个就是针对TS类型而言的,而TC是设置用于默认传输的,其会按照默认的传输参数进行竞争信道,并传输数据。
![aad643875e76032d0621f02d6d1f4849.png](https://img-blog.csdnimg.cn/img_convert/aad643875e76032d0621f02d6d1f4849.png)
可以具体看下抓包记录,里面有标识TID,这里默认的TID为0就是Best effort流量类型。放上图还有一个原因是看下优先级下面这一位:
![d88eb4a1ef6f7355841f753436884eb5.png](https://img-blog.csdnimg.cn/img_convert/d88eb4a1ef6f7355841f753436884eb5.png)
第B4位,这一位解析会复杂一点,与上下行有关。如果是下行的那么就是EOSP的标志位,EOSP为End Of Service Period。而如果是上行的话,这是一个标志位,如果是0,那么代表TXOP Duration Request,如果是1,那么代表Queue size 。
另外这给出几个抓包的结果,可以参考下有个直观的感觉。
![75480f97d9270b513f1fcd0679315d59.png](https://img-blog.csdnimg.cn/img_convert/75480f97d9270b513f1fcd0679315d59.png)
其实就是协议一共支持16个类型,其中8个是默认的TC(对应默认的4个优先级),这里对应8个主要是对应了EDCA/HCCA使用时的参数,另外还有8个是以TS的形式,这个是节点可以和AP协商配置的。下面我们讨论下TS的接入方式。
Admission Control
我们以下图讨论一下Admission Control机制。
![5d9595ad193b50cc8a018ccaa6af43d8.png](https://img-blog.csdnimg.cn/img_convert/5d9595ad193b50cc8a018ccaa6af43d8.png)
Admission Control实际上是一个会话的建立过程。其实很类似于前面我们说的ADDBA会话建立过程,这里是一个ADDTS的会话建立过程:
![68b11a8fa40a8fd81737c78dcbf84840.png](https://img-blog.csdnimg.cn/img_convert/68b11a8fa40a8fd81737c78dcbf84840.png)
实际上过程也很简单,而且类似于ADDBA的过程。STA首先发送一个ADDTS Request给AP,然后AP需要做AC(Admission Control),这个有的时候也被称呼为CAC(Call Admission Control),应该是与其主要与语音业务有关。AP接收到之后,会反馈给STA一个ADDTS Response。STA发送过去的ADDTS Request中的参数是具有协商意味的,所以最终的QoS参数是以AP反馈过来的ADDTS Response为主。这里的QoS参数就是TSpec了,另外在Status中会告知AP这个TS会话是否建立成功。由于这个会话是经过“AP”判决的,所以就叫做Admission Control机制。
通常情况下,Admission Control的开启与否是在WLC上面配置的,如下图Cisco的WLC上面可以配置开启。
![f69cc3a107dfdd197a7f7b007353dfd9.png](https://img-blog.csdnimg.cn/img_convert/f69cc3a107dfdd197a7f7b007353dfd9.png)
我们可以看下Cisco教材那里给出的ADDTS的抓包记录(额,这个我自己没抓到过,所以就直接复制了),这里需要注意下,ADDTS Request和ADDTS Response都是两个Action帧。
![2f0d21c463866b84432465fab1344344.png](https://img-blog.csdnimg.cn/img_convert/2f0d21c463866b84432465fab1344344.png)
![10efb03038035aeea6499e44d67342c7.png](https://img-blog.csdnimg.cn/img_convert/10efb03038035aeea6499e44d67342c7.png)
然后前面是建立会话的,和ADDBA类型,ADDTS也有一个结束会话的,DELTS帧。这个帧我们就不贴上了,其实我也没有找到抓包记录。
另外关于ADDTS帧的接入交换过程,包含ACK反馈,接入优先级之类的都和ADDBA一样的,可以参考前面的描述,这里不重复了。
以上我们仅仅描述了Admission Control框架,现在留下的问题就是,如果利用这个框架自定义一个TS,并对其做QoS了,所以下面我们要讨论TSpec和TClas两个参数。
配置TS类型(TSpec和TClas)
学过QoS的童鞋都知道,QoS简单起来就是两个部分,1)抓流量,专业点就是定义一个流量,2)给流量配置参数。所以针对这两个需求,我们就需要理解TClas(对应定义流量),TSpec(定义配置QoS参数)。Remark:这个部分参考台湾一个廖冠雄老师的PPT,其实里面写的还比较清楚。
TClas和TSpec都是Element字段,TClas如下:
![0dc22082d7ef41d92025d61c3a597de2.png](https://img-blog.csdnimg.cn/img_convert/0dc22082d7ef41d92025d61c3a597de2.png)
其中Classifier Parameters对应如下:
![069133dfb7bfa84d49cc291748933446.png](https://img-blog.csdnimg.cn/img_convert/069133dfb7bfa84d49cc291748933446.png)
上面是什么意思呢,实际上是给出了一种定义数据包种类的格式。通常我们定义数据流,比如用ACL来抓流量,然后Class-map做匹配。不过这个是在无线环境下,STA需要用一种特殊的方式去定义有线对应的数据流量,所以就是这个TClas字段。TClas字段实际上简单的就是三个部分,Type,Mask和Parameters,其中我们关注下Parameters,由于我们定义的流量有可能是Ethernet类型的(比如Type 0),有可能是基于TCP/UDP数据包的(比如Type 1,其中包含了IPv4和IPv6两种,不过公用一个Classifier Type),还有可能是802.1Q的(Type 2,实际上就是基于VLAN Tag的)。通过以上这种结构来定义流量。
我们用下图的抓包结果可能清楚点:
![712e3f849914905a0d2243e500c262f7.png](https://img-blog.csdnimg.cn/img_convert/712e3f849914905a0d2243e500c262f7.png)
这个也是一个ADDTS Request的帧,但是因为wireshark解析的问题,其显示的类型是Management Notification(17)。这个里面的Traffic Classification字段就是对应的TClas部分。
这个定义流量的部分,还有一个部分就是配置QoS参数了,此时需要用到TSpec部分。TSpec如下图所示:
![d2cf11398fd74998799c05433e34fb3f.png](https://img-blog.csdnimg.cn/img_convert/d2cf11398fd74998799c05433e34fb3f.png)
TSpec实际上对应到图中的TS Info部分,这里参数比较多,可以看一下下面的解析:
![7ac902c99330697f93a5aeb1629451ec.png](https://img-blog.csdnimg.cn/img_convert/7ac902c99330697f93a5aeb1629451ec.png)
以上部分图中已经写的很清楚了,所以笔者就不进一步展开了。
当TSpec和TClas都以Element的形式,添加在ADDTS Response发给AP后,AP(或者转给WLC)会进行Admission Control判断。
如果现在网络中的资源是够的,那么就允许这个TS类型接入,如下图的抓包反馈:
![7a653b287a05579636d513300342a643.png](https://img-blog.csdnimg.cn/img_convert/7a653b287a05579636d513300342a643.png)
可以看到Status code是Admission accepted的。如果此时AP发现资源不够,那么会拒绝这个TS进行接入,那么这个TS的业务就会被按照默认的TC类型进行接入了。
![3670ff73b4a70b07974d8f47afdfd5ec.png](https://img-blog.csdnimg.cn/img_convert/3670ff73b4a70b07974d8f47afdfd5ec.png)
上图就是一个被拒绝的ADDTS Response反馈。
本文我们讨论802.11e中关于优先级定义的额外内容,以及对应的Admission Control机制。这个部分目前只有一些商业WLC+AP的架构可能才会用的上,而且需要一些专业的语音设备配合之类的。但是这个确实是802.11e中非常容易混淆的部分,重点是理清楚,TID,TC,TS,TSpec,TClas这几个概念以及Admission Control的机制。
本文为原创文章,如需转载须注明出处和原文链接。
![fbe060ac3858b3102521721ccf109036.png](https://img-blog.csdnimg.cn/img_convert/fbe060ac3858b3102521721ccf109036.png)
欢迎大家关注我们的微信公众号:无线技术大讲堂,请搜索公众号(must_wireless)。