刚开始接触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 出现


随着网络的发展,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部分 如下图:

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
对应关系如下表所示:

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]。

IP Precedence、DSCP、TOS相关推荐

  1. IP precedence和DSCP代码对照表

  2. IP Precedence DSCP、TOS

    IP Precedence DSCP.TOS RFC 791中 OS位的IP Precedence划分成了8个优先级,可以应用于流分类,数值越大表示优先级越高. 0     1     2     3 ...

  3. 71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP

    目录 有小伙伴问:为什么没有配置 IP 地址就无法上网?IP 协议又是啥? 这要从 TCP/IP 协议说起,互联网使用的是 TCP/IP 协议,其中 IP 协议又是最重要的协议之一.IP 协议是基于  ...

  4. IP、TCP、UDP、HTTP头部信息

    IP头部信息 ip报文段格式 版本: 占4位,表明IP协议实现的版本号,当前一般为IPv4,即0100. 报头长度 : 占4位,因为头部长度不固定(Option可选部分不固定),所以需要标识该分组的头 ...

  5. 计算机网络——网络基础_网络命令的使用(配置主机IP、ipconfig、ping、tracert、arp实战)

    实验二  网络基础_网络命令的使用 一.配置主机的IP地址 实验目的 1.能打开Windows 10的命令窗口,在窗口中执行命令. 2.掌握IP设置的基本方法. 实验装置和工具 一台连入本地局域网或互 ...

  6. IP、TCP、UDP首部详解

    IP首部 IP首部字段图 IP首部字段详情 4位版本: 协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本. 4位首部长度: 指首部占32bit字的数目,包括选项区,也就是说 ...

  7. 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP

    71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...

  8. 【最全面的】71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP

    转发自: Original Fox 网络技术平台 目录 有小伙伴问:为什么没有配置 IP 地址就无法上网?IP 协议又是啥? 这要从 TCP/IP 协议说起,互联网使用的是 TCP/IP 协议,其中 ...

  9. TCP、UDP、IP、以太网报文格式以及重要字段详解

    TCP报文格式: ​ ​ 源端口号和目的端口号: ​ 用于寻找发端和收端应用进程.这两个值加上ip首部源端ip地址和目的端ip地址唯一确定一个tcp连接. ​ 序号字段: ​ 序号用来标识从T C P ...

最新文章

  1. 使用Python生成动态图表,一个很Cool的教程
  2. BPMF论文辅助笔记: 固定U,更新θU 部分推导
  3. php异步请求$.post,如何用PHP实现异步请求、忽略返回值
  4. c++运算符优先级总结
  5. html调用谷歌内核,360浏览器指定Webkit(chrome)内核
  6. php cksql,金蝶KSQL规范
  7. 大数据分析的误区有哪些
  8. bootstrap-select 插件使用详解
  9. 《机电传动控制》第六周学习笔记
  10. 现代通信原理:第七章部分习题答案
  11. 串口协议包的接收及解析处理
  12. 如何用WPS表格生成拟合曲线
  13. 图片转pdf怎么转?怎么在电脑上把图片转成pdf?
  14. Windows触发事件ID说明
  15. 如何实现局域网时间同步
  16. 从技术面试官的角度谈谈简历和面试那些事儿
  17. 大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能
  18. 如何寻求知识产权的刑事救济
  19. 抖音最新风控体系研究
  20. oracle erp ebs r12 财务模块fin 系统设置 系统操作 流程方案

热门文章

  1. 40岁C++没有中年危机
  2. Efficient SR挑战赛结果| AIM 2020 Challenge on Efficient Super-Resolution:Methods and Results
  3. SVN 命令行常用命令
  4. Requests库与response属性
  5. c-plus day4
  6. 前端设计的目的、原则
  7. elasticSearch port
  8. python functools_Python之functools模块的使用
  9. 野生幼儿教师:程序员育儿指南
  10. [转] 淘宝数据库分布式代理层TDDL剖析