Qos-3-队列

Qos-3-队列

QOS的队列技术

没有分类和标记,就没有区分, 何谈队列呢~

队列的策略一定是应用在出接口方向的

 

QOS队列类型

 FIFO/FBWFQ  

 LLQ

 CBWFQ/CBLLQ

 

1 队列是为了解决发生拥塞时在缓冲区域存储多余的数据包,直到带宽可用

2 队列是一种调度机制,允许你控制拥塞的端口

 

队列又为分两种

硬件队列:

这一般由设备自己定义的,比如说出接口有100M,那么此时如果有500M的数据要发,就意味着有400M的数据要排队,而这100M就是我的硬件队列,显然,硬件队列我们无权干涉

软件队列:

你可以理解为是一个容器buffer  ,硬件队列满的时候,会放在软件队列中,可以通过队列控制,(我们做QOS的队列部署,最终也只能动软件队列)

 

队列的分类

FIFO(B>E1的默认队列)E1=2M,B=实际带宽 , 所有的路由器在没有做QOS时,都是这样的

  队列:只有一队

  加队,每一个队列能停多少个包,默认40个,,丢弃技术
,尾丢弃

  调度,FCFS,firtst come first services

那一个队列里面怎么调试呢?那就是谁先来谁先走,

 

可以通过查看接口看到,

0/40 个,这个队列最多40个

 

 

优点:是一个公平的机制

缺点:太过于公平,某些重要的流量也会被拥塞

就好比是一些管理流量,肯定要比FTP这些要重要,比如路由协议的流量肯定要优于普通流量,如果路由协议的流量都拥塞了,那咋办?

 

WFQ,

(B<=E1的默认队列)bandwith
小于2M

(直接上一个S接口就能看到不一样的,不再是fifo)

队列:基于FLOW (FBWFQ)256+8(控制层) 基于流的分类, 可以分256个流,

就两台主机而言,通信的流,也不只有256个,因为协议,端口号不同

其实255个是按照6元组来定,其它的定义不了,怎么办呢?—+8个类,被预留的,给控制层用的。OSPF,ipsec 等等.

加队,宏观自动调控, RED丢弃(有多少个停车位呢?没有固定大小)

根据权重来自动调控,根据三层报头ip presendens 以及DSCP来判断流的优先级,高级别的会分配更多的停车位,

丢弃,RED

随机早期检测,还没有满就开始丢弃了,假设最多可以停放40辆车,停到了30辆的时候 把里面的车往外赶,新发进来的 我还要。所以你会发现,使用FWQ这种队列,你永远喂不饱。

调度,  FT finish time=包大小/
(ipp+1)

IPP 是ip predencens

等于也就是说数据包越小,FT就越小

当然可以通过修改ip predencens 来修改它的FT,因为数据包的大小你没有办法控制,关键不是你发的啊~

所以,WFQ会把数据包小的,优先及高的,会优先发送出去(想一下救援的时候为什么先救小孩,女人。)。典型的语音流量,所以在S口上会默认将语音优先调度,(默认情况下)这也是没有办法的办法,因为实际带宽就那么点。

 

FLOW6元组 S/D/P/TOS/SP/DP(一个数据包只要满足这些条件,那就认为这是一个流)

源ip ,目的ip , protocol协议号,tos,qos标记,SP源端口,DP目标端口,

 

优点 ,相对平缓,并且不用人为干预

缺点,带宽太小,早就已经被淘汰了,

 

CBFWQ

分类

 基于类(CBWFQ)64+1deault-class(没有提到的其它流量会放在这里)

 C= class

这个类是由人为确定的,在类里面再分流,这样会更加的合理,更加精细的控制

每一个类里面又可以分256+8个流

什么叫做类啊?就好比你写了一个具体的ACL,然后用CLASS-map去匹配,这就叫一个类,

而FBFWQ,是没有定义的,全部则自己去判断6元组,换句话说,只要是你定义了具体的明细,就说明你在配置一个CBWFQ

 

 

CBWFQ 和FBWFQ的区别   
拿分红来举个例子,公司总分红10万
FBFWQ,是按照个人贡献来进行划分,如销售经理今年干的不错,贡献很大,给4万,
,技术主管很辛苦,给4万,保洁阿姨今年很辛苦,给2万

而CBFWQ则不同, 它会根据不同的部门来进行分类 , 销售部今天不错,给4万,技术部很辛苦给4万,保洁部给2万, 剩下的再则部门自己去处理, 如销售部,经理最辛苦,拿了3万,剩下的1万由部门里面的10个人来分,

