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成长之路 — 梅利