随着时间的推移,人们对网络的依赖性越来越强,网络带宽也在不断的发展,但始终跟不上人们的需求,常常出现网络堵塞情况,在这样的一种网络面临瘫痪的格局下,QOS诞生。从此,网络堵塞问题得到一定的解决,但始终代替不了带宽的升级。它只能起到暂缓,同时也规定了数据传输的优先级。下面我来介绍QOS的几种模型
1 尽最大努力服务
          没有任何条件限制,先到先得,先到先传输
2 综合服务
          预留网络资源,所有路由器在通信前协商好,为某一数据流预先保留一定的带宽
3 区分服务
          根据现状,设定数据的优先级,通过一系列分类工具和排队机制,给数据流指定优先级别
目前,我们使用的QOS为区分服务模型,主要分为以下几种
      优先级队列:(priority queue)有高、中、普通、低四个优先级队列,数据包根据事先定义的优先级放在不同的队列中,路由器按照高、中、普通、低服务顺序,只有高优先级队列为空时,才为中优先级的队列服务,依次类推,如果高优先级一直不为空,则其他优先级的队列永远不被服务,这时,我们就可以设置队列的长度,队列满后,数据包将被丢弃,为下一个队列服务
      自定义队列:(custom queue)在CQ中有16个队列,数据包根据定义放在不同的队列中,路由器将为第一个队列服务一定的数据包后转为第二个队列服务,依次类推,其中有一个特殊队列,0队列为空时,才能为其他队列服务
      加权公平队列:(weight fair queue)是低速链路上的默认设置,WFQ将数据包区分为不同的流,如在ip中利用ip地址和端口号区分不同的tcp和udp流,wfq为不同的流根据不同的权重分配不同的带宽,权因子是ip数据包中优先级字段
      基于类的加权公平队列:(class based weight fair queue)允许用户自定义类别,并对这些类别的带宽进行控制,这个在实际中用的是最广的。很对网络限速软件都是基于加权公平队列的限制。如我们对网络访问internet时web流量的带宽限制。对协议类型、ACL 、等
      低延迟队列:(low latency queue)和cbwfq类似,对数据包的延迟非常敏感,允许用户自定义数据类型,并优先传输这些类别的数据,在这些数据没有传输完之前将不会传输其他的数据,如voip数据包
      加权随机早期检测:(weight random early detect)是red的cisco实现,当过个tcp来南京在传输数据时,全部连接度案子最大能力传输数据,很快队列满,对流满后的全部数据被丢弃,这时所有发送者以最小带宽发送,带宽开始空闲,接着发送者开始慢慢加大速度,于是有同时达到最大速率,又出现了堵塞,如此反复,对带宽的利用率不高
     承诺访问速率(Commited Access Rate)是一种流量策略的分类和标记的方法,
它基于IP 优先级、DSCP 值、MAC 地址或者访问控制列表来限制IP 流量的速率。标记则可以
改变IP 优先级或者DSCP。
CAR 使用令牌桶的机制,检查令牌桶中是否有足够的令牌。如果一个接口有可用的令牌,
令牌可以从令牌桶中挪走,数据包被转发,当这个时间间隔过去后,令牌会重新添加到令牌
桶中。如果接口没有可用的令牌,那么CAR 可以定义对数据包采取的行为。CAR 使用3 种速
率定义来定义流量的速率:
   Normal rate(正常的速率):令牌被添加到令牌桶中的平均速率,就是数据包的平均
传输速率。
   Normal burst(正常的突发):正常的突发时在时间间隔内允许正常流量速率的流量。
   Excess burst(过量突发):超过正常突发的流量。当配置过量突发时,会借令牌并且
将它添加到令牌桶中来允许某种程度的流量突发。当被借的令牌已经使用后在这个接口
上收到的任何超出的流量会被扔掉。流量突发只会发生在短时间内,直到令牌桶中没有
令牌存在才停止传输。
通常建议正常的流量速率配置为等于在一段时间内的平均流量速率。正常的突发速率应
当等于正常速率的1.5 倍。过量速率是正常突发速率的2 倍。
      基于网络的应用识别(Network Based Application Recognition)实际上一个
