介绍

令牌桶算法是目前IP QoS中最常采用的一种流量测量方法,广泛应用于约定访问速率技术、通用流量×××技术以及物理接口总速率限制等技术中。IETF RFC 建议规范了单速率三色标记和双速率三色标记两种令牌桶算法,在桶的构成、令牌添加和报文处理流程方面前者较后者简单,成为目前业界比较常用的流量标记方式。在实际应用中,应针对不同的流量特征选择恰当的标记方式。
 

1 令牌桶算法基本原理
      令牌桶是网络设备的内部存储池,而令牌则是以给定速率填充令牌桶的虚拟信息包。每个到达的令牌都会从数据队列领出相应的数据包进行发送,发送完数据后令牌被删除。

      RFC中定义了两种令牌桶算法——单速率三色标记算法和双速率三色标记算法,其评估结果都是为报文打上红、黄、绿三色标记。QoS会根据报文的颜色,设置报文的丢弃优先级,其中单速率三色标记比较关心报文尺寸的突发,而双速率三色标记则关注速率上的突发,两种算法都可工作于色盲模式和非色盲模式。以下结合这两种工作模式介绍一下RFC中所描述的这两种算法。

1.1 单速率三色标记算法
      IETF的RFC文件[2]定义了单速率三色标记算法,评估依据以下3个参数:承诺访问速率(CIR),即向令牌桶中填充令牌的速率;承诺突发尺寸(CBS),即令牌桶的容量,每次突发所允许的最大流量尺寸(注:设置的突发尺寸必须大于最大报文长度);超额突发尺寸(EBS)。

      一般采用双桶结构:C桶和E桶。Tc表示C桶中的令牌数,Te表示E桶中令牌数,两桶的总容量分别为CBS和EBS。初始状态时两桶是满的,即Tc和Te初始值分别等于CBS和EBS。令牌的产生速率是CIR,通常是先往C桶中添加令牌,等C桶满了,再往E桶中添加令牌,当两桶都被填满时,新产生的令牌将会被丢弃。
色盲模式下,假设到达的报文长度为B。若报文长度B小于C桶中的令牌数Tc,则报文被标记为绿色,且C桶中的令牌数减
少B;若Tc<B <Te,则标记为×××,E和C桶中的令牌数均减少B;若B >Te,标记为红色,两桶总令牌数都不减少。
在非色盲模式下,若报文已被标记为绿色或B <Tc,则报文被标记为绿色,Tc减少B;若报文已被标记为×××或Tc<B <Te,则标记为×××,且Te减少B;若报文已被标记为红色或
B >Te,则标记为红色,Tc和Te都不减少。

1.2 双速率三色标记算法
      IETF的RFC文件[3]定义了双速率三色算法,主要是根据4种流量参数来评估:CIR、CBS、峰值信息速率(PIR),峰值突发尺寸(PBS)。前两种参数与单速率三色算法中的含义相同,PIR这个参数只在交换机上才有,路由器没有这个参数。该值必须不小于CIR的设置值,如果大于CIR,则速率限制在CIR于PRI之间的一个值。

      与单速率三色标记算法不同,双速率三色标记算法的两个令牌桶C桶和P桶填充令牌的速率不同,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值分别等于CBS和PBS。

      色盲模式下,如果到达的报文速率大于PIR,超过Tp+Tc部分无法得到令牌,报文被标记为红色,未超过Tp+Tc而从P桶中获取令牌的报文标记为×××,从C桶中获取令牌的报文被标记为绿色;当报文速率小于PIR,大于CIR时,报文不会得不到令牌,但超过Tp部分报文将从P桶中获取令牌,被标记为×××报文,从C桶中获取令牌的报文被标记为绿色;当报文速率小于CIR时,报文所需令牌数不会超过Tc,只从C桶中获取令牌,所以只会被标记为绿色报文。

      在非色盲模式下,如果报文已被标记为红色或者超过Tp+Tc部分无法得到令牌的报文,被标记为红色;如果标记为×××或者超过Tc未超过Tp部分报文记为×××;如果报文被标记为绿或未超过Tc部分报文,被标记为绿色。

2 令牌桶算法的应用

2.1 在流量监管中的应用
      约定访问速率(CAR)是流量监管常用技术之一[4],它的监管原理如图1所示。

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


通用流量×××中( GTS)[(如图2所示)与CAR的原理稍有差别:第一,GTS只用于出方向流量限速,CAR出入方向均可以,但一般多用于入方向;第二,利用CAR进行报文流量控制时,对超过速率限制的报文直接丢弃,而GTS~ IJ 是对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,这样就减少了报文的丢弃,但是要注意的是,如果缓存队列已满,这时到达的报文仍旧会被丢弃。

在端口限速 中的应用


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