令牌桶演算法是網路流量整形和速率限制中最常用的一種演算法。用來控制傳送到網路上的資料的數目,並允許突發資料的傳送。
大小固定的令牌桶可自行以恆定的速率源源不斷地產生令牌。如果令牌不被消耗,或者被消耗的速度小於產生的速度,令牌就會不斷地增多,直到把桶填滿。後面再產生的令牌就會從桶中溢位。最後桶中可以儲存的最大令牌數永遠不會超過桶的大小。
傳送到令牌桶的資料報需要消耗令牌。不同大小的資料報,消耗的令牌數量不一樣。
令牌桶這種控制機制基於令牌桶中是否存在令牌來指示什麼時候可以傳送流量。令牌桶中的每乙個令牌都代表乙個位元組。如果令牌桶中存在令牌,則允許傳送流量;而如果令牌桶中不存在令牌,則不允許傳送流量。因此,如果突發門限被合理地配置並且令牌桶中有足夠的令牌,那麼流量就可以以峰值速率傳送。
基本過程如下:
假如使用者配置的平均傳送速率為r,則每隔1/r秒乙個令牌被加入到桶中;
假設桶最多可以存發b個令牌。如果令牌到達時令牌桶已經滿了,那麼這個令牌會被丟棄;
當乙個n個位元組的資料報到達時,就從令牌桶中刪除n個令牌,並且資料報被傳送到網路;
如果令牌桶中少於n個令牌,那麼不會刪除令牌,並且認為這個資料報在流量限制之外;
演算法允許最長b個位元組的突發,但從長期執行結果看,資料報的速率被限制成常量r。對於在流量限制外的資料報可以以不同的方式處理:
它們可以被丟棄;
它們可以排放在佇列中以便當令牌桶中累積了足夠多的令牌時再傳輸;
它們可以繼續傳送,但需要做特殊標記,網路過載的時候將這些特殊標記的包丟棄。
注意:令牌桶演算法和漏桶演算法的主要區別在於「漏桶演算法」能夠強行限制資料的傳輸速率,而「令牌桶演算法」在能夠限制資料的平均傳輸速率外,還允許某種程度的突發傳輸。在「令牌桶演算法」中,只要令牌桶中存在令牌,那麼就允許突發地傳輸資料直到達到使用者配置的門限,因此它適合於具有突發特性的流量。
令牌桶的引數:
包括3個階段:產生令牌,消耗令牌和判斷資料報是否通過。涉及到的引數有:令牌產生的速率cir/eir和令牌桶的大小cbs/ebs。
產生令牌:週期性的以速率cir/eir向令牌桶中增加令牌,桶中的令牌不斷增多。如果桶中令牌數已到達cbs/ebs,則丟棄多餘令牌。
消耗令牌:輸入資料報會消耗桶中的令牌。在網路傳輸中,資料報的大小通常不一致。大的資料報相較於小的資料報消耗的令牌要多。
判斷是否通過:輸入資料報經過令牌桶後的結果包括輸出的資料報和丟棄的資料報。當桶中的令牌數量可以滿足資料報對令牌的需求,則將資料報輸出,否則將其丟棄。
qos 令牌桶演算法
令牌桶演算法一般指的是單 雙速三色標記法。該演算法要預先在系統中設定三個引數,三個引數如下 cir用於表示每秒ip包的位元組數。cbs和ebs以位元組為單位。必須被設定。推薦值 它們之一必須大於0,且若大於0的cbs和ebs,值要大於mtu。顏色有三種 綠 黃 紅。簡單來說,顏色與引數的對應關係是這...
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 時經常使用的一種演算法,它的主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供乙個穩定的流量。...