VLAN优先级+IP优先级+QoS+tc命令 一文全介绍

目录

前言

VLAN优先级

IP头TOS

IP头DSCP

QoS

Best-Effort模型

IntServ模型

DiffServ模型

QoS组件

流分类和标记

流量监管和整形

拥塞管理

拥塞避免

tc命令

简介

队列

案例

根据源IP分类限速

根据业务类型分类限速


前言

报文本身有优先级标识,如VLAN中有,IP头中也有。

设备发包时,就可根据业务类型给报文设置不同优先级。

设备接收时,Linux流控工具tc根据报文优先级,对报文分类,实现各种流控目标。

当然还可以根据五元组等多种信息来对报文分类。

QoS是一个流量控制技术集合,说明l流控目标,实现机制等。为各种具体实现起纲领性作用。

VLAN优先级

802.1P优先级,也叫CoS(Class of Service,服务等级)

即VLAN标签头中的TCI字段中的Priority。长度3bit,值范围0-7,值越大优先级越高。

IP头TOS

TOS:Type Of Service

IP头中有TOS段,长度8位

起初TOS定义为三部分:

        优先级(Precedence)

        服务类型(Type of Service): 

        未用位(Unused Bits)

优先级:前3位,7个等级,值越大优先级越高。

        0:Routine(普通)

        1:Priority(优先) 数据业务使用

        2:Immediate(快速) 数据业务使用

        3:Flash(闪速) 语音控制使用

        4:Flash Override(疾速) 视频流使用

        5:Critical(关键) 语音数据使用

        6:Internetwork Control(网间控制) 网络控制使用,如路由

        7:Network Control(网络控制) 网络控制使用,如路由

服务类型:后4位,表示数据包服务类型。

        

如:D最小延迟,T最大吞吐量,R最高可靠性

未使用位:最后1位。

IP头DSCP

由于IP TOS最多只能定义8种优先级,目前不够用,所以把TOS重新定义成DSCP。

DSCP(Differentiated Services Code Point,差分服务代码点)

DSCP:占用 6 bit,值范围是0到63。 值越大优先级越高。

DSCP表达方式有两种:

        数字形式:范围0-63

        PHB形式:BE、AF、EF、CS

PHB

PHB:(Per-hop Behavior,每跳行为):用四种PHB关键字来定义部分DSCP值

        CS:Class Selector,类选择器

        EF:Expedited Forwardin,加速转发

        AF:Assured Forwarding,确保转发

        BE:Best-Effort,尽力而为

PHB描述网络设备对具相同DSCP的分组采用的转发行为。

CS类

用于兼容IP TOS使用

后3bit位固定为0,前3bit表示优先级

CS                 TOS         DSCP数值

0(000 000)         0         0

1(001 000)         1         8

2(010 000)         2         16

3(011 000)         3         24

4(100 000)         4         32

5(101 000)         5         40

6(110 000)         6         48

7(111 000)         7         56

值越大,优先级越高

AF类

确保转发

前3bit表示优先级,后2bit位表示丢弃概率,最后1bit固定为0

如 100 010 == AF41

AF类                         DSCP

AF41(100 010)         34

AF42(100 100)         36

AF43(100 110)         38

AF31(011 010)         26

AF32(011 100)         28

AF33(011 110)         30

AF21(010 010)         18

AF22(010 100)         20

AF23(010 110)         22

AF11(001 010)         10

AF12(001 100)         12

AF13(001 110)         14

值越大,优先级越高

EF类

急速转发类

101 110

DSCP数值:46

可承载语音流量

BF类

默认转发类

000 000

DSCP值:0

一般没有标记的报文,不被信任的报文。

IP优先级和DSCP转换时,匹配最高3位,如IP优先级是5(101),映射到DSCP上是40(101000)。

上述四类PHB对应DSCP值均是值越大优先级越高。

QoS

QoS:Quality of Service,服务质量。

QoS RFC标准为操作系统具体实现提供了指导。

QoS不会增加网络带宽,而是利用现有网络资源,允许不同业务流量按配置的优先级,不平等的竞争网络资源。

网络质量指标:带宽、时延、抖动、丢包率。

QoS有三种服务模型:

        Best-Effort service

        Integrated service

        Differentiated service

Best-Effort模型

尽力而为服务模型。

最简单,最早的QoS服务模型。不提供任何保证。

IntServ模型

综合服务模型,1994年提出。

1. 发送端发送报文前,先通过RSVP(Resource Reservation Protocol)信令向网络申请资源。

2. 网络预留资源(如带宽、优先级)以承诺满足该请求。

3. 发送端收到确认预留资源信息后,开始发送报文。

缺点:

        1. 兼容性差,网络节点不一定支持该模型。

        2. 资源利用率低, 因为预留资源,可能不能充分利用带宽。

        3. 额外带宽占用,额外RSVP信令开销。

DiffServ模型

差分服务模型,提供有差别的服务,应用最广,是主要方案。

1998年提出。

原理:将网络流量分成多个类,不同类按不同优先级处理。

不需要信令,不需要预先预留资源。

DiffServ是一种基于报文流的QoS模型。

流分类和汇聚在网络边界路由器完成。边界路由器通过多种条件(如源地址、目的地址、ToS优先级、协议类型等)灵活对报文分类,并设置不同的标记,而其他路由器只简单识别标记,进行流量控制。

QoS组件

DiffServ模型有四个QoS组件:

        流分类和标记

        流量监管和整形

        拥塞管理

        拥塞避免

流分类和标记

流分类:将数据包分为不同类别,不修改数据包。

标记:将数据包设置为不同优先级,会修改数据包。

流分类依据:

        VLAN中优先级

        IP头的ToS域的前3位(即IP优先级)

        IP头的ToS域的前6位(DSCP)

        IP五元组等。

