IP Precedence、DSCP、TOS

刚开始接触QoS时,经常会被IP Precedence、DSCP、TOS这些名词搞迷糊,那么接下来就梳理一下。

首先 IP Precedence

IPv4中有8bit作为TOS字段,一开始RFC791定义了TOS前三位为IP Precedence,划分了8个优先级,可用于流分类,数值越大表示优先级越高。IP Precedence与CoS相同,都有8种服务(0-7).。
一般对应的应用类型:
7 预留(Reserved)
6 预留(Reserved)
5 语音(Voice)
4 视频会议(Video Conference)
3 呼叫信号(Call Signaling)
2 高优先级数据(High-priority Data)
1 中优先级数据(Medium-priority Data)
0 尽力服务数据(Best-effort Data)

DSCP 出现

IP Precedence、DSCP、TOS_第1张图片
随着网络的发展,8个优先级已经不能满足实际需要,于是RFC2474又对TOS重新进行了定义,把前六位定义为DSCP差分服务代码(Differentiated Services Code Point),后两位保留。
RFC3168中将TOS最后两位定义为ECN字段,用来控制拥塞比如用在RoCEv2环境。如果不了解ECN可以参考一下这篇文章:RoCEv2网络

DSCP关键字形式

由于DSCP和IP PRECEDENCE是共存的,于是存在了一些兼容性的问题,DSCP的可读性比较差,比如DSCP 43我们并不知道对应着IP PRECEDENCE的什么取值,于是就把DSCP进行了进一步的分类。DSCP总共分成了4类:
1. Default(BE) 000 000: 默认值
2. Class Selector(CS) xxx 000 :CS的DSCP后三位为0,也就是说CS仍然沿用了IP Precedence只不过CS定义的DSCP=IP Precedence*8,比如:CS6(110 000)=6 x 8=48,CS7(111 000)=7 x 8=56
3. Expedited Forwarding(EF) 101 110 :EF含义为加速转发,也可以看作为IP Precedence为5,是一个比较高的优先级,取值为101110(46),但是RFC并没有定义为什么EF的取值为46。
4. Assured Forwarding(AF) aaa bb0:AF分为两部分,a部分(IP优先级)和b部分 如下图:
IP Precedence、DSCP、TOS_第2张图片
a部分为3 bit仍然可以和IP Precedence对应;
b部分为2 bit表示丢弃性,可以表示3个丢弃优先级,可以应用于RED或者WRED。
目前a部分有三个bit最大取值为8,但是目前只用到了1~4。为了迅速的和10进制转换,可以用如下方法,先把10进制数值除8得到的整数就是AF值,余数换算成二进制看前两位就是丢弃优先级,比如34/8=4余数为2,2 换算成二进制为010,那么换算以后可以知道34代表AF4丢弃优先级为middle的数据报。
确定转发(AF),定义了4个服务等级,每个服务等级有3个下降过程,因此使用了12个DSCP值((10,12,14),(18,20,22),(26,28,30),(34,36,38))

DSCP和TOS对照

举个例子:DSCP=001010 十进制就是10 十六进制就是a,相对应的TOS=00101000 十进制就是40 十六进制就是28
对应关系如下表所示:

IP Precedence、DSCP、TOS_第3张图片

tcpdump抓包

这里再分享一下tcpdump 过滤TOS值和DSCP值的抓包分享:
首先在一台Linux机器上持续ping,-Q 40 标识ICMP包的DSCP字段为40,对应AF11
在这里插入图片描述

然后我们另开一个shell 用tcpdump抓包:sudo tcpdump -v -i eth0 ‘ip[1]&0xfc == 40’,ip[1] 是过滤IP包头的第2个字节,0xfc相当于掩码忽略掉后两位ECN位。
在这里插入图片描述
这样就可以抓到AF11的包,对应上表DSCP值10[0x0a],TOS值40[0x28]。
在这里插入图片描述

你可能感兴趣的:(网络知识,网络,tcpdump,dscp,qos)