令牌桶算法一般指的是單/雙速三色標記法。
srTCM的英文全稱是Single Rate Three Color Marker,單速率三顏色標記
該算法要預先在系統中設定三個參數,三個參數如下:
- Committed Information Rate(CIR),提交信息率。
- Committed Burst Size(CBS),提交Burst大小。
- Excess Burst Size(EBS),超量Burst大小。
CIR用於表示每秒IP包的字節數。CBS和EBS以字節爲單位。必須被設置。推薦值:它們之一必須大於0,且若大於0的CBS和EBS,值要大於MTU。
顏色有三種:綠、黃、紅。簡單來說,顏色與參數的對應關係是這樣的:
- 如果沒有超過CBS就是綠的。
- 超過了CBS但沒有超過EBS就是黃的。
- 超過了EBS就是紅的。
在實際應用中,具體的邏輯因不同的具體設定而異(例如,紅色丟包,黃色正常發送,綠色往特定隊列發送等)。而且限速器會對每一個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;若Tc<B <Te,則標記爲黃色,E桶中的令牌數減少B;若B >Te,標記爲紅色,兩桶總令牌數都不減少。
如果工作在非色盲模式下,若報文已被標記爲綠色或B <Tc,則報文被標記爲綠色,Tc減少B;若報文已被標記爲黃色或Tc<B <Te,則標記爲黃色,且Te減少B;若報文已被標記爲紅色或B >Te,則標記爲紅色,Tc和Te都不減少。
trTCM全稱 Two Rate Three Color Marker ,雙速率三顏色標記。基本思路和srTCM相同,有一些細節上的差異。
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的令牌。
單速率三色算法與雙速率三色算法的比較
單速率三色標記算法採用單桶或雙桶結構,令牌添加方式和報文處理流程比較簡單;雙速率三色記算法採用雙桶結構,令牌添加方式和報文處理流程相對複雜。前者關注報文尺上的突發,後者關注速率上的突發,兩者各有優點。
相對雙速率三色標記算法而言,單速率三色標記算法由於實現簡單等原因,成爲目前業界比較常用流量標記方式。但不同的實現方式決定了其具有一定的性能差異,合理的採用借債方式可以彌補其在丟包率、突發流量處理性能、大小包混合轉發性能、數據轉發平緩程度等性能方面的不足,但當存在較大速率的突發流量時,單速率三色標記算法的借債機制將不能較好的改善性能問題,所以單速率三色標記算法不能完全取代雙速率三色表算法。在實際應用中,應針對不同的流量特徵選擇恰當的標記方式