分类引擎,它查看数据包,对数据包包含的信息进行分析。NBAR 使得路由器不仅要做转发
数据的工作,还要对数据包进行检查,这样会大大增加负载。NBAR 可以检查应用层的内容,
例如可以检查URL 是否有“.java”字样。NBAR 可以和许多QOS 配合使用。
以下几个实验全部使用这个拓扑图
1
实验1
1 实验步骤
(1) 步骤1:配置IP 地址、配置路由协议
2
(2) 步骤2:配置PQ
R1(config)#priority-list 1 protocol ip high tcp telnet
         创建1 个优先级队列,标号为1。把telnet 流量放在高优先级队列中
R1(config)#priority-list 1 protocol ip high list 101
         把ACL 101 定义的流量也放在高优先级队列中
R1(config)#priority-list 1 protocol ip medium gt 1000
        把数据包大小大于1000 字节的流量放在中优先级队列中
R1(config)#priority-list 1 interface e1/0 normal
        把从e1/0 接口接收到流量放在普通优先级队列中
R1(config)#priority-list 1 default low
        把其他的流量放在低优先级队列中
R1(config)#access-list 101 permit ip host 192.168.1.2 any
         定义ACL 101
R1(config)#priority-list 1 queue-limit 20 30 40 50
         定义优先级队列高、中、普通、低队列中的长度,如果队列超过这些长度,数据包将被丢弃。
R1(config)#int s0/0
R1(config-if)#priority-group 1
        把定义好的优先级队列应用在s0/0 接口上
3
2 实验调试
(1) 检查接口上的队列
R1#show interfaces s0/0
4
(2) 查看队列的配置
R1#show queueing priority
5
(3) 测试队列是否生效
在PC1 ping pc2 的192.168.2.2,然后:
R1#debug priority
6
 实验2
1. 实验步骤
(1) 步骤1:配置IP 地址、配置路由协议
(2) 步骤2:配置CQ
R1(config)#queue-list 1 protocol ip 1 tcp telnet
          创建1 个自定义队列,标号为1。把telnet 流量放在队列1 中
R1(config)#queue-list 1 protocol ip 2 list 101
         把ACL 101 定义的流量放在队列2 中
R1(config)#queue-list 1 protocol ip 3 gt 1000
          把数据包大小大于1000 字节的流量放在队列3 中
R1(config)#queue-list 1 interface e1/0 5
          把从e1/0 接口接收到流量放在普通优先级队列5 中
R1(config)#queue-list 1 default 6
          把其他的流量放在队列6 中
R1(config)#access-list 101 permit ip host 192.168.1.2 any
         定义ACL 101
R1(config)#queue-list 1 queue 1 limit 40
        定义队列1 的深度为40,也就是说路由器将为队列1 服务40 个数据包后,转向队列2 的服务
R1(config)#queue-list 1 queue 2 limit 35
R1(config)#queue-list 1 queue 3 limit 30
R1(config)#queue-list 1 queue 5 limit 25
R1(config)#int s0/0
R1(config-if)#custom-queue-list 1
        把定义好的自定义队列应用在s0/0 接口上
7
2 实验调试
(1) 检查接口上的队列
R1#show interfaces s0/0
8
(2) 查看队列配置情况
R1#show queueing priority
(3) 测试队列是否生效
R1#debug custom-queue
 实验3
1实验步骤
(1) 步骤1:配置IP 地址、配置路由协议
(2) 步骤2:配置WFQ
R1(config)#int s0/0
R1(config-if)# fair-queue 512 1024 10
       在接口上启用WFQ,实际上在E1 速(2.048M)或者更低速率的链路上,WFQ 是默认启用的。512 是丢弃值,当队列达到512 数据包时,数据将被丢弃;1024 是最大的会话数;10 是RSVP 可预留队列。
2 实验调试
R1#show interfaces s0/0
 实验4
