当网络出现拥塞的时候,一般会有延迟、延迟抖动或丢包的现象出现,那么解决这种现象的最好办法就是提高网络的带宽,那么,如果在无法提高网络带宽的话,就只能通过合理的利用网络带宽。在网络发生拥塞时,根据业务的性质和需要使用QoS技术合理的分配现有带宽,降低网络拥塞的影响。
QoS服务模型一共分为三种:
1、best-Effort service服务模型:它是一种单一的服务模型,也是最简单的服务模型,应用程序可以在任何时候发送任意数量的报文。网络尽最大可能发送这些报文,但是对于延时、可靠性不做保证,它是在互联网中默认的服务模型,其遵循先进先出的转发规则。
2、IntServ服务模型:IntServ服务模型在使用网络资源时,需要提前申请,申请的过程是通过RSVP(资源预留协议)完成的,应用程序会通过RSVP将需要的时延、带宽、丢包率等性能通知其他节点,这些节点收到资源预留请求后,会根据用户的合法性、资源使用情况来决定是否预留资源。
这个服务模型的扩展性很差,实施比较困难,并且RSVP存在一定缺陷,所以限制了它的广发应用。
3、Diffserv服务模型:它可以满足不同的QoS需求,与IntServ不同,它不需要预留资源,网络不需要为每个端到端的流量进行维护。Diffserv服务模型可以使用不同的方法来指定报文的QoS,如报文的优先级、MAC地址、源IP地址、目的IP地址等,网络可以通过这些信息来提供特定的服务(报文分类、流量整 形等)。
接下来,对Diffserv服务模型进行详细的解释。
QoS的操作模型:
QoS涉及四大组件:分类和标记、整 形和监管、拥塞避免和拥塞管理。QoS操作模型如下所示: 首先,数据进入设备进行流分类,根据流量的重要程度划分不同的类别,并打上不同的标记。然后使用GTS或CAR技术进行整 形和监管,并根据策略对违规的报文进行操作,限制流量的速率。随后通过WRED技术随机丢弃相对不重要的报文避免网络拥塞,最后通过拥塞管理的队列技术将报文放入不同的队列。队列达到最大长度后,后到达的报文将被丢弃,通过队列的出队调度技术转发报文。
可以通过下面这个实际的案例更加通俗的理解QoS对数据流的处理: 我们来把QoS操作模型拆分开来一步步了解:
1、分类和标记:
QoS是一个整体的框架,不局限于一台设备,整个网络中设备相互配合,最终达到流量优化的目的。QoS的核心就是保证重要的流量有限通过网络设备。默认情况下,网络设备对任何流量都一视同仁,为了可以让任何设备都可以识别重要的流量,在网络的边界,也就是任何进入网络的流量都应该根据重要程度被分类,并打上不同的标记,后续设备基于这些标记来标识哪些流量是相对重要的。
①、分类:流分类是进行区别服务的基础,流分类可以使用报文的优先级来识别不同优先级特征的流量;
流分类一般通过ACL区分不同的流量,尤其是扩展ACL,基本上可以定义大部分流量。如下命令定义了网络中所有的FTP流量:
R1(config)#access-list 101 permit tcp any any eq 21
②、标记:在QoS技术的Diffserv服务模型中,对于IP报文中的DS字段使用DSCP(差异化服务编码点)作为QoS优先级描述,如下所示: DS字段一共八位,在Diffserv中使用DS的前六位,即DS0DS5定义了063共64个优先级。 QoS也可以使用DS字段中的IP优先级,使用DS的前三位IP。优先级共八个等级,其中0表示正常流量,尽力转发。 默认情况下,如果不做设置,正常数据的优先级都是0,而像RIP、OSPF报文,默认优先级是6,优先级越高越优先发送;
在配置时,首先定义匹配类,然后定义流量控制策略,最后在端口实施策略。
1)定义匹配类
R1(config)#class-map abc R1(config-cmap)#match access-group 101 #101为上面创建的扩展ACL编号 除了配置ACL外,还可以配置端口、VLAN、源或目的MAC地址等信息,配置命令如下:
R1(config-cmap)#match input-interface f0/0 #匹配 F0/0端口进入的流量。 R1(config-cmap)#match any #匹配任意流量 2)、定义流量控制策略
通过policy map调用class map,然后为每一个class map 配置策略:
R1(config)#policy-map QoS #定义策略名称 R1(config-pmap)#class abc #调用class map R1(config-pmap-c)#set ip dscp 5 #定义优先级,范围为0~63; 也可以使用如下命令来定义优先级: R1(config-pmap-c)#set ip precedence 7 #与dscp一样,用来定义优先级,范围为0~7。 3)、在接口上应用策略
R1(config-if)#service-policy input qos #service-policy为命令字,input表示入站。 可以使用output来表示出站,qos为定义的策略名称 4)、查看配置 可以使用命令show policy-map来查看配置:
R1#show policy-map Policy Map df Class abc set ip precedence 7
Policy Map qos Class abc set ip precedence 0 2、整 形和监管:
经过分类和标记已经可以区分流量的优先级了,那么为了避免网络拥塞的出现,可以对流量进行控制,通过采用一定的策略控制流量的大小,以减少网络拥塞的出现。主要的流量管理技术是整 形和监管。
在对流量进行监控时一般可以设定三个参数:
承诺平均速率(CIR):允许流量通过的平均速率;突发量(BC):允许突发产生流量的大小,设置的大小必须大于最大报文长度。额外突发量(Be):表示流量超出突发量后还可以转发的流量大小。1)流量策略
对于符合规定部分的流量视为合规流量,而对于超出规定部分的流量视为违规流量。设置流量策略时,既可以设置合规流量策略,也可以设置违规流量策略。一般流量策略有以下几种:
转发:对于合规流量和违规流量都可以设置策略为转发。 丢弃:对于合规流量和违规流量都可以设置策略为丢弃。 标记:标记报文的优先级。例如,将合规流量报文的IP优先级设定为5,而将违规流量报文的优先级设置为0. 进入下一级流量策略:流量策略可以多级处理,可以将流量提交给下一级流量策略来进行控制。 2)整 形与监管
流量整 形(GTS)是一种调节输出速率的措施,流量整 形使用缓冲区使流量均匀地进行转发。流量进入设备进行分类,不需要进行整 形的流量直接通过设备转发,需要进行整 形的流量根据配置分为合规流量和违规流量。当流量速率超过设定时,设备将多余的流量缓存到GTS队列,然后按照配置的CIR,将报文均匀地转发出去,以保证网络流量平稳。
由于流量整 形使用缓存来保存违规流量,所以可以减少丢包率,避免了报文重发,但是使用缓存将导致数据转发时增加时延。流量整 形一般应用在整体流量较小,但有时出现突发流量的环境中。如下图所示: 流量整 形配置有两种配置方式,一种是基本的流量整 形配置,另一种是基于ACL的流量整 形配置。
基本的流量整 形配置如下:
R1(config)#access-list 100 permit udp any any R1(config)#in f0/0 R1(config-if)#traffic-shape rate 8000000 #针对所有经过该接口的流量整 形。承诺平均速率为100kb/s R1(config)#in f1/0 R1(config-if)#traffic-shape group 100 800000 800000 800000 #针对于ACL组号为100的流量整 形。 顺序依次为CIR、Bc、Be,CIR是每秒可通过的速率, 计量单位为比特 (1GB=1024MB,1MB=1024KB,1KB=1024B,1B(字节)=8bits(比特), 也就是说80000bits大约是100KB/s 查看网络整 形配置信息:
R1#show traffic-shape f0/0
Interface Fa0/0 Access Target Byte Sustain Excess Interval Increment Adapt VC List Rate Limit bits/int bits/int (ms) (bytes) Active
1000000 6250 25000 25000 25 3125 -查看GTS流量统计信息:
R1#show traffic-shape statistics f0/0 Acc. Queue Packets Bytes Packets Bytes Shaping I/F List Depth Delayed Delayed Active Fa0/0 0 0 0 0 0 no 查看GTS队列信息: R1#show traffic-shape queue Traffic queued in shaping queue on FastEthernet0/0 Queueing strategy: weighted fair Queueing Stats: 0/1000/64/0 (size/max total/threshold/drops) Conversations 0/0/64 (active/max active/max total) Reserved Conversations 0/0 (allocated/max allocated) Available Bandwidth 1000 kilobits/sec
其中粗体1000标识设置的缓存器限制。
流量监管是一种流量控制措施,监管使用的三个参数分别是承诺平均速率、Bc、Be。所以监管中,Bc+Be的大小是允许突发的最大流量的大小。监管的核心技术是承诺访问速率(CAR)
Bc和Be相当于信用的积累,如果一直守信(小于规定流量),其信用值就不断增加到某个数值(Bc);如果继续守信,则信用值就会继续增加到一个规定的最大值(Bc+Be)。这时,如果出现违规现象(流量速率超过规定速率),信用就会减少,知道信用值为0,。所以Bc、Be是一个积累使用的过程,而不是始终存在的(最初时Bc和Be为满的)。
在使用CAR技术限制流量速率时,违规流量一般会被直接丢弃而不进行缓存,所以呢,CAR技术保证了数据的延时,但是增加了丢包率。CAR技术多应用于接入层,对接入用户进行流量限制。
CAR的速率图如下所示: CIR表示速率,而Bc和Be表示大小。 一般的使用一下公式进行配置:
Bc=2XRTTXCIR/8
其中,RTT表示流量往返的时间,可以使用ping命令测试。Be流量一般等于Bc。
承诺访问速率配置:和流量整 形相同,也有两种配置方式,一种是基本的承诺访问速率配置,另一种是扩展的承诺访问速率配置。
1)、基本的承诺访问速率配置
R1(config-if)#rate-limit input 8000000 2000 4000 conform-action transmit exceed-action drop 上述命令表示进入端口的流量被限速为8000000b/s(约8MB/s),最大突发量为4000字节,符合的流量conform-action被转发transmit,超出的流量exceed-action被丢弃drop。
R1(config-if)#rate-limit input 8000000 2000 4000 conform-action set-prec-transmit 5 exceed-action set-prec-transmit 0 #其中8000000为CIR,参数范围是8000~2000000000,单位是b/s; 2000表示普通突发量,参数范围是100~512000000,单位是字节; 4000表示最大突发量,参数范围是2000~1024000000,单位是字节 上述命令表示进入端口的流量被限速为8Mb/s,最大的突发量为4000字节,符合的流量被标记IP优先级5后进行转发,超出的流量被标记IP优先级0后进行转发,IP优先级0为默认值,表示尽力转发。当网络出现拥塞时,可以根据优先级确定优先丢弃的数据。
2)、扩展的承诺访问速率配置
首先配置ACL,定义需要整 形的流量,然后再接口模式下配置如下命令进行流量整 形:
R1(config)#access-list 101 permit tcp any any R1(config)#in f0/0 R1(config-if)#rate-limit input access-group 101 8000000 2000 4000 conform-action transmit exceed-action drop
#其中8000000为CIR,参数范围是8000~2000000000,单位是b/s; 2000表示普通突发量,参数范围是100~512000000,单位是字节; 4000表示最大突发量,参数范围是2000~1024000000,单位是字节 查看CAR配置信息:
R1#show interfaces f0/0 rate-limit FastEthernet0/0 Input matches: access-group 101 #匹配的ACL params: 8000000 bps, 4000 limit, 4000 extended limit #配置的速率限制 conformed 0 packets, 0 bytes; action: transmit #符合的流量统计,动作为转发 exceeded 0 packets, 0 bytes; action: drop #违规的流量统计,动作为丢弃 last packet: 4176504ms ago, current burst: 0 bytes #当前流量突发量信息 last cleared 00:07:24 ago, conformed 0 bps, exceeded 0 bps #速率信息 matches: access-group 101 params: 8000000 bps, 4000 limit, 4000 extended limit conformed 0 packets, 0 bytes; action: transmit exceeded 0 packets, 0 bytes; action: drop last packet: 4176504ms ago, current burst: 0 bytes last cleared 00:00:44 ago, conformed 0 bps, exceeded 0 bps