流量管理
QoS的标记不仅可以用于队列技术,还可以用于流量管理。应用流量管理的起因在于带宽资源有限和流量本身的传输价值需要定位。具体的技术成为CAR(Commited Access Rate),限制约定速率。
一般来讲,用户注入网络的流量不是都有意义的,比如园区网中的清道夫流量,对公司生产没有任何价值,可能只是员工上班时间在网上看电影产生的,这样的流量没有必要传输,在网络边界进行标记后,在网络内部识别出是清道夫流量就直接丢弃,不会为这样的流量浪费带宽。
CAR提供这样的流量控制,其本身的功能是设定IP优先级来描述分组和限制速率。CAR并不将数据保存到缓存区或使其平稳,当超过允许的突发流量时就会丢弃分组。
实施CAR的流程:
1)流量匹配 匹配方式有4种:匹配所有数据,使用速率限制列表匹配某个IP优先级,使用速率限制列表匹配某个Mac地址,使用IP标准或扩展ACL进行匹配。
2)流量检测 应用令牌桶模型,令牌桶有4个关键参数:平均速率或承诺信息速率,即CIR(单位bit/s);常规突发量BC,即瞬间可以超过令牌桶的流量跑;时间间隔Ti=Bc/CIR;扩展突发量BE。
令牌桶就是一个关口,令牌以一定的速率进入令牌桶,满了就停止进入,令牌桶中的令牌数量会根据报文的长度相应的减少,当少到不能再发送时报文就会被丢弃,这样通过控制令牌进入令牌桶的速率就可以限制流量。
令牌桶能保存的最大令牌数等于BC 标准令牌桶BE=BC,没有扩展突发功能,令牌不够就直接丢弃,扩展突发功能令牌桶BE>BC,允许流量暂借更多的令牌,然后采用随机丢弃的方法,缓缓丢弃流量。
流量控制在接口进行,不过在队列技术之前。首先依据预先设置的匹配规则对报文进行分类,如果是没有流量特性的报文就继续发送,如果有就会通过令牌桶这个关口,如果令牌桶中有足够的令牌,则允许报文通过,如果令牌不满足报文的发送条件则报文被丢弃。
在实际应用中CAR还可用于报文的标记或重标记,比如一个报文设置优先级为5,本来应该丢弃,但是现在网络空闲,传输没有问题,就把优先级改为1,后续的路由器会这样处理,如果网络依然不拥塞,就传送这个优先级为1的报文,如果出现拥塞,先丢弃优先级为1的,再丢弃优先级为5的。
CAR的使用限制:只能对IP流量做限速,不支持FastEtherChannel,不支持隧道接口,不支持ISDN PRI接口。
拥塞控制
拥塞控制在队列中使用,可以用来避免TCP全局同步的问题,具体技术为RED,WRED以及流WRED。
考虑到内存资源有限,按传统的处理方法,当队列的长度达到规定的最大长度时就会实行尾丢弃,即丢弃后来的数据包。就TCP报文而言,如果大量的报文被丢弃将造成TCP超时,从而引发TCP的慢启动和拥塞避免机制。
而当队列同时丢弃多个TCP报文将造成多个TCP连接同时进入慢启动和拥塞避免,称之为TCP全局同步。这样多个TCP连接发向队列的报文同时减少,使发向队列的报文的量都不及线路的发送速度,带宽利用不上,而后又同时慢启动渐渐到达峰值以至于出现拥塞,这样发向队列的报文总是忽多忽少,使线路上的流量在峰值和谷底间波动。
RED
随机预检测,具体动作就是设定队列的阈值,当队列得长度小于低阈值时不丢弃报文;当队列长度在高低阈值之间时,开始随机丢弃报文,队列长度越长,丢弃概率越高;当队列长度大于高阈值时,则丢弃所有报文。
由于RED随机地丢弃报文,将避免使多个TCP连接同时降低发送速度,从而避免了TCP的全局同步现象,当某个TCP连接的报文被丢弃开始减速发送的时候,其他的TCP连接仍然有较高的发送速度,这样无论什么时候总有TCP连接在进行较快的发送,提高了线路带宽的利用率。
WRED
现在所采用的基本上都是WRED(Weighted Random Early Detection)。原理和RED一样,区别在于WRED引入了IP优先权DSCP值来区别丢弃策略,可以为不同IP优先级DSCP 设定不同的队列长度、队列阈值、丢弃概率,从而对不同优先级的报文指定不同的丢弃特性。
在设置时如果直接采用队列的长度与用户设定的阈值比较并进行丢弃,将会对突发性的数据流造成不公正的待遇,不利于数据流的传输,所以在与设定的阈值比较并进行丢弃时采用队列的平均长度。
平均队列长度 = (以前的平均队列长度*(1-1/2^n)+(当前队列长度/2^n)
队列的平均长度既反映了队列的变化趋势又对队列长度的突发变化不敏感避免了对突发性的数据流造成不公正的待遇。另外还要注意WRED不能配置在使用了基于路由交换处理器(RSP)的CQ、PQ和WFQ队列机制的接口上。
基于流的WRED
只有自适应TCP流会对拥塞信号做出反应并降低速率;而非自适应UDP流并不会对拥塞信号做出反应,也不降低地中,由于这个原因,非自适应流在拥塞时发送分组的速率将比自适应流高得多,因此贪婪的非自适应流常常比自适应流量使用更多的队列资源。
流WRED对WRED做了改进,它对占用的队列资源比公平份额多的流进行惩罚。为了给队列中活动的通信流以公平,WRED根则流和IP优先级将所有到达的分组归类到队列中。它还维护所有活动队列(即队列中有分组的的流)的状态估息,这种状态信息用于决定每个流的公平队列资源份额(队列长度/活动流的数目),而占用的队列资源多于自已的公平份额的流得到的惩罚将比其他流严厉。
流量×××
流量×××(traffic shaping)典型作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度向外发送。流量×××通常使用缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下再均匀地发送这些被缓冲的文。
流量×××的核心算法有以下两种,具体采用的技术为GTS(Generic Traffic Shaping),通用流量×××:
漏桶算法(Leaky Bucket)
漏桶算法是网络世界中流量×××(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被×××以便为网络提供一个稳定的流量。
令牌桶算法(Token Bucket)
有时人们将漏桶算法与令牌桶算法错误地混淆在一起。而实际上,这两种算法具有截然不同的特性并且为截然不同的目的而使用。它们之间最主要的差别在于:漏桶算法能够强行限制数据的传输速率,而令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。
在某些情况下,漏桶算法不能够有效地使用网络资源。因为漏桶的漏出速率是固定的参数,所以即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使某一个单独的流突发到端口速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。而令牌桶算法则能够满足这些具有突发特性的流量。通常,漏桶算法与令牌桶算法可以结合起来为网络流量提供更大的控制。
GTS
GTS可以对不规则或不符合预定流量特性的流量进行×××,使得网络上下游之间的带宽匹配。GTS与CAR一样均采用了令牌桶技术来控制流量,但主要区别在于:利用CAR进行报文流量控制时对不符合流量特性的报文进行丢弃,而GTS对于不符合流量特性的报文则是进行缓冲减少了报文的丢弃,同时满足报文的流量特性。
GTS可以对接口上指定的报文流或所有报文进行×××当报文到来的时候,首先对报文进行分类如果报文不需要进行GTS处理,就继续发送不经过令牌桶的处理;如果报文需要进行 GTS处理,则与令牌桶中的令牌进行比较。
令牌桶按用户设定的速度向桶中放置令牌,如果令牌桶中有足够的令牌可以用来发送报文,则报文直接被继续发送下去,同时令牌桶中的令牌量按报文的长度做相应的减少,当令牌桶中的令牌少到报文不能再发送时,报文将被缓存入GTS队列中。
当GTS队列中有报文的时候,GTS按一定的周期从队列中取出报文进行发送。 每次发送都会与令牌桶中的令牌数作比较。直到令牌桶中的令牌数减少到队列中的报文不能 再发送或是队列中的报文全部发送完毕为止。
帧中继流量×××(FRTS)
在以下4种情况下使用FRTS:1中心高速,分支低速的时候。2单条物理线路承载到不同目的地的众多VC。3若FR发生了拥塞,想让路由器将数据流拦住(Throttle)。4需要在同一条FR的VC上传输多种协议(IP、SNA)的数据流,并希望每种数据流都能占到一定BW。
FR中的FECN和BECN用于暗示网络上发生了拥塞,当收到带有BECN标记的数据包时,FR 流量×××(FRTS)将动态的对流量进行×××。注意:FRTS只能使用在FR的PVC和SVC上。其中有一种自适应的FRTS,在每个Tc间隔内,进程将检查是否从帧中继网络中收到BECN,如果在一个Tc间隔收到BECN,那么传送速率降低25%直到降到CIR的一半为止。当且仅当16个Tc内没收到BECN,通讯速率恢复到CIR。
FRTS配置步骤
1)建立一个MAP-CLASS,名字区分大小写。
2)定义流量×××的方法,比如设置平均速率和最高速率。
3)在接口上封装FRAME-RELAY。
4)在端口上应用MAP-CLASS 5,开启流量×××,一般用于源端接口。