IP Precedence、DSCP、TOS

article/2025/10/20 17:38:29

刚开始接触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]。
在这里插入图片描述


http://chatgpt.dhexx.cn/article/YvhTJPl4.shtml

相关文章

【网络】Cos和ToS和DSCP|Qos|PHB的含义和区别以及映射

目录 视频教程: 介绍和区别 Qos/Cos IP-TOS(IPP/CS)和DSCP PHB(Per-Hop-Behaviors) 区别 各个等级的DSCP值和含义(PHB) 映射 COS到DSCP的映射 IP-Precedence到DSCP的映射(Tos-->DSCP&#xff09…

TOS 和DSCP

IPv4报文中有三种承载QoS优先级标签的方式,分别为基于二层的CoS字段(IEEE802.1p)的优先级、基于IP层的IP优先级(IP Precedence)字段ToS优先级和基于IP层的DSCP(Differentiated Services Codepoint&#xff…

什么是DSCP,如何使用DSCP标记搭配ROS策略

什么是DSCP,如何使用DSCP标记搭配ROS策略 一、什么是DSCP DSCP:差分服务代码点(Differentiated Services Code Point),IETF于1998年12月发布了Diff-Serv(Differentiated Service)的QoS分类标准…

TOS 和 DSCP理解

背景 IPv4报文中有三种承载QoS优先级标签的方式,分别为基于二层的CoS字段(IEEE802.1p)的优先级、基于IP层的IP优先级(IP Precedence)字段ToS优先级和基于IP层的DSCP(Differentiated Services Codepoint&am…

谈谈ES5和ES6的区别

我们都知道JavaScript是由三部分组成: 1. ECMAScript(核心):规定了语言的组成部分>语法、类型、语句、关键字、保留字、操作符、对象 2. BOM(浏览器对象模型): 支持访问和操作浏览器窗口,可以控制浏览器显示页面以外的部分。 3. DOM(文…

ES5基础语法

一.类与对象 class father {that this;constructor(uname, age) {this.uname uname;this.age age;}sing(song) {console.log(this.uname song);}}class son extends father {constructor(uname,age) {super(uname,age);this.unameuname;this.age age;}sing(song){console.…

ES5语法

从今天起,我们开始接触JS部分,先从ES5一些简单的语法入手。下面先看下思维导图,确定我们的学习思路: 今天我们先学习代码规范,数据类型以及数据类型转换三个模块 代码规范 JS中的一切都区分大小写 标识符&#xff1…

es5 es6 互相转换

- 工具:Visual Studio Code - 具体过程 1.新建项目,dist存放ES6格式的,src存放ES5格式的,如下 index.html内容,此处引用dist中的js 2.打开终端(ctrl ) npm需要安装,安装node即可…

套接字

套接字(socket)最早是由BSD在1982年引入的通信机制,目前已被广泛移植到主流的操作系统中。对于应用开发人员来说,套接字(socket)是一种特殊的I/O接口,也是一种文件描述符。socket是一种常用的进…

原始套接字简介

一 原始套接字概述 原始套接字,指在传输层下面使用的套接字。流式套接字和数据报套接字这两种套接字工作在传输层,主要为应用层的应用程序提供服务,并且在接收和发送时只能操作数据部分,而不能对IP首部或TCP和UDP首部进行操作&am…

网络套接字编程(socket 详解)

socket 编程 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的&a…

Socket 套接字原理详解

Socket 套接字原理详解 socket 编程介绍 Socket编程封装了常见的TCP、UDP操作,可以实现非常方便的网络编程。 socket() 函数介绍 # socket.socket(family,type) tcpSocketsocket.socket(AF_INET, SOCK_STREAM) # family 地址系列应为 AF_INET(IPv4), AF_INET6(IP…

TCP的套接字

摘自:《深入理解计算机网络》 王达著 机械工业出版社 相关知识链接 1. IPV4数据报头部格式 2. IPv6数据报头部格式 3. IPv4数据报的封装与解封装 4. IPv4数据报的分段与重组 5. ARP协议报文格式及ARP表 6. ARP地址解析原理 7. ICMP协议及报文格式 8. IPv6协…

Socket(套接字)详解 画图+实例

Socket概念 Socket本意为“插座”,在Linux下,用于表示进程间网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件。 既然是文件,那肯定就可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的…

Python中的套接字编程

文章目录 **连接到服务器:****一个简单的服务器客户端程序:****服务器****客户端** 套接字编程是一种连接网络上的两个节点以相互通信的方法。一个套接字(节点)侦听 IP 处的特定端口,而另一个套接字则伸向另一个套接字…

流式套接字基本概念

目录 流式套接字基本概念创建套接字绑定本地地址连接请求监听函数接收请求套接字IO操作关闭套接字 编程实现 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利…

Windows下套接字

一、套接字 windows套接字Socket是进程通信的一种方式,可以实现在不同主机的相关进程之间交换数据。在TCP/IP网络应用中,通信的两个进程的主要模式是客户/服务器(C/S)模式,即客户向服务器发出请求,服务器接受到请求后&#xf…

深入理解Socket套接字原理

Socket套接字原理 1、什么是Socket 在计算机领域,套接字Socket作为计算机之间进行通信的固定的约定方式之一存在。这种太抽象了,我举个例子,我们要是用笔记本电脑前需要先对电脑供电,那供电就有两种方式电线插座供电和电池供电&…

原始套接字

一、原始套接字概述 协议栈的原始套接字从实现上可以分为“链路层原始套接字”和“网络层原始套接字”两大类。 链路层原始套接字可以直接用于接收和发送链路层的MAC帧,在发送时需要由调用者自行构造和封装MAC首部。而网络层原始套接字可以直接用于接收和发送IP层…

socket套接字

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 socket套接字 1. 什么是socket套接字2. socket编程3. 网络字节序4. IP地址转换函数5. sockaddr数据结构…