队列技术
数率不匹配
聚合多对一接口
software queuing(软件队列):使用cpu调度
hardware queue(硬件队列:从硬件接口发出去
组建:
1分类classification:打了优先级的做分类。根据类去排队。
2加队技术insertion policy:停车位有多少个。每种q的停车位不一样,当超过停车位丢弃。丢弃的技术默认叫做尾丢弃。
3调度策略service policy:那种车先出去,每种q调度技术不一样。
fifo(先进先出队列)
不用分类,就一个队列,强不到车位就尾丢弃。
开启的接口
接口的带宽大于2.048mbps都是先进先出,
bandwidth>e1 fifo
bandwidtch<=e1 wfq
配置:
router(config-if)#no fair-queue(关闭公平队列就是fifo)
默认先进先出可以缓存40个包。
router(config-if)#hold-queue <buffers> out (设置座位号多少个)
入口缓存默认75个包,出口默认40个包。
优缺点
1.简单快速
2.支持所有的平台
3.支持所有的路由器交换机ios版本。
4.没有办法公平的分配带宽。
5.会饿死一些小包
6.抖动
pq(优先队列)
如果执行了pq可以划分4个类:lligh、medium、normal、low。总共4个队,强不到座位的就尾丢弃。优先调度,只要一直有流量,往往会饿死其他优先级的。默认都在normal中。
分类:
1根据接口
2根据包的大小
3协议号
4tcp 源和目标
5udp 源和目标
配置命令
router(config)#
priority-list list-number protocol protocol-name {high | medium|normal|low} queue-keyword keyword-value
r1:
priority-list 1 protocol ip high tcp telnet (pq分类命令)
priority-list 1 protocol ip low list 100
access-list 100 permit icmp any any
int s0/1
priority-group 1(调用)
show int s0/1(查看接口信息)
high:20座位号,medium:40座位号,normal:60座位号,low:80座位号
show queueing priority(查看接口定义的队列)
debug priority (调试pq)
ping 13.1.1.3
telnet 13.1.1.3(可以看到设置的队列分类)
扩展
router(config)#priority-list list-number interface intf {high|medim|normal|low}(基于接口incoming interface)
router(config)#
priority-list list-number default {high |medium |normal|low}(基于没有定义的流量放进那个队列中)
router(config)#
priority-list list-number queue-limit high medium normal low(设置座位可以缓存多少包,默认20,40,60,80)
router(config-if)#
priority-group list
high:0/22/0 (大小,座位号,丢弃多少包)
例子:
interface s0
priority-group 1
priority-list 1 protocol ip high list 101
priority-list 1 interface e0 medium
priority-list 1 default normal
priority-list 1 queue-limit 20 40 60 80
access-list 101 permit tcp any any eq 23
show int s0
show queueing priority
pq优缺点
1完全能保证低延迟的流量
2支持多大数平台
3支持所有的版本
4所有的流量只能分4类,在每个队列中还是先进先出的。
5高级流量一直有流量其他队列会饿死
6每一跳都得配置。
cq(用户队列)
分类16+1个类,16个队列,强不到座位尾丢弃,调度轮询调度,默认每个队列传1500byte.
分类:
1基于接口
2包的大小
3协议
4tcp源目标端口
5udp源目标端口
配置:
router(config)#queue-list list-number protocol protocol-name queue-number queue-keyword keyword-value
router(config)#
queue-list list-number interface incoming-intf queue-number
r1:
queue-list 1 protocol ip 2 tcp telnet(分类命令)
queue-list 1 protocol ip 3 list 100
access-list 100 permit icmp any any
int s0/1
custom-queue-list 1(调用)
show int s0/1
座位号默认都是缓存20个包
show queueing custom(查看定义的队列)
扩展命令:
router(config)#
queue-list list-number default queue-number
router(config-if)#
custom-queue list-number
router(config)#
queue-list list queue queue-number byte-count bc(设置多少字节,默认1500bytes)
router(config)#
queue-list list queue queue-number limit limit
r1:
queue-list 1 queue 2 byte-count 3000(设置第二个队列传输3000字节)
queue-list 1 queue 2 limit 40 (设置座位号为40个包)
show queueing custom
队列0:系统队列,真实的数据流量都在1-16队列,0控制层面的队列。队列0属于pq,有系统队列一直先走。其他1-16属于cq进行轮询。
router(config)#
queue-list list-number lowest-custom queue-number(把一些流量定义为何0队列一样使用pq方式)
r1:
queue-list 1 lowest-custom 2例:
interface s1/0
custom-queue-list 5
queue-list 5 protocol ip 1 list 101
queue-list 5 queue 1 limit 40
queue-list 5 lowest-custom 2
queue-list 5 interface e0/0 2
queue-list 5 queue 2 byte-count 3000
queue-list 5 protocol ip 3
queue-list 5 queue 3 byte-count 5000
queue-list 5 default 4
access-list 101 permit ip any any precedence 5
show int s1/0
show queueing custom
优缺点:
1由于是轮询的基本上可以保证每种流量都可以走一点。防止其他刘来那个饿死。
2支持众多平台和ios
3每个队列里面还是先进先出的。
4必须在每台路由器上都去配置
5不能完全保证语音流量的延迟和抖动,不能设定带宽。
wfq(加权公平队列)
默认应用在小于等于2.048的接口,低速链路。基于不同的优先级做相应的动作。它不叫分类叫分流,class手工定义,flow自动分好了,wfq叫做fbwfq,能分n个流。
6源组,一个ip包,第一个包和第二个包这6个值相同就属于同一个流,所有的值做hash,默认N=256q。
分类:固定的分流
hash
多个不同的flow有可能映射到同一个flow中,导致那一个队列的带宽比较拥塞。
系统的包额外有8个队列。控制层面
集中式队列的流。
加队以及丢弃技术:
cdt:座位号的下限,默认有固定的值,假设cdt=8,数据包的number大于了cdt,第一种情况,如果是最长队列的包,执行丢弃。如果报的个数大于cdt,但加入的不是最长队列,就加入。
hqo:座位号的上限,假设hqo=10,数据包的number大于hqo,如果是加入最长队列,直接丢弃,如果数据包的number大于hqo,如果假如的不是最长队列,把最长队列的包丢弃,它加入到短的队列。
队列不要太长,每个队列数据包比较平均。
wfq的丢弃技术,
调度finish time
finish time=包的大小/(优先级+1)
finish time小的先走
配置命令:
router(config-intf)#fair-queue [cdt [dynamic-queues [reservable-queues]]]
默认串口已经是wfq。
r1:
int s0/0
fair-queue
show int s0
默认256个分流,cdt下限64,hqo上限1000,
fair-queue 66(cdt下限默认64) 512(动态q个个数默认256)5(保留队列默认是0)
show queueing fair(查看wfq的队列分类)
r1:
int s0/0
hold-queue 2000 out (公用的设置座位号默认1000hqo)扩展:
r1:
int s0/1
ip rsvp bandwidth (启用rsvp需要wfq预留一定的保留队列)show run(查看)
优缺点
1.简单配置,分类不需要手工配置,针对优先级高的自动做了优先
2基本能够保证所有流的发送,体现出公平
3不会导致其他包的丢失
4支持大多数平台
5支持多数ios
6在一个队列中它还是先进先出的。
7多个流有可能到达一个queue中。
8不支持手工分类
9不能针对某一种流量给他强制设定多少带宽。
10性能限制队列复杂的调度机制
llq(低延迟队列)
llq=pq+wfq
实现机制
ip rtp prioritization
只能抓udp的端口号
语音流量不是直接封装进udp,rtp是为了解决udp的无序性。偶数是控制,基数是数据包,端口号16384-32767,默认优先级为5。
实现机制
接口必须先是wfq,
配置命令
router(config-if)#
ip rtp priority starting-port port-range bandwidth
router(config-if)#
max-reserved-bandwidth percent
配置
r1:
int s0/0
ip rtp priority 16384 16383(语音流量端口)100(预留带宽)
可用带宽
BWavail(可用带宽)=BW(接口总带宽)*0.75-BWrtp(rtp预留带宽)
r1:
int s0/0
max-reserved-bandwidth 100(设置接口带宽的100%默认75%)
cbwfq(基于模块化的mqc)
机制
可以手工分类
原则
64+1个class每个类有一个队列,每个队列后面也是尾丢弃,针对分类还可以做wfq,只有class default可以更改队列机制,其他不能更改,针对每个队列设定多少带宽,轮询来走。
例子:
语音 50%带宽,www 20%带宽 other 30%带宽。
r1:
class-map voip
match ip rtp 16384 16383
class-map www
match protocol http
policy-map cbwfq
class voip
bandwidth percent 50
class www
bandwidth percent 20
class class-default
bandwidth percent 30
int s0/0
service-policy output cbwfq
ip cef
int s0/0
ip nbar protocol-discovery
service-policy output cbwfq
max-reserved-bandwidth 100cbwfq配置命令
router(config-pmap-c)#
bandwidth bandwidth(强制设定一个值)
router(config-pmap-c)#
bandwidth percent percent(百分比带宽)
router(config-pmap-c)#
bandwidth remaining percent percent(剩下的带宽)
router(config-pmap-c)#
queue-limit queue-limit (缓存多少个包)
router(config-pmap-c)#
fair-queue [dynamic-queues](默认的设置为wfq)
在class-default可以把它设定为wfq的队列
r1:
policy-map
class class-default
fair-queue
queue-limit 128(默认缓存64个包)
例1:
policy-map policy1
class class1
bandwidth 2000
class class2
bandwidth 2000
interface f0/0
ip add 10.1.1.1 255.255.255.0
duplex auto
speed 10
max-reserved-bandwidth 80
service-policy output policy1
ip rtp priority 16384 16383 1000
BWavail=10000kbps*80%-(2000+2000+1000)kbps=3000kbps
show policy-map interface [intf]
router#
show queueing fair
优缺点
1手工定义,
2可以指定每个接口带宽消耗
3还是轮询的。针对语音流量不能作为完全保证。
cbllq
强制某一个类先走,保证固定带宽,延迟降低,监管。
架构:
cbwfq其中一类做成pq。
配置命令
router(config-pmap-c)#
priority bandwidth [burst]
router(config-pmap-c)#
priority percent percentage [burst]
r1:
policy-map cbwfq
class voip
priority percent 50(强制50%)
show policy-map int s0/0
router#show policy-map interface interface
拥塞避免
解决尾丢弃,
导致问题
1tcp 同步
2tcp 饿死
tcp slow start(tcp的慢启动)
导致影响
wred(在没有达到最大就把包丢了给予优先级)
red(随即早起检测,不能给予优先级来做)
机制
最小阀值32,最大阀值40,出口可以缓存多少个包,默认在32-40之间。在32之内说明是没有拥塞的,不会丢弃,如果32-40之间就会出现随即丢弃,概率是10%,大于40肯定会丢,
现在的版本不会起red,都是wred
wred
默认识别ip precedence
可以修改为dscp
根据不同的级别把丢弃阀值设置的不同。
工作过程:
过来一个包首先检查优先级和dscp位,检测完以后看这个阀值是否在最大和最小之间,以及丢弃的可能性是多少,实行随即丢弃或尾丢弃。
配置
int s0/0
random-detect
show queueing random-detect
int s0/0
random-detect precedence 5 32 41 20 (把优先级为5的最小阀值设置32,组大41,丢弃概率为20包丢1个)
show queueing random-detect
fb wred(基于udp or ip的尾丢弃)
配置命令
router(config-if)#
random-detect flow
r1:
int s0/0
random-detect flow
show queueing random-detect
random-detect dscp-based(基于dscp的)
show queueing random-detect
cb wred(每个类做)
router(config-pmap-c)#
random-detect
例1:
policy-map policy1
class mission-critioal
bandwidth percent 30
random-detect
class transactional
bandwidth percent 20
random-detect
class class-default
fair-queue
random-detect
例2:
class-map mission-critical
match ip precedence 3 4
class-map bulk
match ip precedence 1 2
policy-map policy1
class mission-critical
bandwidth percent 30
random-detect
random-detect precedence 3 26 40 10
random-detect precedence 4 20 40 10
class bulk
bandwidth percent 20
random-detect
random-detect precedence 1 22 36 10
random-detect precedence 2 34 36 10
class class-default
fair-queue
random-detect