linux下QOS:理论篇

news2024/9/23 19:25:27

关于qos ,也是linux下面必备功能之一,一般只需要结合iptables/etables/iproute2 和tc配合即可实现大部分功能. 网上讲这么方面的资料很多,大部分都讲tc命令的应用.这里就先从理论入手.

QoS(Quality of Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,QoS 能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行. 在网络总带宽固定的情况下,如果某类业务占用的带宽越多,那么其他业务能使用的带宽就越少,可能会影响其他业务的使用。因此,网络管理者需要根据各种业务的特点来对网络资源进行合理的规划和分配,从而使网络资源得到高效利用

QoS服务模型

通常QoS提供以下三种服务模型:

  • Best-Effort service(尽力而为服务模型)(系统默认;PFIFO_FAST)
  • Integrated service(综合服务模型,简称Int-Serv)
  • Differentiated service(区分服务模型,简称Diff-Serv)
(1) Best-Effort服务模型

Best-Effort是一个单一的服务模型,也是最简单的服务模型。对Best-Effort服务模型,网络尽最大的可能性来发送报文。但对时延、可靠性等性能不提供任何保证。

Best-Effort服务模型是网络的缺省服务模型,通过FIFO队列来实现。它适用于绝大多数网络应用,如FTP、E-Mail等。

(2) Int-Serv服务模型

Int-Serv是一个综合服务模型,它可以满足多种QoS需求。该模型使用资源预留协议(RSVP),RSVP运行在从源端到目的端的每个设备上,可以监视每个流,以防止其消耗资源过多。这种体系能够明确区分并保证每一个业务流的服务质量,为网络提供最细粒度化的服务质量区分。

但是,Inter-Serv模型对设备的要求很高,当网络中的数据流数量很大时,设备的存储和处理能力会遇到很大的压力。Inter-Serv模型可扩展性很差,难以在Internet核心网络实施,前主要与MPLS TE(Traffic Engineering,流量工程)结合使用.

(3) Diff-Serv服务模型

Diff-Serv是一个多服务模型,它可以满足不同的QoS需求。与Int-Serv不同,它不需要通知网络为每个业务预留资源。区分服务实现简单,扩展性较好, 可以说是为现在的网络量身打做的。这个这种类型的QOS中,数据流是要进行分类的,然后,我们可以进一步的对各种不同类的流进行的控制。这个控制的实现就是通过策略表来实现的。这样简单一说,我们就该知道了,实现他们是要有个类表,然后还得有个控制表—策略表.

它由RFC2475定义,在区分服务中,根据服务要求对不同业务的数据进行分类,对报文按类进行优先级标记,然后有差别地提供服务。

区分服务一般用来为一些重要的应用提供端到端的QoS,它通过下列技术来实现:

流量标记与控制技术

它根据报文的CoS(Class of Service,服务等级)域、ToS域(对于IP报文是指IP优先级或者DSCP)、IP报文的五元组(协议、源地址、目的地址、源端口号、目的端口号)等信息进行报文分类,完成报文的标记和流量监管。目前实现流量监管技术多采用令牌桶机制。

拥塞管理与拥塞避免技术

WRED、PQ、CQ、WFQ、CBQ等队列技术对拥塞的报文进行缓存和调度,实现拥塞管理与拥塞避免。

QoS的应用

流量约定(SLA, Service Level Agreement服务等级协议)给数据流设定优先级,以此在网络/协议层面上,根据相互商定的尺度,设定有保障的性能、通过量、延迟等界限。一些特定形式的网络数据流需要定义服务质量,例如:

多媒体流要求有保障的通过量
IP电话需要严格的抖动和延迟限制
性命攸关的应用系统,例如远程外科手术要求有可靠保证的可用性(也称作硬性 QoS).

这些类型的服务被称为非弹性,意思是它们需要固定的带宽才能运作–如果得到多余的带宽,它们也无法使用;如果得到较少的带宽,则根本无法工作。相形之下,弹性应用可以从多余的带宽中受益。

网络中会遇到的情况

1. 数据包丢失

当数据包到达一个缓冲器(buffer)已满的路由器时,则代表此次的发送失败,路由器会依网络的状况决定要丢弃一部份、不丢弃 或者是所有的数据包,而且这不可能在预先就知道,接收端的应用程序在这时必须请求重新传送,而这同时可能造成总体传输严重的延迟。

2. 延迟

或许需要很长时间才能将数据包传送到终点,因为它会被漫长的队列迟滞,或需要运用间接路由以避免阻塞;也许能找到快速、直接的路由。总之,延迟非常难以预料。

3. 传输顺序出错

当一群相关的数据包被路由经过因特网时,不同的数据包可能选择不同的路由器,这会导致每个数据包有不同的延迟时间。最后数据包到达目的地的顺序会和数据包从发送端发送出去的顺序不一致,这个问题必须要有特殊额外的协议负责刷新失序的数据包。

4. 出错

有些时候,数据包在被运送的途中会发生跑错路径、被合并 甚至是 毁坏的情况,这时接收端必须要能侦测出这些情况,并将它们统统判别为已遗失的数据包,再请求发送端再送一份同样的数据包。

处理流程

分类

Classifying即分类,其过程是根据信任策略或者根据分析每个报文的内容来确定将这些报文归类到以CoS值来表示的各个数据流中,因此分类动作的核心任务是确定输入报文的CoS值。分类发生在端口接收输入报文阶段,当某个端口关联了一个表示QoS策略的Policy-map后,分类就在该端口上生效,它对所有从该端口输入的报文起作用

(1) 协议

有些协议非常“健谈”,只要它们存在就会导致业务延迟,因此根据协议对数据包进行识别和优先级处理可以降低延迟。应用可以通过它们的EtherType进行识别。譬如,AppleTalk协议采用0x809B,IPX使用0×8137。根据协议进行优先级处理是控制或阻止少数较老设备所使用的“健谈”协议的一种强有力方法。

(2) TCP和UDP端口号码

许多应用都采用一些TCP或UDP端口进行通信,如HTTP采用TCP端口80。通过检查IP数据包的端口号码,智能网络可以确定数据包是由哪类应用产生的,这种方法也称为第四层交换,因为TCP和UDP都位于OSI模型的第四层。

(3) 源IP地址

许多应用都是通过其源IP地址进行识别的。由于服务器有时是专门针对单一应用而配置的,如电子邮件服务器,所以分析数据包的源IP地址可以识别该数据包是由什么应用产生的。当识别交换机与应用服务器不直接相连,而且许多不同服务器的数据流都到达该交换机时,这种方法就非常有用。

(4) 物理端口号码

与源IP地址类似,物理端口号码可以指示哪个服务器正在发送数据。这种方法取决于交换机物理端口和应用服务器的映射关系。虽然这是最简单的分类形式,但是它依赖于直接与该交换机连接的服务器

策略

Policing 即策略,发生在数据流分类完成后,用于约束被分类的数据流所占用的传输带宽。Policing动作检查被归类的数据流中的每一个报文,如果该报文超出了作用于该数据流的Police所允许的限制带宽,那么该报文将会被做特殊处理,它或者要被丢弃,或者要被赋予另外的DSCP 值。

在QoS 处理流程中,Policing 动作是可选的。如果没有Policing 动作,那么被分类的数据流中的报文的DSCP 值将不会作任何修改,报文也不会在送往Marking 动作之前被丢弃。

标识

Marking即标识,经过Classifying 和Policing 动作处理之后,为了确保被分类报文对应DSCP的值能够传递给网络上的下一跳设备,需要通过Marking 动作将为报文写入QoS 信息,可以使用QoS ACLs 改变报文的QoS信息,也可以使用Trust 方式直接保留报文中QoS 信息,例如,选择Trust DSCP 从而保留IP 报文头的DSCP 信息。

队列

Queueing即队列,负责将数据流中报文送往端口的某个输出队列中,送往端口的不同输出队列的报文将获得不同等级和性质的传输服务策略。

每一个端口上都拥有8 个输出队列,通过设备上配置的DSCP-to-CoS Map 和Cos-to-Queue Map 两张映射表来将报文的DSCP 值转化成输出队列号,以便确定报文应该被送往的输出队列。

调度

Scheduling即调度,为QoS 流程的最后一个环节。当报文被送到端口的不同输出队列上之后,设备将采用WRR 或者其它算法发送8 个队列中的报文。

可以通过设置WRR算法的权重值来配置各个输出队列在输出报文的时候所占用的每循环发送报文个数,从而影响传输带宽。或通过设置DRR算法的权重值来配置各个输出队列在输出报文的时候所占用的每循环发送报文字节数,从而影响传输带宽

COS TOS DSCP 的概念及区别

(1) COS是在第二层ISL或802.1Q数据帧中的ISL或802。1Q的报头中的3位用于COS,即优先标识。3bit,0–7个级别。

802.1Q:

(2) TOS是在第三层IP数据包中的8位TOS数据位,以来标识优先级。这8位中前3位表示优先级,后4位表示服务类型(分别为:最小延迟、最大吞吐量、最高可靠性、最小费用。只能其中一位为1,即生效。如果全为0就表示一般服务)。最后一位一般不用,置0

(3) DSCP也是三层IP中的8位TOS字段表示优先级。不同的是用了前6位表示优先级,可设0–63,共64个等级。(把前6位中的前3位设为优先级,后3位设为0,就可以实现DSCP和TOS互相映射兼容)。最后两位为早期拥塞通知。

因为COS二层标记中也是3位用于优先级,所以也可以把COS和TOS和DSCP中的优先级映射。

DSCP数位域标识出数据包所属的特定交付分类,具体实现方法是企业为分类制定明确的交付目标。路由器和其它设备可以通过数据包队列(本质上就是缓冲区)和相应算法,传递数据包,实现交付目标。一些推荐标准涉及到DSCP数位域的值(如RFC2474中列举的),它们围绕加速转发(进一步描述可参见RFC3246)和确保转发(RFC2597)定义了一些期望行为:加速转发让交付过程低丢包、低延时和抖动最小;确保转发则保证无损交付。

RFC推荐使用DSCP值46来标记加速转发分类(6位DSCP的二进制值为101110),它适用于诸如VoIP或IP会议的实时交互多媒体流;为确保转发流量分配了包含12个标记值的集合,来保证不同等级的交付。

这里cos和dscp是修改了数据报文的内容,可以在网络其他设备来调度,还有本地主机的工具可以打一些标记,tc的u32模块,iptables的MARK,以及iproute2的工具。

这些工具并不修改报文,而是提供本地内核调度用。

QOS要保证服务,就要设计流量控制

流量控制中的概念

1. 整形

整形就是流量控制,把数据包的发送速率控制在一个固定的水平以下。由于整形通过延迟数据包的发送来控制数据包发送速率,故整形机制是非工作保存的。“非工作保存”可以理解为:系统必须进行一些操作来延迟数据包的发送。

反过来说,一种非工作保存的队列是可以进行流量整形的,而工作保存的队列(参考 PRIO)不能进行流量整形,因为工作保存队列无法延迟发送数据包。

2. 调度

一个调度器会对将要发送的数据包顺序进行排列或重排。

3. 分类

分类器能把不同类型的网络流量划分到不同的队列中去。

4. 策略

决策器能计算并限制某个特定队列的流量

5. 丢弃

丢弃一个数据包,一个数据流或一个分类下的数据包,都可以叫做丢弃。

6. 标记

标记是一种对数据包进行一些修改的操作

注意

这里说的标记不是fwmark。iptables,$ipt-mark;,ipchains以及–mark都只修改数据包的元数据,而不修改数据包本身。

流量控制中的标记操作会给数据包加上一个DSCP,接下来在由一个管理员控制的一个网络下的其他路由器上将会使用这个标记。

QoS的关键指标主要包括:可用性吞吐量时延时延变化(包括抖动和漂移)和丢失

Linux TC

在linux中是通过Tc命令来实现的(外加内核的支持)。我们看到网上大部分说的队列规则、分类、分类器什么的都是说的TC的机制,而tc只是实现qos的方式之一.

在网络通信设备中不同的厂商对qos有各自的实现和配置. 基于QOS的特性,便产生了tc.

我们先看一个图:

QoS Handle Flow

关于tc的设计

递归控制 所谓的递归控制就是分层次地控制,而对于每个层次,控制方式都是一致的 Qdisc –class –filter 的树型组织模式.

qdisc 队列规则(queueing discipline)

用来实现控制网络的收发速度.通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 tcp)的前提下来平滑网络流量.需要注意的是,linux 对接收队列的控制不够好,所以我们一般只用发送队列,即”控发不控收”.它封装了其他两个主要 tc 组件(类和分类器).内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc 队列规则把数据包加入队列.然后,内核会尽可能多地从 qdisc里面取出数据包,把它们交给网络适配器驱动模块.