总之,流分类几乎可根据报文任何字段进行。

而流标记一般只对以太网帧的CoS域、IP报文的ToS域标记。

在边界路由器上,分类和标记举例:

        1)所有VoIP数据报文分为EF类,将报文IP优先级标记为5,或将DSCP值标记为EF

        2)所有VoIP控制报文分为AF业务类,将报文IP优先级标记为4,或将DSCP值标记为AF31

报文在路由器标记分类后,网络中间节点,根据标记,对不同类别的流量进行差别服务。

例如:

        对EF类业务保证时延和减少抖动,同时进行流量监管

        对AF类业务在网络拥塞时仍保证一定带宽。

流量监管和整形

当流量超过指定带宽时,丢弃或缓存超流量。

        流量监管:丢弃超出流量。

        流量整形:缓存超出流量。

拥塞管理

队列技术。网络拥塞时,将报文放入多个队列,按照各个队列的优先级转发

常用的队列技术有FIFO、PQ、CQ、WFQ、CBWFQ等

不同队列技术区别:

        队列数量

        入队策略

        队列调度方法

拥塞避免

发现拥塞有加剧趋势时主动丢弃报文

tc命令

简介

tc:traffic control,是iproute2包中内核流量控制工具。

tc既可处理传出流量(egress),也可处理传入流量(ingress),但对传入流处理功能较少。

通常用来处理传出流量(egress)。

即使网卡本身不支持多队列特性,仍然可用tc命令在网络协议栈软件层面模拟和管理队列。

因为tc不直接操作网卡硬件,而是在内核内实现队列调度。

Netfilter处理对象是packet。

TC处理对象是Traffic。

队列

这里的队列是内核协议栈队列,是具有调度策略的的队列,基于队列实现了流量控制。

注意这不是网卡内部的多队列技术。

不同队列的类型就决定了其流量调度方式。

发包时,内核尽可能多地从qdisc队列取出数据包,交给网卡发送。

tc队列分为两类

        无类别队列:classlesss qdisc

                对整个网卡流量进行整形,不能区分数据流来进行细分控制。

                功能简单,主要功能是排序、限速、丢包。

        有类别队列:classful qdisc

                对网卡流量进行分类到不同队列,不同队列有不同控制策略。

                还可进一步将qdisc中流量传递给其他qdisc,进行其他策略控制。

                举例:HTB(HierarchicaI Token Bucket)队列,使用最多。

有分类队列基本组成:

        类别(class):用于对流量分类,以便对每个分类应用不同的流控策略。

        过滤器(Filter):用于对流量过滤和选择,将流量定向到适当的class中处理。

        队列(qdisc):管理每个class中流量,每个class可配置不同类型qdisc,实现流量排队、调度和处理顺序。如HTB队列。

总结:过滤器(Filter)把报文分成不同类别(Class),放入不同队列调度器(qdisc)。

tc流量控制步骤:

        1. 为网卡在内核配置一个队列qdisc调度器。

        2. 创建流量类别(class),并attach到qdisc。

                用于说明流控目标,如限速10MBps

        3. 创建过滤器 filter,并attach到qdisc;

                用于匹配流量,将流量分发到不同class。

        匹配流量方式:可基于IP头优先级,基于源IP目的IP等。

案例

根据源IP分类限速

目标:对eth0报文,根据源IP不同对报文划分两个不同优先级。

两个不同优先级,所以创建两个对应分类class,并对它们分别应用不同的流控策略。

1. 创建Class(分类)

        创建两个分类,分别用于高优先级和低优先级流量。

        tc qdisc add dev eth0 root handle 1: htb default 10

        tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit

    

        tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit prio 1

        tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit prio 2

        

        class 1:10用于高优先级流量,1:20 用于低优先级流量。这两个class具有相同最高速率限制(50mbit),但是优先级不同。

2. 创建 Filter(过滤器)

        创建两个过滤器规则,根据源 IP或端口将流量分配到相应的class 中。

        tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.10 flowid 1:10

        tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip src 192.168.1.20 flowid 1:20

        

        创建两个过滤器规则,第一个规则将源 IP为192.168.1.10 的流量重定向到 class 1:10,第二个规则将源IP为 192.168.1.20 的流量重定向到 class 1:20。

3. 创建 Qdisc(队列调度器)

        为每个子class中配置一个队列调度器,以确定流量的排队和调度方式

        tc qdisc add dev eth0 parent 1:10 handle 10: pfifo

        tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10

    

        class 1:10 使用 pfifo 队列调度器(First In, First Out)。

        class 1:20 使用 sfq 队列调度器(Stochastic Fairness Queueing)。

根据业务类型分类限速

目标:对 HTTP 流量进行限速,限制其带宽。

        对 SSH 流量不进行限速,但优先处理。

1. 创建 Class(分类)

        tc qdisc add dev eth0 root handle 1: htb default 10

        # 创建 HTTP class,限速为1mbit

        tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit

        # 创建 SSH class,不限速

        tc class add dev eth0 parent 1: classid 1:2 htb

2. 创建 Filter(过滤器)

        # 将TCP 端口为80的流量重定向到 HTTP class

        tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:1

        # 将TCP 端口为22的流量重定向到 SSH class

        tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip sport 22 0xffff flowid 1:2

3. 创建 Qdisc(队列调度器):

        # 为 HTTP class 创建 FIFO 队列

        tc qdisc add dev eth0 parent 1:1 handle 10: pfifo

   

     # 为 SSH class 创建 SFQ 队列

        tc qdisc add dev eth0 parent 1:2 handle 20: sfq perturb 10

        SSH流量没有被限速,放入SFQ(Stochastic Fairness Queueing)队列中,公平调度。

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山下小童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值