TOS 和DSCP

article/2025/10/20 17:49:28

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

各种标记IP包的技术实际上有相通之处,只是标准不同而已,简单来说:

IP precedence 使用前3bit;ToS使用4-7 bit, 最后一位备用;

DSCP 使用0-5bit, 最后两位备用。

ipv4头

TOS

ToS (Type of Service)  

Precedence(3)ToS(4)Unused(1)

4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中最多只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。

DSCP

在网络中实际部署的时候这8个优先级是远远不够的,于是在RFC 2474中又对TOS进行了重新的定义。把前六位定义成DSCP,后两位保留。

Differentiated Services Code Point(DSCP, RFC-2474) 

 0   1    2    3    4    5    6   7

+---+---+---+---+---+---+---+---+

|          DSCP              |   CU  |

DSCP: differentiated services codepoin

CU: currently unused

由于DSCP和IP PRECEDENCE是共存的,于是存在了一些兼容性的问题,DSCP的可读性比较差,比如DSCP 43我们并不知道对应着IP PRECEDENCE的什么取值,于是就把DSCP进行了进一步的分类。

Class Selector(3)Drop Precedence(3)ECN(2)

DSCP优先级值有64个(0-63),0优先级最低,63优先级最高。事实上DSCP字段是IP优先级字段的超集,DSCP字段的定义向后与IP优先级字段兼容。

目前定义的DSCP有:

  • 默认的DSCP,值为0;
  • 类选择器DSCP,定义为向后与IP优先级兼容,值为(8,16,24,32,40,48,56);
  • 加速转发(EF),一般用于低延迟的服务,推荐值为46(101110);
  • 确定转发(AF),定义了4个服务等级,每个服务等级有3个下降过程,因此使用了12个DSCP值((10,12,14),(18,20,22),(26,28,30),(34,36,38))

类别选择代码(Class Selector Codepoints,CS)

最高3比特为级别/类别选择代码(Class Selector Codepoints,CS),其意义和IPv4报头中IP优先级的定义是相同的,CS0 ~ CS7的级别相等于IP优先级0 ~ 7。

CS的DSCP后三位为0,也就是说CS仍然沿用了IP PRECEDENCE;只不过CS定义的DSCP=IP PRECEDENCE*8,比如CS6=6*8=48,CS7=7*8=56;

保证转发(Assured Forwarding, AF)

由RFC2597对CS1~CS4进行进一步定义,它使用第3和第4比特做丢弃优先级标志。

01-低丢弃优先级;

10-中丢弃优先级;

11-高丢弃优先级。

这样,在同一类数据中,又根据被丢弃的可能性划分出3档。

下表列出了AF服务等级及其对应的DSCP值:

AF的定义为数据分类提供了方便,比如,运营商可以向用户提供4种服务协约(SLA):白金,金,银,铜,并为每一种服务的数据分配一定的带宽。当然,不同服务的收费标准也是不同的。

为了迅速的和10进制转换,可以用如下方法,先把10进制数值除8得到的整数就是AF值,余数换算成二进制看前两位就是丢弃优先级。

无阻碍/加速转发(Expedited Forwarding, EF)

由RFC2598定义,也可以看作为IP PRECEDENCE为5,是一个比较高的优先级。DSCP值为46 (二级制为101110)。EF服务适用于低丢包率,低延迟,低抖动及保证带宽的业务,如VOIP。

但是RFC并没有定义为什么EF的取值为46。

常用DSCP值

在配置命令中,既可以使用十进制数值,也可以使用二进制数值,还可以使用名称。例如,28, 011100, AF32三个写法意义相同。

IP报文中tos占8位,前6位为dscp值,后两位为保留位。
举例:dscp取值为1时,tos中的取值为 0-0-0-0-0-1-0-0,换成十进制就是4,所以tos的值就是4 


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

相关文章

什么是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数据结构…

java 套接字是什么_套接字是什么,套接字通信及其原理

为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。 通常,套接字采用客户机-服务器架构。服务器通过监听指定端口,来等待客户请求。服务器在收到请求后,接受来自客户套接字的连接,从而完成连接。 实…

网络编程——原始套接字实现原理

目录 1. 基础知识 1.1、概述 1.2、链路层原始套接字 1.3、网络层原始套接字 2、原始套接字的实现 2.1 原始套接字报文收发流程 2.2链路层原始套接字的实现 2.2.1 套接字创建 2.2.2 报文接收 2.2.3 报文发送 2.2.4 其它 2.3 网络层原始套接字的实现 2.3.1 套接字…