1 实验步骤
(1) 步骤1:配置IP 地址、配置路由协议
(2) 步骤2:定义class-map
R1(config)#class-map match-any CLASS-MAP1
          定义了一个class-map,名为CLASS-MAP1,class-map 命令参见下文解释。
R1(config-cmap)#match protocol http
R1(config-cmap)#match protocol ftp
         定义只要是http 或者ftp 流量就属于CLASS-MAP1
R1(config)#class-map match-all CLASS-MAP2
R1(config-cmap)#match protocol telnet
        定义只要是telnet 流量就属于CLASS-MAP1。系统有一个默认的class-map,名为class-default,凡是没有定义的流量就属于这个class-map。
【技术要点】class-map 命令格式为:“class-map [ match-all | match-any ] name”:
  match-all:指明下面的条件必须全部满足,才可以执行,此为默认值;
  match-any:表示匹配任何一个条件就可以执行。
在class-map 模式下,可以设置各种匹配条件,例如:
  匹配一种协议类型:match protocol protocol-name 。协议类型包括EGP,ICMP,EIGRP,DNS,HTTP,Telnet 等上百种具体协议。
  匹配访问列表:match access-group { number | name acl_name } 。可以匹配基
于号码的list 和基于Name 的Access list。
匹配CoS (class of Servie):match cos cos-value 。匹配IP 包中的CoS 值。
匹配IP 优先级(IP Precedence):match ip precedence precedence-value 。匹配IP 包中的IP 优先级值。
匹配DSCP 值(Differentiated Services Code Point): match ip dscp dscp_value 。
匹配IP 包中的DSCP 值。
匹配入接口:match input-interface type number。匹配IP 包的进入接口。
(3) 步骤3:定义Policy-map
R1(config)#policy-map MY-POLICY
     是定义policy-map。
(4) 步骤4:配置带宽
R1(config-pmap)#class CLASS-MAP1
R1(config-pmap-c)#bandwidth 60
R1(config-pmap)#class CLASS-MAP2
R1(config-pmap-c)#bandwidth 10
   配置CLASS-MAP1 流量的带宽为60K,CLASS-MAP2 流量的带宽为10K。该接口的总带
宽为128K。该格式为:“bandwidth { bandwidth_value | percent percent_value } 。
可以指定具体带宽:单位为K。
也可以指明百分比:percent 关键字指定接口可用带宽百分比,可以0--100 取值,默
认情况下接口可用最大带宽为物理带宽的75%(其余25%留给系统自己用),所以
percent 值是这75%的percent,而不是物理带宽的percent,我们可以在接口下使用
“max-reserved-bandwidth precent”命令更改最大可用带宽。
(5) 步骤5:将policy-map 应用到接口上
R1(config)#int s0/0
R1(config-if)#service-policy output MY-POLICY
   把我们定义的策略应用在接口的output 方向上,CBWFQ 只能在output 方向。这样我们就在接口上限制了http、ftp 和telnet 流量的带宽。
2. 实验调试
(1) 检查class-map 和policy-map
R1#show interfaces s0/0
R1#show class-map
R1#show policy-map
(2) 检查策略在接口上的运用情况
R1#show policy-map interface s0/0
 实验5
1实验步骤
在实验4 的基础上继续本实验。
(1) 步骤1:定义class-map3,把IP 优先级为critical 的IP 流量包含进来
R1(config)#class-map match-any CLASS-MAP3
R1(config-cmap)#match ip precedence critical
(2) 步骤2:配置LLQ
R1(config)#policy-map MY-POLICY
R1(config-pmap)#class CLASS-MAP3
R1(config-pmap-c)#priority 15
    LLQ 的配置和CQWFQ 配置很类似,不过使用了priority 命令,我们这里限制它的带宽为15k,超过这个带宽的数据包将被丢弃。这样CLASS-MAP3 的流量将优先被发送,然后才发送CLASS-MAP1 和CLASS-MAP2 等流量。
2. 实验调试
(1) 检查policy-map
R1#show policy-map
(2) 检查策略在接口上的应用情况
R1#show policy-map interface s0/0