【太閣干貨】令牌桶是什么?
要實現(xiàn)流量的控制,必須有一種機制可以對通過設(shè)備的流量進(jìn)行度量。令牌桶是目前最常采用的一種流量測量方法,用來評估流量速率是否超過了規(guī)定值。
令牌桶可以看作是一個存放令牌的容器,預(yù)先設(shè)定一定的容量。系統(tǒng)按給定的速度向桶中放置令牌,當(dāng)桶中令牌滿時,多余的令牌溢出。
令牌桶只是一種流量測量方法,并不能對流量進(jìn)行過濾或采取某種措施,比如說丟棄數(shù)據(jù)包等,這些操作由其他功能完成。
令牌桶中裝的是令牌而不是分組。
令牌桶限速原理
當(dāng)數(shù)據(jù)流到達(dá)設(shè)備時首先會根據(jù)數(shù)據(jù)的大小從令牌桶中取出與數(shù)據(jù)大小相當(dāng)?shù)牧钆茢?shù)量用來傳輸數(shù)據(jù)。也就是說要使數(shù)據(jù)被傳輸必須保證令牌桶里有足夠多的令牌,如果令牌數(shù)量不夠,則數(shù)據(jù)會被丟棄或緩存。這就可以限制報文的流量只能小于等于令牌生成的速度,達(dá)到限制流量的目的。

在什么地方使用
當(dāng)前令牌桶算法已廣泛應(yīng)用于CAR技術(shù)、流量整形技術(shù)以及接口限速LR(Line Rate)等QoS技術(shù)中。
兩種令牌桶算法
IETF定義了兩種令牌桶算法——單速率三色標(biāo)記算法和雙速率三色標(biāo)記算法,使用紅、黃、綠三色來標(biāo)記評估結(jié)果。(注:此處的紅、黃、綠三色同流分類中表示丟棄優(yōu)先級的紅、黃、綠三色沒有關(guān)系,兩者只是重名而已)。這兩種算法都允許流量在一定程度上突發(fā),但單速率三色標(biāo)記關(guān)注報文尺寸的突發(fā),而雙速率三色標(biāo)記則關(guān)注速率上的突發(fā)。單速率較雙速率實現(xiàn)簡單,成為目前業(yè)界比較常用的流量評估方式。
兩種令牌桶算法都有兩種工作模式——色盲模式(Color-Blind)與非色盲模式(Color-Aware,也叫“色敏模式”),其中色盲模式是較常用的,也是默認(rèn)的模式。
單速率令牌桶主要由如下三個參數(shù)構(gòu)成:
CIR(Committed Information Rate):承諾信息速率,單位是kbps,表示向令牌桶中投放令牌的速率。
CBS(Committed Burst Size):承諾突發(fā)尺寸,單位為byte,用來定義在部分流量超過CIR之前的最大突發(fā)流量,即為令牌桶的容量(深度)。承諾突發(fā)尺寸必須大于報文的最大長度(最大時一個分組可以領(lǐng)取桶中的全部令牌)。CBS越大,表示所允許的突發(fā)量越大。
EBS(Extended burst size):表示峰值突發(fā)尺寸,用來定義每次突發(fā)所允許的最大的流量尺寸,單位為byte。
如果到達(dá)的分組未超過CBS,則把它標(biāo)記為綠色;如果超過了CBS而未超過EBS,則把它標(biāo)記為黃色;否則,標(biāo)記為紅色。在網(wǎng)絡(luò)流量比較簡單的情況下,單速率三色標(biāo)記算法可以用在網(wǎng)絡(luò)入口處來測量流量。
單速率令牌添加方式
單速率標(biāo)記算法中,初始狀態(tài)時兩桶是滿的。先往C桶中添加令牌,等C桶滿了,再往E桶中添加令牌(E桶的令牌用做以后臨時超過CIR的突發(fā)流量),當(dāng)兩桶都被填滿時,新產(chǎn)生的令牌將會被丟棄。
單速率流量評估規(guī)則
當(dāng)報文到來后,直接與桶中的令牌數(shù)相比較,如果有足夠的令牌就轉(zhuǎn)發(fā)(通常用一個令牌關(guān)聯(lián)一個比特的轉(zhuǎn)發(fā)權(quán)限),如果沒有足夠的令牌則丟棄或緩存。
為方便用Tc和Te表示桶中的令牌數(shù)量,Tc和Te初始化等于CBS和EBS。
色盲模式下,在對到達(dá)報文(假設(shè)報文大小為B)進(jìn)行評估時,遵循以下規(guī)則:
對于單速單桶:
如果報文長度不超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為綠色,且Tc=Tc-B,
如果報文長度超過C桶中的令牌數(shù)Tc,報文被標(biāo)記為紅色,Tc值不變。
對于單速雙桶:
如果報文長度不超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為綠色,且Tc=Tc-B,
如果報文長度超過C桶中的令牌數(shù)Tc但不超過E桶中的令牌數(shù)Te,則報文被標(biāo)記為黃色,且Te=Te-B,
如果報文長度超過E桶中的令牌數(shù)Te,報文被標(biāo)記為紅色,但Tc和Te不變。
色敏模式下,在對到達(dá)報文(假設(shè)報文大小為B)進(jìn)行評估時,遵循以下規(guī)則:
對于單速單桶:
如果報文已被標(biāo)記為綠色但報文長度不超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為綠色,且Tc=Tc-B;
如果報文已被標(biāo)記為綠色且報文長度超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為紅色,Tc保持不變;
如果報文已被標(biāo)記為黃色或紅色,都直接將報文標(biāo)記為紅色,Tc保持不變。
對于單速雙桶:
如果報文已被標(biāo)記為綠色且報文長度不超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為綠色,且Tc=Tc-B,
如果報文已被標(biāo)記為綠色且報文長度超過C桶中的令牌數(shù)Tc但不超過E桶中的令牌數(shù)Te,則報文被標(biāo)記為黃色,且Te=Te-B,
如果報文已被標(biāo)記為黃色但報文長度不超過E桶中的令牌數(shù)Te,則報文被標(biāo)記為黃色,且Te=Te-B,
如果報文已被標(biāo)記為黃色且報文長度超過E桶中的令牌數(shù)Te,則報文被標(biāo)記為紅色,且Te保持不變,
如果報文已被標(biāo)記為紅色,直接將報文標(biāo)記為紅色,Tc和Te不變。
雙速率三色標(biāo)記算法
雙速率令牌桶參數(shù)
雙速率令牌桶主要包括四個參數(shù):
CIR(Committed Information Rate):承諾信息速率,表示端口允許的信息流平均速率,單位是kbps。
CBS(Committed Burst Size):承諾突發(fā)尺寸,用來定義在部分流量超過CIR之前的最大突發(fā)流量,單位為byte。承諾突發(fā)尺寸必須不小于報文的最大長度。
PIR(Peak Information Rate):表示峰值信息速率,表示端口允許的突發(fā)流量的最大速率,單位是kbps。該值必須不小于CIR的設(shè)置值。
PBS(Peak Burst Size):表示峰值突發(fā)尺寸,用來定義每次突發(fā)所允許的最大的流量尺寸,單位為byte。
雙速率令牌桶結(jié)構(gòu)
雙速率三色標(biāo)記算法業(yè)界都使用兩個令牌桶,但它關(guān)注的是速率的突發(fā),所以不像單速率三色標(biāo)記算法那樣把第一個桶中未使用的令牌放到第二個桶中,而是使用兩個獨立的令牌桶,存在兩個令牌填充速率。為方便將兩個令牌桶稱為C桶和P桶,C桶容量為CBS,令牌填充速率為CIR,P桶容量為PBS,令牌填充速率為PIR。
?
“雙速率”是指該算法中兩個令牌桶中的令牌填充速率不同。
?

