漏桶算法与令牌桶算法

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

  漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃

  漏桶算法的基本内容如下:

  * 漏桶算法强制一个常量的输出速率而不管输入数据流的突发性。当输入空闲时,该算法不执行任何动作;

  * 主机在每一个时间片向网络注入一个数据包,因此产生了一致的数据流,平滑了突发的流量;

  * 当数据包具有相同尺寸的时候(例如ATM信元),每个时间片传输一个数据包的工作机制没有任何问题。但对于可变包长,这种工作机制可能存在一点问题,此时,最好每个时间片传输固定数目的字节。例如:如果每个时间片传输1024字节,那么一个时间片允许传输一个1024字节的包,两个512字节的包,或者四个 256字节的包;

  在概念上,漏桶算法可以作如下理解:

  * 到达的数据包(网络层的PDU)被放置在底部具有漏孔的桶中(数据包缓存);

  * 漏桶最多可以排队b个字节,漏桶的这个尺寸受限于有效的系统内存。如果数据包到达的时候漏桶已经满了,那么数据包应被丢弃;

  * 数据包从漏桶中漏出,以常量速率(r字节/秒)注入网络,因此平滑了突发流量。

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

  在某些情况下,漏桶算法不能够有效地使用网络资源。因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使某一个单独的流突发到端口速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。而令牌桶算法则能够满足这些具有突发特性的流量。通常,漏桶算法与令牌桶算法可以结合起来为网络流量提供更大的控制。

  漏桶算法的应用实例:

  在ATM网络的交换层,漏桶算法可以用来实现CBR业务。当数据流量超过协商速率一段时间后,漏桶(缓存)将会溢出。这时需要检查每一个信元中的信元丢失优先级(CLP)字段,低优先级的信元将会被丢弃并被原始发送设备重新传输。

你可能感兴趣的:(算法)