漏桶算法与令牌桶算法
漏桶算法(Leaky Bucket)是網(wǎng)絡(luò)世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)時(shí)經(jīng)常使用的一種算法,它的主要目的是控制數(shù)據(jù)注入到網(wǎng)絡(luò)的速率,平滑網(wǎng)絡(luò)上的突發(fā)流量。漏桶算法提供了一種機(jī)制,通過它,突發(fā)流量可以被整形以便為網(wǎng)絡(luò)提供一個(gè)穩(wěn)定的流量。
?
漏桶可以看作是一個(gè)帶有常量服務(wù)時(shí)間的單服務(wù)器隊(duì)列,如果漏桶(包緩存)溢出,那么數(shù)據(jù)包會(huì)被丟棄。
漏桶算法的基本內(nèi)容如下:
* 漏桶算法強(qiáng)制一個(gè)常量的輸出速率而不管輸入數(shù)據(jù)流的突發(fā)性。當(dāng)輸入空閑時(shí),該算法不執(zhí)行任何動(dòng)作;
* 主機(jī)在每一個(gè)時(shí)間片向網(wǎng)絡(luò)注入一個(gè)數(shù)據(jù)包,因此產(chǎn)生了一致的數(shù)據(jù)流,平滑了突發(fā)的流量;
* 當(dāng)數(shù)據(jù)包具有相同尺寸的時(shí)候(例如ATM信元),每個(gè)時(shí)間片傳輸一個(gè)數(shù)據(jù)包的工作機(jī)制沒有任何問題。但對(duì)于可變包長,這種工作機(jī)制可能存在一點(diǎn)問題,此時(shí),最好每個(gè)時(shí)間片傳輸固定數(shù)目的字節(jié)。例如:如果每個(gè)時(shí)間片傳輸1024字節(jié),那么一個(gè)時(shí)間片允許傳輸一個(gè)1024字節(jié)的包,兩個(gè)512字節(jié)的包,或者四個(gè) 256字節(jié)的包;
在概念上,漏桶算法可以作如下理解:
* 到達(dá)的數(shù)據(jù)包(網(wǎng)絡(luò)層的PDU)被放置在底部具有漏孔的桶中(數(shù)據(jù)包緩存);
* 漏桶最多可以排隊(duì)b個(gè)字節(jié),漏桶的這個(gè)尺寸受限于有效的系統(tǒng)內(nèi)存。如果數(shù)據(jù)包到達(dá)的時(shí)候漏桶已經(jīng)滿了,那么數(shù)據(jù)包應(yīng)被丟棄;
* 數(shù)據(jù)包從漏桶中漏出,以常量速率(r字節(jié)/秒)注入網(wǎng)絡(luò),因此平滑了突發(fā)流量。
在流量整形中還存在另外一個(gè)流行的算法:令牌桶算法(Token Bucket)。有時(shí)人們將漏桶算法與令牌桶算法錯(cuò)誤地混淆在一起。而實(shí)際上,這兩種算法具有截然不同的特性并且為截然不同的目的而使用。它們之間最主要的差別在于:漏桶算法能夠強(qiáng)行限制數(shù)據(jù)的傳輸速率,而令牌桶算法能夠在限制數(shù)據(jù)的平均傳輸速率的同時(shí)還允許某種程度的突發(fā)傳輸。
在某些情況下,漏桶算法不能夠有效地使用網(wǎng)絡(luò)資源。因?yàn)槁┩暗穆┏鏊俾适枪潭ǖ膮?shù),所以,即使網(wǎng)絡(luò)中不存在資源沖突(沒有發(fā)生擁塞),漏桶算法也不能使某一個(gè)單獨(dú)的流突發(fā)到端口速率。因此,漏桶算法對(duì)于存在突發(fā)特性的流量來說缺乏效率。而令牌桶算法則能夠滿足這些具有突發(fā)特性的流量。通常,漏桶算法與令牌桶算法可以結(jié)合起來為網(wǎng)絡(luò)流量提供更大的控制。
?
漏桶算法的應(yīng)用實(shí)例:
在ATM網(wǎng)絡(luò)的交換層,漏桶算法可以用來實(shí)現(xiàn)CBR業(yè)務(wù)。當(dāng)數(shù)據(jù)流量超過協(xié)商速率一段時(shí)間后,漏桶(緩存)將會(huì)溢出。這時(shí)需要檢查每一個(gè)信元中的信元丟失優(yōu)先級(jí)(CLP)字段,低優(yōu)先級(jí)的信元將會(huì)被丟棄并被原始發(fā)送設(shè)備重新傳輸。
總結(jié)
以上是生活随笔為你收集整理的漏桶算法与令牌桶算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中泛型类的定义
- 下一篇: mplayer 所支持的音视频编解码