最简单的 QDisc 是 pfifo 它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列.不过,它会保存网络接口一时无法处理的数据包.常有的队列规则包括 FIFO 先进先出,RED 随机早期探测,SFQ 随机公平队列和令牌桶 Token Bucket,类基队列 CBQ,CBQ 是一种超级队列,即它能够包含其它队列,甚至其它 CBQ

Class 类

class 用来表示控制策略.很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了.

Filter 规则

filter 用来将用户划入到具体的控制策略中

目前,tc可以使用的过滤器有:fwmark分类器,u32 分类器,基于路由的分类器和 RSVP 分类器(分别用于IPV6、IPV4)等;其中,fwmark 分类器允许我们使用 Linux netfilter 代码选择流量,而 u32 分类器允许我们选择基于 ANY 头的流量 .需要注意的是,filter (过滤器)是在QDisc 内部,它们不能作为主体

关于tc的具体应用,我们以后分析.这里仅仅以理论作为引导让我们了解什么是QOS.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WSL2 使用usbipd工具 连接USB设备

Connect USB devices | Microsoft Learn 使用开源工具usbipd&#xff0c;可以让usb设备连接WSL https://github.com/dorssel/usbipd-win usbipd list 可以查看连接到win上的设备。 把USB设备从win转移到WSL需要执行下面两个指令。 usbipd bind --busid <BUSID> usb…

