https://zhuanlan.zhihu.com/p/160937314
1111111
分类和标记是识别每个数据包优先级的过程。
这是QoS控制的第一步,应在源主机附近完成。
分组通常通过其分组报头来分类。下图指定的规则仔细检查了数据包头
:
下表列出了分类标准:
普通二层帧中是不携带有优先级字段的。
VLAN帧中的优先级那就是我们通常所说的802.1p优先级(由IEEE 802.1p协议定义),位于VLAN帧
中的“802.1Q Tag”字段的“PRI”子字段中,
IEEE 802.1p是IEEE 802.1Q(VLAN标签技术
)标准的扩充协议,它们协同工作。IEEE 802.1p的出现,使得第二层交换机能够提供流量优先级和动态组播过滤服务,其中流量优先级规范工作在媒体访问控制(MAC)层,组播流量过滤功能可确保该流量不超出第二层交换网络
范围。
IEEE 802.1Q标准定义了为以太网
MAC 帧添加的标签,但并没有定义和使用优先级字段,而使用IEEE 802.1p修改后的以太网MAC帧的以太网协议
头中则定义了该字段。802.1p优先级位于二层VLAN帧头部,适用于不需要分析三层报文头,而需要在二层环境下保证QoS的场合。
4个字节的802.1Q标签头包含:
- 2个字节的TPID(Tag Protocol Identifier,标签协议标识,取值为0x8100)
- 2个字节的TCI(Tag Control Information,标签控制信息),参见图。
CoS
以太网帧通过指定802.1Q标头的802.1p用户优先级(CoS)进行标记。第2层以太网帧仅具有八类服务(从0到7),它们是:
TOS
1.ToS字段标的IP优先级
在早期的RFC 791标准中,IP数据包
是依赖ToS(Type of Service,服务类型)字段来标识数据优先级值的。ToS是IP数据包中的IP报头中的一个字段(共1个字节),用来指定IP包的优先级,设备会优先转发ToS值高的数据包。
ToS字段共一个字节(8位),
包括三个部分:
- 0~2共三位用来定义数据包的IP优先级(IP Precedence)、
- 3-6 共四位 ToS
- 一个固定为0的位
IP Precedence部分
IP优先级部分共三位,取值范围为0~7(值越大,优先级越高)。用名称表示时,这8个取值分别为,分别对应于数字0~7。
CS0.routine(普通,值为000)
CS1.priority(优先,值为001)
CS2.immediate(快速,值为010)
CS3.flash(闪速,值为011)
CS4.flash-override(急速,值为100)
CS5.critical
(关键,值为101)
CS6.internetwork control (网间控制,值为110)
CS7.network control(网络控制,值为111)
在以上IP优先级值中,6和7一般保留给网络控制数据使用,比如路由;5推荐给语音数据使用;4推荐由视频会议和视频流
使用;3推荐给语音控制数据使用;1和2推荐给数据业务使用;
0为默认标记值。在IP优先级配置时,既可以使用0~7这样的数值,也可以使用上述对应的优先级名称。
ToS部分
在IP包头的ToS字段中紧接着IP优先级字段后面的四位是ToS部分,代表需要为对应报文提供的服务类型(标识报文所注重的特性要求)。一开始,在RFC 791中是只用到了第3~5位,分别代表IP包在Delay(延时),Throughput(吞吐量
),Reliability(可靠性)这三方面的特性要求(每个报文在这三位中只有一位可能置1,此时表示IP包在对应方面有特别要求)。后来在RFC1349标准中又扩展到第6位,表示IP包在路径开销
(cost)方面的特性要求。
要注意的是,虽然ToS部分共有四位,但每个IP包中这四位中只能有一位为1,所以实际只有五个取值(包括全为0的值)。
这五个值所对应的名称和数值分别为:
- normal(一般服务,取值为0000)、
- min-monetary-cost(最小开销,取值为0001,确保路径开销最小)、
- max-reliability(最高可靠性,0010,确保可靠性最高)、
- max-throughput(最大吞吐量
- ,取值为0100,确保传输速率最高)、
- min-delay(最小时延,取值为1000,确保传输延时最小)。
2. DS字段的DSCP优先级和PHB
RFC 2474标准 定义了DSCP 6位 64个优先级值
重新定义了原来IP包头部的ToS字段,并改称之为DS(Differentiated Services,差分服务)
第0~5位(共六位)用来表示DSCP(Differentiated Services Code Point,差分服务代码点)优先级,取值范围为0~63,共能标识出64个优先级值(值越大,优先级越高),最后两位保留,用于显示拥塞通知(Explicit Congestion Notification,ECN)
IETF RFC 2597标准 定义了PHB 5位 3(PHB Class)+2(PHB Class Selector)
定义了PHB(Per-Hop Behavior),通过PHB值可以确定在网关处对IP包的转发行为。
- DSCP优先级部分的第0~4位来标识的,
- 0~2位用来标识PHB类别(PHB Class)值,共8个值,对应表示为CS0~CS7。
- 3~4位用来标识PHB类别选择值(PHB Class Selector),
PHB值=类别值+PHB类别选择值。
DSCP值
=PHB的五位+第5位(固定为0),但在PHB类别中的三位不能全为0。
在RFC 2597中定义了四种确保转发(Assured Forwarding,AF)PHB组(称之为AF PHB)。
- DS字段中的第0~2位定义PHB类别,
- DS字段中的第3和4位代表报文的“丢弃优先级”,用AF(x,y)表示,其中x表示流分类,y表示对应的丢弃优先级。
【说明】所谓“确保转发”就是允许管理员在没有超过线路允许速率的情况下提供尽可能的传输质量保证,但如果超出用户线路速率则可能在出现拥塞时丢弃数据包。
- 3位理论有8个,但只定义4个 PHB Class 1,2,3,4
- 2位理论有4个,但只定义3个 PHB Class Selector 取非0的三个值
在确保转发PHB中,定义了四种PHB类别(也即“流分类”),它们的值分别为001、010、011和100(对应CS1~CS4),它们本身代表了流的不同优先级(值越大转发优先级越高),
然后通过第3和4位的丢弃优先级值(取非0的三个值,分别为01、10和11,值越大丢弃优先级越高)进一步区分同一类流不同IP包
的丢弃优先级。
它们共同针对四种PHB分类组成了四组AF等级,它们所对应的AF值和对应的DSCP值如表10-1所示(此时第5位的值固定为0)。
表10-1 四组AF PHB等级
丢弃优先级
Class 1
Class 2
Class 3
Class 4
低丢弃优先级
AF11 (DSCP 10):001010
AF21 (DSCP 18):010010
AF31 (DSCP 26):011010
AF41 (DSCP 34):100010
中丢弃优先级
AF12 (DSCP 12):001100
AF22 (DSCP 20):010100
AF32 (DSCP 28):011100
AF42 (DSCP 36):100100
高丢弃优先级
AF13 (DSCP 14):001110
AF23 (DSCP 22):010110
AF33 (DSCP 30):011110
AF43 (DSCP 38):100110
再后来在RFC 3246标准中,又定义一个加速转发(Expedited Forwarding,EF)PHB,对应CS5,即在DS字段中的第0~2位取值为101,第3~4位取值固定为11,第5位固定为0,这样一来对应的DSCP值就为46(101110)。EF PHB具有低延时、低开销和低抖动特性,适用于语音、视频和其他实时服务,一般具有比其他通信类型更加优先的队列。
除了前面介绍的AF和EF外,还有一个缺省的PHB,那就是BE尽力服务类型,它所对应的DSCP值为000000,即十进制的0。另外还定义了CS6和CS7,CS6用于网间控制,对应的DSCP为110000,即十进制的48;CS7用于网内控制,对应的DSCP值为111000,即十进制的56。
在配置DSCP优先级时,既可以使用对应的DSCP名称,如CS6、CS7、AF11、AF12(在CS1~CS4中每个包含了一组DSCP值,所以要指定具体的DSCP名称),又可使用对应的DSCP十进制值,如48、56等。