加队

宏观自动调控 , RED丢弃

调度

根据权重

为每个类保证 bandwith(权重)带宽(不是真正的带宽)

学了这么长时间网络 ,

Bandwith只有两个作用,

 其一,为了OSPF,EIGRP等路由协议进行COST计算选路用的

 其二,就是在这里,CBWFQ,用bandwith 来确定分多少比例的资源给一个类,,仅仅是一个比例,并不是实际的带宽

配置方法

R1(config)#class-map aa
R1(config)#policy-map bb
R1(config-pmap)#class aa
R1(config-pmap-c)#bandwidth ?
  <8-2000000>  Kilo Bits per second   //设置具体的值
  percent      % of total Bandwidth    //设置占用总带宽的百分比
  remaining    % of the remaining bandwidth  //默认可用带宽的百分比为75,
(一个接口如果是100m,那么可用带宽为75%,如果加上了remaining之后就会30*75%)

优点:可以自定义分类,最小带宽分配,可以更细

缺点:使用WFQ自己算,视频,语音仍然可以遭受不可接受的延迟

 

有分类的走分类,没有分类的最终走class-default,有可能语音流量也在class-default 中,所以有可能会有延迟

 

CBWFQ 和FBWFQ 一样,只能应用在出方向

可以在出接口带宽拥塞的情况保证最小带宽的权重(bandwith,),

出接口带宽有多余的情况 ,各个定义的类按照最小保证带宽比例比来占用多余的带宽

 

如果出现拥塞,始终不可能超过我所配置的预留带宽,

如果不拥塞的的话,完全不会考虑预留带宽,

通俗一点,就好比是高速公路的应急车道,在不堵车的情况下,急救车辆可以走正常的车道也可以走应急,但是当堵车的时候,急救车辆就只能走应急车道了。

 

CBWFQ其它参数修改

1 default-class 是系统保留的为其它所有数据的分类

2 default-class 默认是fifo的队列,只可以修改为wfq的队列

3 default-class 因为是系统保留的类,所以匹配的是any

4 queue-limit x 配置子队列中最大可容纳的包数量,默认是64个包,注意是包数量 而不是包大小

5 想配置的子类数量,注意只能在class-default中修改 默认是256个,fair-queue 128

6 修改CBWFQ可用带宽的百分比,默认是75% ,(config-if)#max-reserved-bandwith 100

 

 

CBWFQ实验

 

R1
policy-map 80
 class 80
  bandwidth percent 10
 class class-default
  fair-queue     //class-default 使用公平队列
 service-policy output 80
Extended IP access list 100
    10 permit tcp host 1.1.1.1 host 2.2.2.2 eq www (10 matches)

R2我就不配置了,一样道理,只要明白就好。

 

 

 

LLQ

低优先级队列

LLQ=PQ+FBWFQ

分类:区分过来的流量

加队:依靠FBWFQ

调度:FBWFQ

PQ,P priority 优先级队列 就是VIP,只要这个队列里有流量,其它人都得等,是预留的,

根据bandwith权重去进行计算,

 

它的关键字和CBWFQ不同,CBWFQ是bandwith ,而LLQ 是priority

R1(config)#class-map aa
R1(config)#policy-map bb
R1(config-pmap)#class aa
R1(config-pmap-c)#priority ?    //还是权重,不是实际的流量,只要是用到了PRIORITY ,就是LLQ
  <8-2000000>  Kilo Bits per second
  percent      % of total bandwidth

这么说,如果设置了priority为30%,总带宽100M,意味着网络拥塞情况下,A-B的类只要有流量存在,30%的流量就是留给它的,

如果有拥塞了,这里所配置的流量将会优先转发,

 

CBLLQ

CBLLQ=PQ+CBWFQ

基于类的低优先级队列    //又是类,所以只要是看到有创建类的话,就一定用的是CB开头的 再往后看,只要是看到bandwith 就是CBWFQ,只要看到是Priority就是CBLLQ

保证了特定流量的优先转发发,其它的流量则使用CBWFQ转发

列表概览

队列

分类

加队/丢弃

调度

备注

FIFO(默认)

没有分类

就一个队列,先来先走40个位置,尾丢

先入先出

带宽>E1是fifo

<E1是WFQ

FBWFQ(默认)基于流的

 

 

Flow-FBWFQ(256+8)

 

 

 

 

宏观自动调控/RED丢弃,(随机早期检测)

 

Finish timer(包大小除以ip precedence+1)

Flow 6元组

S/D/P/TOS/SP/DP