Shiro-721 分析

前言 shiro-550漏洞的产生源自硬编码问题&#xff0c;在 1.2.4之前&#xff0c;密钥在代码中是固定的 而在1.2.5 < Apache Shiro < 1.4.1&#xff0c;我们再看AbstractRememberMeManager类&#xff0c;已经修改为生成随机的密钥 在本篇文章中&#xff0c;分析着重于代…

电子电气架构---EEA的发展趋势

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

RPA自动化流程机器人在财税管理中的作用

随着科技的飞速发展&#xff0c;人工智能和自动化技术正在改变市场竞争的格局&#xff0c;企业对于提高工作效率和准确性的要求日益提高。财税管理作为企业运营管理的核心环节之一&#xff0c;其数字化程度决定了企业发展的速度、广度和深度。因此&#xff0c;财税数字化成为各…

transformer-explainer

安装和启动 找到这个项目&#xff0c;然后装好了。 这个项目的目的如名字。 https://github.com/poloclub/transformer-explainerTransformer Explained: Learn How LLM Transformer Models Work with Interactive Visualization - poloclub/transformer-explainerhttps:/…

【算法】蚁群算法

一、引言 蚁群算法&#xff08;Ant Colony Optimization, ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式搜索算法。它由Marco Dorigo于1992年提出&#xff0c;适用于解决组合优化问题&#xff0c;如旅行商问题&#xff08;TSP&#xff09;、车辆路径问题&#xff08;VRP&…

