1. 程式人生 > >流量限制--令牌桶和漏桶演算法(流量整形演算法)

流量限制--令牌桶和漏桶演算法(流量整形演算法)

流量整形

流量整形(traffic shaping)典型作用是限制流出某一網路的某一連線的流量與突發,使這類報文以比較均勻的速度向外傳送。流量整形通常使用緩衝區和令牌桶來完成,當報文的傳送速度過快時,首先在緩衝區進行快取,在令牌桶的控制下再均勻地傳送這些被緩衝的文。

流量整形的核心演算法有以下兩種,具體採用的技術為GTS(Generic Traffic Shaping),通用流量整形:

漏桶演算法(Leaky Bucket)

漏桶演算法是網路世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)時經常使用的一種演算法,它的主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供一個穩定的流量。

令牌桶演算法(Token Bucket)

1.令牌以一定的速率放入桶中。
   2.每個令牌允許源傳送一定數量的位元。
   3.傳送一個包,流量調節器就要從桶中刪除與包大小相等的令牌數。
   4.如果沒有足夠的令牌傳送包,這個包就會等待直到有足夠的令牌(在整形器的情況下)或者包被丟棄,也有可能被標記更低的DSCP(在策略者的情況下)。
    5.桶有特定的容量,如果桶已經滿了,新加入的令牌就會被丟棄。因此,在任何時候,源傳送到網路上的最大突發資料量與桶的大小成比例。令牌桶允許突發,但是不能超過限制。

有時人們將漏桶演算法與令牌桶演算法錯誤地混淆在一起。而實際上,這兩種演算法具有截然不同的特性並且為截然不同的目的而使用。它們之間最主要的差別在於:漏桶演算法能夠強行限制資料的傳輸速率,而令牌桶演算法能夠在限制資料的平均傳輸速率的同時還允許某種程度的突發傳輸。

在某些情況下,漏桶演算法不能夠有效地使用網路資源。因為漏桶的漏出速率是固定的引數,所以即使網路中不存在資源衝突(沒有發生擁塞),漏桶演算法也不能使某一個單獨的流突發到埠速率。因此,漏桶演算法對於存在突發特性的流量來說缺乏效率。而令牌桶演算法則能夠滿足這些具有突發特性的流量。通常,漏桶演算法與令牌桶演算法可以結合起來為網路流量提供更大的控制。