令牌桶算法和漏桶算法

流量整形

流量整形(traffic shaping)典型作用是限制流出某一网络的某一连接的流量与突发,使这类报文以比较均匀的速度向外发送。流量整形通常使用缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下再均匀地发送这些被缓冲的文。

流量整形的核心算法有以下两种,具体采用的技术为GTS(Generic Traffic Shaping),通用流量整形:

漏桶算法(Leaky Bucket)

漏桶算法是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。

令牌桶算法(Token Bucket)

有时人们将漏桶算法与令牌桶算法错误地混淆在一起。而实际上,这两种算法具有截然不同的特性并且为截然不同的目的而使用。它们之间最主要的差别在于:漏桶算法能够强行限制数据的传输速率,而令牌桶算法能够在限制数据的平均传输速率的同时还允许某种程度的突发传输。 

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。

  令牌桶这种控制机制基于令牌桶中是否存在令牌来指示什么时候可以发送流量。令牌桶中的每一个令牌都代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。因此,如果突发门限被合理地配置并且令牌桶中有足够的令牌,那么流量就可以以峰值速率发送。

令牌桶算法的基本过程如下:

  假如用户配置的平均发送速率为r,则每隔1/r秒一个令牌被加入到桶中;

  假设桶最多可以存发b个令牌。如果令牌到达时令牌桶已经满了,那么这个令牌会被丢弃;

  当一个n个字节的数据包到达时,就从令牌桶中删除n个令牌,并且数据包被发送到网络;

  如果令牌桶中少于n个令牌,那么不会删除令牌,并且认为这个数据包在流量限制之外;

长期运行结果看,数据包的速率被限制成常量r。对于在流量限制外的数据包可以以不同的方式处理:

  它们可以被丢弃;

  它们可以排放在队列中以便当令牌桶中累积了足够多的令牌时再传输;

  它们可以继续发送,但需要做特殊标记,网络过载的时候将这些特殊标记的包丢弃。

  注意:令牌桶算法不能与另外一种常见算法“漏桶算法(Leaky 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,开启流量整形,一般用于源端接口。