STM32初识

这边软件使用的是Keil5&#xff0c;主要介绍一下使用的一些注意事项。 创建工程部分&#xff1a; 创建工程方式有两种&#xff1a;使用Keil创建工程模板、 使用STM32CubeMX 新建一个工程 1.新建一个文件&#xff0c;添加文件&#xff1a; DOC工程说明 doc说明文档 Librarie…

联想集团2025届校招网申认知能力SHL测评深度解析

引言 随着联想集团校招季的到来&#xff0c;众多求职者正摩拳擦掌&#xff0c;准备在这场竞争激烈的选拔中脱颖而出。认知能力测评作为选拔过程中的重要环节&#xff0c;其重要性不言而喻。本文将对联想集团校招中使用的认知能力测评进行深度解析&#xff0c;为求职者提供全面而…

K8S - ConfigMap的简介和使用

什么是configMap Kubernetes中的ConfigMap 是用于存储非敏感数据的API对象&#xff0c;用于将配置数据与应用程序的镜像分离。ConfigMap可以包含键值对、文件或者环境变量等配置信息&#xff0c;应用程序可以通过挂载ConfigMap来访问其中的数据&#xff0c;从而实现应用配置的…

知识图谱构建实战:GraphRAG与Neo4j的结合之道

前言 我们在前面讲解 GraphRag 从原始文本中提取知识图谱和构建图结构的时候,最后存储的文件是parquet 格式,文件存储在下面文件夹: 这节我们就探索一下怎么将我们生成好的图谱文件导入到我们的 Neo4j 图数据库,最后进行可视化分析,也能和我们之前的项目混合检索结合起来…

