session 1 QOS概念及术语澄清
TOS、DSCP、PHB、COS、EXP(MPLS的)、ipv6TC(ipv6 Traffic Class)
ipv4的包头中TOS字段定义了QOS服务质量,其中的被IEEE在RFC中规定的对应关系是:
xxx 这个是 ippredence=cos=Exp
xxx xxx 这个是dscp=ipv6TC(8bit用前6bit)
xxx xxx x x 这个是TOS字段,前3bit对应ipp=cos=exp,前6bit对应dscp=ipv6TC,后面2个xx保留
xxx dtr c ? TOS字段,前3bit表示优先级,后面5bit中分别是D=时延,T=带宽,R=可靠性,C=cost开销(保留),?=保留
在PHB中前3bit表示优先级,后2个bit表示丢包,第6bit固定=0,最后2bit保留
综上所述,TOS中的bit包含了ipp、cos、exp、dscp、ipv6tc、phb所用到的bit
1、DSCP与PHB
DSCP只是个标记,PHB是每一跳执行动作。就比如DSCP有0-63=64个,但是这64个之中只有16个值被规定了有相应的PBH转发动作。这个是IEEE规定的在多个RFC文档中有记载。所以DSCP和PHB的关系是DSCP中的16个值被规定成了PHB动作,只有这个16个DSCP值默认会被设备执行相应的PHB转发动作,其余的值并没有被PHB规定,故不存在转发动作,都是按照默认的BE转发执行,这些值都是留给攻城狮可以手动定义转发动作的。
PHB有哪些?答案是16个动作,每个动作就是一个DSCP(命名),没有被PHB规定的其他DSCP值(如001 011)按照BE的优先级执行,PHB按照动作优先级的从优到次分别 如下:
所有的PHB的前3bit都是对应ippredence=cos=Exp的8个优先级,后3bit除了AF使用其中2bit做丢弃优先级用外,其余的CS、EF、BE都是固定值,详细见如下:
CS7 111 000 为什么是CS7?仔细看一下发现前3bit从最低优先级BE开始到CS是0-7刚好对应了ipp中的0-7=8个优先级
CS6 110 000 按照算法xxx=421,那么111=4+2+1=7,而110=4+2+0=6,因为CS6-7(对应ipp6-7)用于网络协议要求的带宽优先级最高,因此前3bit的值最大,后3个bit000代表不允许QOS丢包,正常网络丢包有TCP重传机制来控制
EF5 101 110 EF前3bit是101=5也就是对应了ipp5,用于语音voice或视频video,要求的带宽是高,对于时延、抖动比较敏感因此前3bit仅次于CS,但是不要求丢包率,所以后3bit大以防止占用太多带宽而不丢包会压榨光其他网络流量的带宽
AF4 100 01 0 AF中前3bit分别对应了ipp的1-4(只用1-4是因为PHB规定),所以分别是001、010、011、100也就是AF1-4
100 10 0 AF中的后2bit为丢弃率,值越大丢弃优先级越高,最后1bit固定=0
100 11 0 所以AF的格式为xxx yy0 前面的x表示优先级,后面的y表示丢包,这样每个AF就有3种组合,4个AF就有12种组合
AF3 011 01 0 AF一般用于高优先级和中等优先级的数据业务
011 10 0
011 11 0
AF2 010 01 0
010 10 0
010 11 0
AF1 001 01 0
001 10 0
001 11 0
BE0 000 000 BE就是QOS中默认的FOFI先进先出型,尽力而为模型,默认的数据都是这个DSCP值
2、QOS中的PHB规定对应的业务等级,注意下表是ipp对应phb,因为phb就是按照ipp进行划分的所以是1对1的关系,而ipp对应dscp的就是1对8的关系,1个ipp=8个dscp值,因为dscp的后3bit是2的3次方=8中排列(前3bit中ipp与dscp是1对1,后面dscp多了3bit的8中组合,在加上前3bit的话就是8种,所以是1对8),如ipp0对应dscp的0-7(8个)
ipp =cos=exp phb.dscp=ipv6tc
7 111 CS7
6 110 CS6
5 101 EF(5)
4 100 AF4
3 011 AF3
2 010 AF2
1 001 AF1
0 000 BE
ipp与dscp的对应关系
ipp dscp
7 111 111 000 56
111 001 57
111 010 58
111 011 59
111 100 60
111 101 61
111 110 62
111 111 63
6 110 110 xxx 48-55 剩余的1ipp与8DSCP的对应如法炮制
3、简单的流分类和复杂的流分类
简单的流分类是指,使用默认的PHB的转发优先级去转发,所有设备是默认都支持默认的PHB的,需要开启QOS功能。
也就是说,我们不去手工指定数据包的优先级(ipp、dscp、cos等),而是以数据包自己的qos优先级属性去转发,比如一个voice的报文默认就是EF的phb.dscp值,那么它进入一个开启qos功能的设备后就会被按照默认的phb(EF)优先级进行转发,而一个http的数据包文默认就是BE的phb.dscp值,那么它就会被按照默认的phb(BE)优先级进行转发。
但是简单的流分类并不简单,反而更加复杂。复杂在你需要事先了解这所有的默认QOS的属性和规则,如PHB、DSCP、ipp等
4、复杂的流分类
这个虽然叫复杂的流分类,但是相对于简单流分类反而还简单些,这种操作模式是有攻城狮手工去配置数据的转发优先级和动作的,最常见的是按照数据包的五元组、特征信息等使用ACL、traffic-class、behavior、traffic-policy等工具来直接定义数据包的优先级和转发动作,比较浅显和易理解
5、Service Class服务类和标准QOS的映射
服务类也叫做内部标记(内部自定义的转发优先级和转发动作PHB),对应的默认的QOS属性(通用的ipp、dscp、PHB等的值)也叫做外部标记
通常数据在进入(上行)设备的时候,会将外部标记转换成内部标记,而出去(下行)设备的时候,会将内部标记恢复为外部标记以便下个设备能够得到数据本身的标准的QOS属性,如下图中,一个voice数据包默认的QOS属性是ipp=5、phb=ef,而本地的内部标记Service Class可将它定义为ipp=0、phb=be执行转发(当然没有人会这样做,这里只是举例说明内部标记和外部标记的概念,不然容易懵逼),如果不进行转发的话,那么在有内部标记(自定义QOS)的情况下,出去到下游的设备的数据包的QOS会携带内部标记的QOS,不会恢复成标准的QOS外部标记
6、QOS的端口信任
下游设备可以在端口上配置QOS的信任(trust)或不信任,来信任/不信任(继承)上游设备发来的带有QOS优先级的报文,就如上图中假设AR1出去的报文没有进行内部标记到外部标记的恢复映射,那么从AR1出来的voice报文的ipp=0、phb=be。这时AR2可以选择信任或者不信任AR1发来的数据包的qos优先级,如果信任则继承voice报文ipp=0、phb=be的qos属性,如果不信任则会按照标准的qos来恢复这个voice报文ipp=5、phb=ef的qos属性。接口默认都是untrust不信任的。
但如果AR2中有内部标记service class定义voice报文的ipp=1、phb=af11的话,那么进入AR2的voice报文的qos属性就会表位ipp=1、phb=af11这样的qos属性