令牌桶算法及其应用

令牌 桶算法及其应用

一.令牌桶算法

在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。

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

大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小。

传送到令牌桶的数据包需要消耗令牌。不同大小的数据包,消耗的令牌数量不一样。

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

注意:令牌桶算法不能与另外一种常见算法“漏桶算法(Leaky Bucket)”相混淆。这两种算法的主要区别在于“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输速率外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,因此它适合于具有突发特性的流量。

二.令牌桶标记算法

二 .1单速率三色标记算法

单速率三色标记算法(Single Rate Three Color Marker, srTCM)由两个令牌桶构成。其中一个是C桶,桶深为CBS(承诺突发尺寸),另一个是E桶,桶深为EBS(超额突发尺寸),当然EBS>CBS。C桶最大的值就是CBS,E桶的最大值是EBS。起始时(T=0)C和E的值为最大值,即Tc(0) = CBS Te(0) = EBS,以后每秒钟Tc和Te按如下规则更新CIR次,在该算法中对分组的处理也不是简单的允许通过或丢弃,而是采用标记的方式,将分组标记为不同的颜色,标记方式如下

if(Tc < EBS) Tc++;
else if (Te < EBs) Te++;
else Tc和Te保持不变

假设srTCM在色盲模式下,大小为B字节的包在T时间到达则:

if(Tc(t) - B > 0){
包为绿色
Tc(t) = Tc(t) -B
}else if(Te(t)-B >=0)
{
包为黄色;Te(t) = Te(t)-B
}else{
包为红色,Tc(t)和Te(t)大小不变
}


假设在srTCM工作在色敏模式下,大小为B字节的包在T时间到达则:

如果包到来是绿色时,且(Tc(t) - B) >= 0
{包依旧是绿色,Tc(t)=Tc(t)-B}
else
如果包被预标记为绿色或黄色,且Te(t)-B>=0
{包为黄色,Te(t)=Te(t)-B}
else
如果包为红色,那么仍旧为红色,Te(t)和Tc(t)不变

二.2双速率三色标记法

双速率三色标记法(Two Rate Three Color Marker, trTCM),也是设置两个桶,其中一个是C桶,桶深为CBS,令牌产生的速率为CIR(即承诺访问速率);另一个是P桶,桶深为PBS(即峰值突发尺寸),令牌产生的速率为PIR(即峰值信息速率)。令牌的添加方式如下:以不同的速率往两个桶中添加令牌,往C桶添加令牌的速率为CIR,若C桶满则新产生的令牌被丢弃;往P桶添加令牌的速率为PIR,若P桶满则新产生的令牌被丢弃,过程如下:

如果TrTCM工作在色盲模式下,当大小为B字节的包在时间t到达,则:

先判断P桶,在判断C桶
if Tp(t) < B 包为红色 else
if(Tc(t) < B)包为黄色 Tp = Tp-B else
包为绿色,Tp = Tp - B,Tc = Tc -B

如果trTCM工作在色敏模式下,当大小为B字节的包在时间t到达,则:

if(包被标记为红色,或者Tp(t)-B < 0)包为红色,else
if(包被标记为黄色,或者Tc(t)-B < 0)包为黄色,Tp=Tp-B else
包为绿色,Tc和Tp都减去B

概括来说。预标记为红色的包度量以后肯定被标记为红色;预标记为黄色的包度量后可能被标记为黄色或红色,不会被标记为绿色;绿色报文可能被标记为绿色、黄色、红色。

三.令牌桶算法的应用

三.1在流量监管中应用

约定访问速率(CAR)是流量监管常用技术之一,可以应用在端口进和出方向,一般应用在入方向,它的监管原理如图所示。
在这里插入图片描述

  • a. 按特定的速率向令牌桶投放令牌
  • b. 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;
  • c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;
  • d. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。

三.2在流量整形中应用

在这里插入图片描述

  • a. 按特定的速率向令牌桶投放令牌
  • b. 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;
  • c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;
  • d. 对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送。
  • e. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。

通用流量整形中( GTS)与CAR的原理稍有差别:

第一,GTS只用于出方向流量限速,CAR出入方向均可以,但一般多用于入方向;

第二,利用CAR进行报文流量控制时,对超过速率限制的报文直接丢弃,而GTS是对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,这样就减少了报文的丢弃,但是要注意的是,如果缓存队列已满,这时到达的报文仍旧会被丢弃。

三.3在端口限速中应用

在这里插入图片描述
端口限速(LR)(如图3所示)也用于出方向,但不同于GTS 的是:第一,GTS与CAR是在IP层实现的,所以对于不经过IP层处理的报文不起作用,而LR能够限制在物理接口上通过的所有报文;第二,LR不但能够对超过流量限制的报文进行缓存,并且可以利用QoS丰富的队列如优先级队列(PQ)、自定 义 队列(CQ)、加权公平对列(WFQ)等来缓存报文。

  • a. 按特定的速率向令牌桶投放令牌
  • b. 根据预设的匹配规则先对报文进行分类,利用QoS丰富的队列如优先级队列(PQ)、自定 义 队列(CQ)、加权公平对列(WFQ)等来缓存报文
  • c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;
  • d. 对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,
  • e. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。

引用

http://blog.chinaunix.net/uid-20530497-id-2490382.html
https://wenku.baidu.com/view/58e741d328ea81c758f5786f.html
https://wenku.baidu.com/view/8cd442d86f1aff00bed51ecc.html

猜你喜欢

转载自blog.csdn.net/wll1228/article/details/106417650
今日推荐