随着因特网的发展,IP业务不断快速增长。提高信息在IP网络上传输的质量是IP网发展中的一个关键所在。IP QoS技术的开发,目的就是为用户业务提供端到端的服务质量保证,已成为近几年业界研究的热点。目前存在多种IP QoS服务模型,其中应用最广的是区分服务模型(DiffServ)。DiffServ模型通过数据包分类、拥塞管理、拥挤避免、速率限制和流量整形技术来实现服务质量控制,在其速率限制和流量整形中,主要使用了令牌桶算法来评估流量速率是否超过规定值[1]。 本文第一部分阐述了一下网络工程师任务小组(IETF) 请求注解(RFC)建议规范的两种令牌桶算法;第二部分简要介绍了令牌桶算法在IP QoS中的应用;第三部分详细说明了目前业界常用的两种实现方式,并对两种方式的实现过程进行了具体的比较分析。 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;若TcTe,标记为红色,两桶总令牌数都不减少。 在非色盲模式下,若报文已被标记为绿色或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所示。 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌量按报文的长度做相应的减少;当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。 2.2 在通用流量整形中的应用 通用流量整形中(GTS)[4](如图2所示)与CAR的原理稍有差别:第一,GTS只用于出方向流量限速,CAR出入方向均可以,但一般多用于入方向;第二,利用CAR进行报文流量控制时,对超过速率限制的报文直接丢弃,而GTS则是对超过速率限制的报文进行缓冲,即当令牌桶中的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,这样就减少了报文的丢弃,但是要注意的是,如果缓存队列已满,这时到达的报文仍旧会被丢弃。 2.3 在端口限速中的应用 端口限速(LR)[4](如图3所示)也用于出方向,但不同于GTS的是:第一,GTS与CAR是在IP层实现的,所以对于不经过IP层处理的报文不起作用,而LR则能够限制在物理接口上通过的所有报文;第二,LR不但能够对超过流量限制的报文进行缓存,并且可以利用QoS丰富的队列如优先级队列(PQ)、自定义队列(CQ)、加权公平对列(WFQ)等来缓存报文。 3 令牌桶实现 上面介绍了RFC中定义的令牌桶技术原理以及其在IP QoS中的应用,但是在实际应用中,令牌桶究竟是怎么实现的?令牌桶中的令牌是怎么添加的?报文的处理流程又是什么样的?下面就简单谈一谈令牌桶在业界的实现方式[5]。 3.1 单速率三色标记算法的实现 3.1.1 桶的构成 在令牌桶的构成上,目前业界有两种方式,如图4所示。 可以由一个桶实现,即C桶是E桶中的一部分(图4上),最终桶的容量是由EBS决定的。不管有没有突发流量,EBS不能为0,必须大于或等于CBS。这种实现方式完全按照令牌桶的定义来实现,因为CBS和EBS都是令牌桶的参数,所以放入一个相同的桶实现,通过突发计数器来进行区分。也可以由两个桶实现(图4下),即C桶和E桶分开实现。如果不允许有突发流量,EBS则设置成0。 3.1.2 令牌添加 令牌桶的添加完全依照RFC规定实现,按照恒定的速率CIR添加。即每隔1/CIR时间添加一个令牌,添加顺序为先添加C桶再添加E桶,当令牌桶添加满的时候,再产生的令牌就会被丢弃。 实际中比较常见的有两种实现方式:(1)周期性的添加,如图5所示,添加的时间间隔就是令牌桶的容量与添加速率的比值:T c=CBS/CIR,每次添加的令牌数为CBS 个;(2)一次性添加,只有当令牌桶中没有令牌时才添加令牌,如图6所示,添加令牌的数量是?驻t×CIR(?驻t是当前时间与上次添加令牌的时间之差),且是一次添加完毕,并不是按照一定速率添加。 3.1.3 报文处理流程 一般的报文处理方法如图7所示:当报文到来后,直接与桶中的令牌数相比较,如果有足够的令牌就转发,如果没有足够的令牌则丢弃或缓存。这种令牌桶处理方式在突发流量的处理上没有优势,也就是说当存在较大的突发流量时,令牌桶可能会由于没有足够令牌无法处理报文,而且在没有突发流量且报文到达速率较大时,报文处理流程也不连续,有时会因为令牌数量不足而造成丢包。 为解决这种无谓的丢包问题,目前业界采用了一种借贷机制的报文处理方法,如图8所示。当报文到来后,只要令牌桶中有令牌,无论数量是否足够,都可以转发报文。当令牌数量小于报文长度时,就可以欠债转发,即转发后令牌桶中令牌数目为负;当下次添加令牌的时候,先还清所欠债务,再继续转发报文。这种处理方法较前者在处理突发报文时有优势,能够保证报文发送的连续性。 3.1.4 实现方式比较 假设令牌桶的总容量为1 000 kb,CIR为125 kb/s,报文到达的速率为200 kb/s,报文长度为125 kB (1 000 kb)。 方式一:周期性添加令牌,只有当令牌数足够时才转发报文。添加令牌的周期为8 s,而转发一条报文的时间为5 s。 方式二:一次性添加令牌,当令牌数不足时采用借债机制。转发一条报文的时间是5 s,但是添加令牌的时间是不一定的,每次添加令牌的数目为CIR×?驻t。 图9至图11是对这两种方式的令牌桶中令牌数、报文转发速率和令牌添加过程的比较。 分析数据的处理流程得出以下结论: (1) 数据包丢弃率:方式二的丢包率远小于方式一。 方式一中,由于令牌添加周期与报文发送周期的不一致,导致第6 s到第8 s由于没有令牌不能转发报文。而第8 s到第16 s虽然在不断添加令牌,但令牌数不足以转发一个报文,所以仍旧无法转发报文,那在这一段时间内到达的报文将被丢弃掉。在前16s的时间内丢包率达到了10/16≈62.5%,由于添加令牌和发送报文的时间都是固定的,所以整个发送过程中的丢包率也为62.5%。 方式二中,第5 s第一条报文发送结束令牌被消耗光,但第6 s又立即加入了550 kb令牌,虽不够转发一条报文,但可以采用借债机制,直到第10 s第二条报文发送结束,累计欠债250 kb。这时若有报文到达,就不能继续欠债,而要注入新的令牌才能继续转发。直到第15 s第三条报文发送完毕由于一次添加令牌不够还清所欠令牌,所以造成了短暂的丢包现象,而在前17s内丢包率仅为1/17≈5.9%。 (2) 突发流量处理:方式二在突发流量处理方面优于方式一。 由图10可知,对方式一来说,由于令牌桶总的容量只有1 000 kb,发送完每条报文后桶中剩余令牌数都为0。此时若有突发流量,则报文必然被丢弃。而方式二令牌数可为负,当突发报文到达时即使令牌数不足仍可通过欠债方式现将报文转发出去,后续再偿还债务。 (3) 大小包混合时:方式一可能会造成大包始终得不到转发,而方式二则不会。 如果发送一长度大于1 000 kb的报文,方式一中则始终会由于令牌不足而丢弃报文,方式二则可以通过借债方式现转发报文后偿还债务。 (4) 数据流发送过程平缓程度:方式二数据处理的时间较长,所以趋势明显比方式一平缓。 3.2 双速率三色算法的实现 3.2.1 桶的构成 双速率三色算法的实现,目前业界的实现基本上完全依照RFC的规定,用两个令牌桶来实现,两个令牌桶的容量不同,第一个是CBS,第二个是PBS。 3.2.2 令牌添加 双速率三色标记算法中两桶添加令牌的速率不同,CBS桶添加令牌的速率是CIR,PBS桶添加令牌的速率则是PIR。添加令牌时先添加CBS桶,CBS桶填满后再添加PBS桶。 3.2.3 报文处理流程 当发送连续流量时,先看报文速率是否超过PIR:当报文速率大于PIR时,超过PBS部分流量无法得到令牌,被标记为红色报文;未超过PBS而从PBS桶中获取令牌的报文标记为黄色报文;从CBS桶中获取令牌的报文被标记为绿色报文。当报文速率小于PIR,大于CIR时,报文不会得不到令牌,但会超过CBS部分报文将从PBS桶中获取令牌,被标记为黄色报文;其他报文将从CBS桶中取令牌,被标记为绿色报文;当报文速率小于CIR时,报文所需令牌数不会超过CBS,所以只会被标记为绿色报文。 当发送突发报文时,若突发流量大于PBS,则超出部分统计为红色报文;当突发流量大于CBS,但小于PBS时,则超过CBS部分标记为黄色报文;当突发流量小于CBS时,全部标记为绿色报文。 在流量控制中,用户可针对不同颜色的报文设定不同行为,如;允许通过、丢弃、或重新标记优先级等。 3.3 单速率三色算法与双速率三色算法的比较 单、双速率三色标记算法的比较如表1所示。 单速率三色标记算法采用单桶或双桶结构,令牌添加方式和报文处理流程比较简单;双速率三色记算法采用双桶结构,令牌添加方式和报文处理流程相对复杂。前者关注报文尺上的突发,后者关注速率上的突发,两者各有优点。 4 结束语 相对双速率三色标记算法而言,单速率三色标记算法由于实现简单等原因,成为目前业界比较常用流量标记方式。但不同的实现方式决定了其具有一定的性能差异,合理的采用借债方式可以弥补其在丢包率、突发流量处理性能、大小包混合转发性能、数据转发平缓程度等性能方面的不足,但当存在较大速率的突发流量时,单速率三色标记算法的借债机制将不能较好的改善性能问题,所以单速率三色标记算法不能完全取代双速率三色表算法。在实际应用中,应针对不同的流量特征选择恰当的标记方式。 5 参考文献: [1] 何宝宏. IP网络的服务质量讲座: 第4讲 IP网络流量与拥塞控制技术[J]. 中国数据通信, 2003, 5(5): 96-99. [2] Heinanen J, Guerin R. IETF RFC 2697: A single rate three color marker[R]. Philadelphia, PA, USA: University of Pennsylvania, 1999. [3] Heinanen J, Guerin R. IETF RFC 2698: A two rate three color marker[R]. Philadelphia, PA, USA: University of Pennsylvania, 1999. [4] 李建宝, 桑海. 令牌桶算法在IP QoS中的应用[J]. 华南金融电脑, 2006, 14 (4): 98-99. [5] QoS技术白皮书[EB/OL]. http: //www.huawei-3com.com.cn/. 收稿日期:2007-04-03 |