雙速率令牌添加方式
初始狀態(tài)時兩桶是滿的。往C桶和P桶分別以CIR和PIR的速率填充令牌。因這兩個令牌桶是相互獨立的,當(dāng)其中一個桶被填滿時,這個桶新產(chǎn)生的令牌將會被丟棄,另一個桶繼續(xù)填令牌。
雙速率流量評估規(guī)則
雙速率三色標(biāo)記算法關(guān)注的是速率的突發(fā),首先評估的是數(shù)據(jù)流的速率是否符合規(guī)定的突發(fā)要求,其規(guī)則是先比較P桶,再比較C桶。
雙速率三色標(biāo)記算法也有色盲模式和色敏模式兩種。為方便用Tc和Tp表示桶中的令牌數(shù)量,Tc和Tp初始化等于CBS和PBS。
色盲模式下,在對到達(dá)報文(假設(shè)數(shù)據(jù)包大小為B)進(jìn)行評估時,遵循以下規(guī)則:
如果報文長度超過P桶中的令牌數(shù)Tp,則報文被標(biāo)記為紅色,且Tc和Tp保持不變,
如果報文長度不超過P桶中的令牌數(shù)Tp但超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為黃色,且Tp=Tp-B,
如果報文長度不超過C桶中的令牌數(shù)Tc,報文被標(biāo)記為綠色,且Tp=Tp-B,Tc=Tc-B。
色敏模式下,在對到達(dá)報文(假設(shè)報文大小為B)進(jìn)行評估時,遵循以下規(guī)則:
如果報文已被標(biāo)記為綠色且報文長度超過P桶中的令牌數(shù)Tp,則報文被標(biāo)記為紅色,且Tp和Tc不變。
如果報文已被標(biāo)記為綠色且報文長度不超過P桶中的令牌數(shù)Tp但超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為黃色,且Tp=Tp-B,Tc不變。
如果報文已被標(biāo)記為綠色且報文長度不超過C桶中的令牌數(shù)Tc,則報文被標(biāo)記為綠色,且Tp=Tp-B,Tc=Tc-B。
如果報文已被標(biāo)記為黃色,則只比較P桶,如果報文長度超過P桶中的令牌數(shù)Tp,則報文被標(biāo)記為紅色,且Tp和Tc不變。
如果報文已被標(biāo)記為黃色,且報文長度不超過P桶的令牌數(shù),則報文被標(biāo)記為黃色,且Tp=Tp-B,Tc不變。
如果報文已被標(biāo)記為紅色,直接將報文標(biāo)記為紅色,Tc和Tp不變。