LLQ低优先级队列

 

Priority 分配权重,WFQ调度

PQ+WFQ,为语音流量的设置

CBWFQ 基于类的

 

 

 

64+1default class

 

Bandwith 权重

CBWFQ调度

Flow 6元组

S/D/P/TOS/SP/DP

CBLLQ基于类的低优先级队列

 

Priority 分配权重,CBWFQ调度

PQ+CBWFQ

 

所有的有关于QOS的配置,可以通过一条命令来查看

Show policy-map interface Xx/x

如果阶段性的看结果中有数据包变化,就证明被匹配上了,并且证明你的网络已经产生了拥塞

 

个人观点

在配置中如何快速识别这是一个什么队列呢?

1 查关键字,fifo,就不用说了,默认的,

2 bandwith,想都不要想,肯定是WFQ,那是哪种WFQ呢?是FBWFQ,还是CBWFQ呢?这就要看有没有定义类,有没有access/nbar,有没有前期定义的分类和标记,如果没有,就是FBWFQ,如果有,那就是CBWFQ,,这一点又是如何区分的呢?看class-map 的match动作,如果是match-all的话,通常就是有定义类

Match-any的话,通常就是没有定义类,

因为all 和any有着本质的区别,all是所有条件必须同时满足,any 是没有匹配或其中一个或都行。

3 priority 当看到这个的时候,首先确认这是一个LLQ,哪种LLQ呢?还是要看具体的类,有类的就是CBLLQ ,无类的就是LLQ

 

分类-标记-队列实验

 

需求,

1\1.1.1.1—2.2.2.2的telnet 流量标记为DSCP 33,并且针对于该流量配置bandwith 为1000

2\1.1.1.1—2.2.2.2的icmp流量标记为precedence 6 并且针对于该流量配置priority 20%,设置默认百分比为100%

3\其它流量配置公平队列

 

无奈啊,我的笔记本屏幕不够高,所以只能使用复制了,还是喜欢切图

配置部份

R1(config)#access-list 100 per tcp host 1.1.1.1 host 2.2.2.2 eq 23
R1(config)#access-list 101 per icmp host 1.1.1.1 host 2.2.2.2   //ACL分类流量

R1(config)#class-map telnet     CLASS匹配ACL,方便用面策略调用
R1(config-cmap)#ma access-group 100

R1(config)#class-map icmp
R1(config-cmap)#ma access-group 101

R1(config-pmap)#policy-map r1
R1(config-pmap)#class telnet
R1(config-pmap-c)#set ip dscp 33    //标记
R1(config-pmap-c)#bandwidth 1000  //设置队列权重,看到bandwith想到了什么?
R1(config-pmap-c)#exit
 
R1(config-pmap)#class icmp
R1(config-pmap-c)#set ip precedence 6   //标记
R1(config-pmap-c)#priority percent 20  //设置百分比为20%,看到priority想到了什么?
R1(config-pmap-c)#exit

R1(config-pmap)#class class-default 
R1(config-pmap-c)#fair-queue    //使用公平调度
R1(config-pmap)#inter f0/0
R1(config-if)#max-reserved-bandwidth 100   //修改接口默认的带宽比例
R1(config-if)#service-policy output r1    //最终接口调用

验证查看部份

R1#show policy-map inter f0/0
 FastEthernet0/0
  Service-policy output: r1      //最终接口调用,services-policy (只能是出方向)
 
   Class-map: icmp (match-all)    //CBWFQ
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group 101
      QoS Set
        precedence 6
          Packets marked 0
      Queueing
        Strict Priority           //CBLLQ
        Output Queue: Conversation 264
        Bandwidth 20 (%)
        Bandwidth 2000 (kbps) Burst 50000 (Bytes)
        (pkts matched/bytes matched) 0/0
        (total drops/bytes drops) 0/0
 
    Class-map: telnet (match-all)     //CBWFQ
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group 100
      QoS Set
        dscp 33
          Packets marked 0
      Queueing
        Output Queue: Conversation 265
        Bandwidth 1000 (kbps)Max Threshold 64 (packets)
        (pkts matched/bytes matched) 0/0
        (depth/total drops/no-buffer drops) 0/0/0
 
    Class-map: class-default (match-any)    //defau-class
      1 packets, 60 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any
      Queueing
        Flow Based Fair Queueing
        Maximum Number of Hashed Queues 256
        (total queued/total drops/no-buffer drops) 0/0/0

 

 

——————————————————

CCIE成长之路 — 梅利 

 

版权声明:本文为meili333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/meili333/p/14100947.html