Java Web|day7. Web会话跟踪(cookie与session)

Web会话跟踪(cookie与session) 会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。 cookie 定义 cookie是某些网站为了辨别用户身份&#xff0c;进行Session跟踪而储存在用户本地终端上的数据&#xff08;通常经过加密&am…

虹科应用|增强型以太网交换机:如何实现同IP控制的高效网络管理?

导读&#xff1a;车载以太网交换机的配置和管理是确保数据流高效、安全传输的关键。虹科增强型以太网交换机&#xff08;EES&#xff09;通过其先进的功能&#xff0c;为用户提供了一种灵活且高效的解决方案。 随着车载网络对带宽需求的不断提高&#xff0c;虹科Technica推出一…

第二届EI机器视觉、图像处理与影像技术国际会议将于9月13-15日召开

第二届机器视觉、图像处理与影像技术国际会议&#xff08;The 2nd International Conference on Machine Vision, Image Processing & Imaging Technology&#xff0c;简称MVIPIT&#xff09;将于2024年9月13日-15日在中国张家口举行。 MVIPIT 2024聚焦机器视觉、图像处理…

如何将 CICD 模版重构为 CICD component?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

MFC画图示意八皇后问题的含义

八皇后问题是C语言算法的一个经典例子; 它要求解的问题是, 以国际象棋为背景,有八个皇后(八个棋子),如何在 8*8 的棋盘中放置八个皇后,使得任意两个皇后都不在同一条横线、纵线或者斜线上。 根据资料,答案不止一个,共有92个;可以有92种摆法; 第一个答案应该是如…

小程序学习day08-导航传参、下拉刷新(移动端的专有名词)、上拉触底(移动端的专有名词)、自定义编译模式、生命周期

34、导航传参 &#xff08;1&#xff09;声明式导航传参 1&#xff09;Navigator组件的url属性用来指定将要跳转到页面的路径&#xff0c;同时&#xff0c;可以携带参数 2&#xff09;携带参数的要求 ①参数与路径之间用?分隔 ②参数键与参数值之间用相连 ③不同参数用&…

如何在手机版和网页版Facebook上更改名字(2024)

本文将详细介绍如何在Facebook上更改名字&#xff0c;包括手机和网页版Facebook的具体步骤&#xff0c;以及添加Facebook昵称的方法&#xff0c;并分享如何高效管理多个Facebook网页版账户。 Facebook怎么改名字 Facebook手机版改名 打开Facebook APP并登录账号。 点击右下角的…

TinTinLand Web3 + DePIN 共学月|深入探索 DePIN 项目,全景分析去中心化网络未来

「TinTinLand Web3 主题共学月」是由 TinTinLand 每月发起的主题学习活动&#xff0c;携手知名项目共同打造一个系统化、互动性强的学习平台&#xff0c;帮助开发者不断提升技能&#xff0c;紧跟 Web3 技术的前沿发展。活动通过演示视频、学习打卡、模拟环境、实际操作等多种方…

2024-08-16升级记录:使用Android RecyclerView控件显示列表型信息

在页面上使用RecyclerView实现一个列表型信息展示&#xff1a; 步骤如下&#xff1a; 一、在页面布局中添加RecyclerView控件 <TextViewandroid:id"id/txt_gnss_info"android:layout_width"match_parent"android:layout_height"wrap_content"…

学习node.js 二 path模块,os模块,process

目录 path模块 1. path.basename() 2. path.dirname 3. path.extname 4. path.join 5. path.resolve 6. path.parse path.format OS模块 1. 获取操作系统的一些信息 &#xff08;1&#xff09;os.platform() &#xff08;2)os.release &#xff08;3&#xff09;os.ho…