qos 令牌桶演算法

2021-10-07 04:38:04 字數 2287 閱讀 7038

令牌桶演算法一般指的是單/雙速三色標記法。

該演算法要預先在系統中設定三個引數,三個引數如下:

cir用於表示每秒ip包的位元組數。cbs和ebs以位元組為單位。必須被設定。推薦值:它們之一必須大於0,且若大於0的cbs和ebs,值要大於mtu。

顏色有三種:綠、黃、紅。簡單來說,顏色與引數的對應關係是這樣的:

在實際應用中,具體的邏輯因不同的具體設定而異(例如,紅色丟包,黃色正常傳送,綠色往特定佇列傳送等)。而且限速器會對每乙個packet進行計算,將得到的結果交給標記器。標記器收到的是每乙個packet和其對應的結果值,根據計算結果在所有packet的ip header的ds field中標記上不同的「顏色」(上色,mark,或者說tag)。

限速器有兩種工作模式:

色盲模式(color-blind mode),假定所有incoming packet是無色的。

非色盲模式(color-aware mode),假定所有incoming packet已經被先前的網路元素上了色。如果工作在非色盲模式,它會認為每乙個packet都有一種顏色,要麼綠要麼黃要麼紅。

標記器由兩個令牌桶來表示(c和e)。c和e有共同的cir。令牌桶的c的size是cbs,e的size是ebs。

用tc(t)表示t時刻,令牌桶c中有的令牌數量,te(t)同理。起始時c桶和e桶都是滿的,tc(0)=cbs,te(0)=ebs。

之後,每秒鐘都執行cir次如下操作:若令牌桶不滿,則令牌數量自增1,先增加c桶,c桶滿了後再增加e桶:

如果工作在色盲模式下,假設到達的報文長度為b。若報文長度b小於c桶中的令牌數tc,則報文被標記為綠色,且c桶中的令牌數減少b;若tcte,標記為紅色,兩桶總令牌數都不減少。

如果工作在非色盲模式下,若報文已被標記為綠色或b trtcm有四個引數

peak information rate (pir),峰值資訊率。

peak burst size (pbs),峰值burst大小。

committed information rate (cir),提交資訊率。

committed burst size (cbs),提交burst大小。

pir和cir用於表示每秒ip包的位元組數。pbs和cbs以位元組為單位,必須大於0,推薦設定成大於當前路徑mtu。

與單速率三色標記演算法不同,雙速率三色標記演算法的兩個令牌桶c桶和p桶填充令牌的速率不同,c桶填充速率為cir,p桶為pir;兩桶的容量分別為cbs和pbs。用tc和tp表示兩桶中某時刻的令牌數目,初始狀態時兩桶是滿的,即tc和tp初始值分別等於cbs和pbs。

簡單來說,packet的顏色和四個引數的對應關係是:若packet超過pir,則標記為紅色。若沒有超過pir,則看packet是否超過了cir,若超過,則標記為黃色;若沒有超過則標記為綠色。

如果工作在色盲模式下,且大小為b位元組的包在t時間到達,演算法工作如下:若令牌桶p不足以讓b通過,則tag為紅色,否則:若令牌桶c不足以讓b通過,則tag為黃色且扣除桶p的令牌;若令牌桶c足以讓b通過,則tag為綠色且同時扣除桶c和桶p的令牌。

如果工作在非色盲模式下,大小為b位元組的包在t時間到達,演算法工作如下:若先前tag成紅色,或令牌桶p不足以讓b通過,則tag為紅色,否則:若先前tag成黃色,或令牌桶c不足以讓b通過,則tag為黃色且扣除桶p的令牌;若令牌桶c足以讓b通過且先前標記成綠色,則tag為綠色且同時扣除桶c和桶p的令牌。

單速率三色標記演算法採用單桶或雙桶結構,令牌新增方式和報文處理流程比較簡單;雙速率三色記演算法採用雙桶結構,令牌新增方式和報文處理流程相對複雜。前者關注報文尺上的突發,後者關注速率上的突發,兩者各有優點。

相對雙速率三色標記演算法而言,單速率三色標記演算法由於實現簡單等原因,成為目前業界比較常用流量標記方式。但不同的實現方式決定了其具有一定的效能差異,合理的採用借債方式可以彌補其在丟包率、突發流量處理效能、大小包混合**效能、資料**平緩程度等效能方面的不足,但當存在較大速率的突發流量時,單速率三色標記演算法的借債機制將不能較好的改善效能問題,所以單速率三色標記演算法不能完全取代雙速率三色表演算法。在實際應用中,應針對不同的流量特徵選擇恰當的標記方式

令牌桶演算法

令牌桶演算法是網路流量整形和速率限制中最常用的一種演算法。用來控制傳送到網路上的資料的數目,並允許突發資料的傳送。大小固定的令牌桶可自行以恆定的速率源源不斷地產生令牌。如果令牌不被消耗,或者被消耗的速度小於產生的速度,令牌就會不斷地增多,直到把桶填滿。後面再產生的令牌就會從桶中溢位。最後桶中可以儲存...

python令牌桶演算法

import time class tokenbucket object rate是令牌發放速度,capacity是桶的大小 def init self,rate,capacity self.rate rate self.capacity capacity self.current amount 0...

漏桶演算法與令牌桶演算法

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