Qos的基本思想就是把数据分类,放在不同的队列中。
Qos的3种模型:尽最大努力服务,综合服务和区分服务。最大努力服务就是先到的数据先转发。综合服务的典型就是预留资源,在通信之前所有的路由器先协商好,为该数据流预先保留带宽出来。区分服务是比较现实的模型,该服务包含了一系列分类攻击和排队机制,为某些数据流提供比其他数据流优先级更高的服务。
区分服务:
1 优先级队列:PQ,有高,中,普通,低优先级4个队列。路由器会按照高中普通低顺序服务,只有高优先级的队列为空后才为中优先级队列服务,一次类推。缺点是可能高优先级一直不为空,低优先级队列永远不会被服务。每个队列有一个长度,队列满后,数据包会被丢弃。
2 自定义队列
CQ,在CQ中有16个队列。数据包根据事先的定义放在不同的队列中,路由器为第一个队列服务一定包数量或者字节数的数据包后,为第二个队列服务。可以定义不同队列的深度,这样可以保证某个队列被服务的数据包数量较多,优点就是不会是某个队列不会被服务。CQ队列0比较特殊,只有队列0为空了,才能为其他队列服务。
3 加权公平队列
WFQ,是低速链路上的默认设置。WFQ将数据包区分为不同的流,如,在IP中利用IP地址和端口号可以区分不同的TCP流或UDP流。WFQ为不同的流根据权重分配不同的带宽,权因子是IP数据包中的优先级字段。如3个流,流1优先级为0,流2优先级为0,流3为5,总权为1+1+1=8,前两个带宽为1/8,第三个为6/8。
4 基于类的加权公平队列
CBWFQ,允许用户自定义类别,并对这些类别的带宽进行控制。实际很有用,可以根据数据包的协议类型,ACL,IP优先级或者接口等条件事先定义好流量的类型,为不同类别的流量配置最大带宽和占用接口带宽的百分比等。
5 低延迟队列
LLQ,他的配置和CBWFQ类似。有些数据包如VOIP,对数据的延迟非常敏感,LLQ允许用户自定义数据类别,并优先让这些类别的数据传输,这些数据没传完前不会传输其他类别的数据。
6 加权随机早期检测
WRED:是RED的思科实现。保证链路的整天利用率。当带宽满时,RED随机的丢弃TCP数据包,保证链路的整天利用率,WRED,数据包根据IP优先级分成不同队列,每个队列有最小阀值和最大阀值,当队列长度小于最小阀值时,数据包不会丢弃;随着队列的增加,丢弃的概率呈线性增加,当队列长度等于最大阀值时,数据包按照设定的比率丢弃;当大于阀值,尾部的数据包全部丢弃。
7 CAR
承诺访问速率:是一种流量策略的分类和标记的方法,基于IP优先级,DSCP值,MAC地址或者访问控制列表来限制IP流量的速率。标记可以改变IP优先级或者DSCP。
CAR使用令牌桶的机制。如果一个接口有可以的令牌,令牌可以从令牌桶中挪走,数据包转发,时间间隔后,令牌重新添加到桶中。如果接口没有令牌了,那么会有对数据包行为的措施。CAR定义3中速率来定义流量的速率。
Normal Rate:正常的速率
Normal Burst:正常的突发
Excess Burst:过量突发
建议正常的突发是正常的1.5倍,过量速率是正常突发速率的2倍。
8 基于网络的应用识别
NBAR:实际上是一个分类引擎,它查看数据包,对数据包包含的信息进行分析。他使路由器不仅要做转发数据的工作,还要对数据包进行检查,会大大增加负载。
配置PQ
1 配置IP地址和路由协议
2 配置PQ
priority-list 1 protocol ip high tcp telnet
//创建一个优先级队列,标号1,把telnet流量放在高优先级队列中
priority-list 1 protocol ip high list 101
//把ACL101 定义的流量放在高优先级队列中
priority-list 1 protocol ip medium gt 1000
//把数据包大于1000字节的流量放在中优先级队列中
priority-list 1 interface g0/0 normal
//包g0/0接口收到的流量放在普通优先级队列中
priority-list 1 default low
//把其他流量放在低优先级队列中
access-list 101 ...
priority-list 1 queue-limit 20 30 40 50
//这个定义高,中..队列的长度,如果队列超过长度,数据包被丢弃。
int s0/0
priority-group 1
//把定义好的优先级队列应用在s0/0接口上
show int s0/0
//可以看到接口上的队列策略,标号为0之类的
show queueing priority
//查看队列的配置
debug priority
//测试队列是否生效,用ping联合使用
配置CQ
1 配置IP地址和路由协议
2 配置CQ
queue-list 1 protocol ip 1 tcp telnet
//创建一个自定义队列,标号为1,把telnet流量放在队列1中
queue-list 1 protocol ip 2 list 101
//把ACL 101 定义的流量防止队列2中
queue-list 1 protocol ip 3 gt 1000
//把数据包大于1000字节的流量放在队列3中
queue-list 1 default 4
//其他流量放在队列6中
queue-list 1 queue 2 limit 35
queue-list 1 queue 3 limit 30
//定义队列深度大小,也就是说为队列2服务35个数据包后,转向队列2
int s0/0
custom-queue-list 1
//把定义好的队列应用在接口上
show queueing priority
//查看队列配置情况
debug custom-queue
WFQ
配置基本网络然后配置WFQ
int s0/0
fair-queue 512 1024 10
//512是丢弃值,当队列达到512数据包时,数据将被丢弃;1024是最大的会话数;10是RSVP可预留队列
CBWFQ
1 配置基本网络
2 定义class-map
class-map match-any CLASS-MAP1
//定义了一个class-map,名为CLASS-MAP1,match-all:指明下面条件都需要满足;match-any:匹配一个条件就可以。
match protocol http
match protocol ftp
//匹配协议类型包括EGP,ICMP,EIGRP,DNS,HTTP和Telnet等
class-map match-all CLASS-MAP2
match protol telnet
//还可以匹配访问列表,match access-group 号;匹配CoS,match cos cos-value;匹配IP包中的CoS值;匹配IP优先级:match ip precedence precedence-value ;匹配DSCP值:match ip dscp dscp-value ; 匹配入接口:match input-interface type number 。
3 定义Policy-map
policy-map MY-POLICY
//定义Policy-map
4 配置带宽
class CLASS-MAP1
bandwidth 60
class CLASS-MAP2
bandwidth 10
//配置CLASS-MAP1流量带宽60kbps,CLASS-MAP2流量带宽10kbps。总带宽为128kbps。Bandwidth后面可以跟百分比
5 应用
int s0/0
service-policy output MY-POLICY
//把定义的策略应用在接口output方向上,CBWFQ只能在output方向。限制了telnet,http,ftp流量的带宽
show class-map
show policy-map