對于網(wǎng)絡(luò)單元织堂,當(dāng)分組到達(dá)的速度大于該接口傳送分組的速度時,在該接口處就會產(chǎn)生擁塞奶陈。如果沒有足夠的存儲空間來保存這些分組易阳,它們其中的一部分就會丟失。分組的丟失又可能會導(dǎo)致發(fā)送該分組的主機(jī)或路由器因超時而重傳此分組吃粒,這將導(dǎo)致惡性循環(huán)潦俺。 造成擁塞的因素有很多。比如徐勃,當(dāng)分組流從高速鏈路進(jìn)入路由器事示,由低速鏈路傳送出去時,就可能產(chǎn)生擁塞僻肖。分組流同時從多個接口進(jìn)入路由器肖爵、由一個接口轉(zhuǎn)發(fā)出去或處理器速度慢也可能會產(chǎn)生擁塞。 擁塞管理是指網(wǎng)絡(luò)在發(fā)生擁塞時臀脏,如何進(jìn)行管理和控制劝堪。處理的方法是使用隊列技術(shù)。將所有要從一個接口發(fā)出的報文進(jìn)入多個隊列揉稚,按照各個隊列的優(yōu)先級進(jìn)行處理秒啦。不同的隊列算法用來解決不同的問題,并產(chǎn)生不同的效果搀玖。常用的隊列有FIFO余境、PQ、CQ巷怜、WFQ、CBWFQ暴氏、LLQ等延塑。
1、FlFO(先進(jìn)現(xiàn)出隊列) 先進(jìn)先出隊列(First In First Out Queuing,簡稱FIFO)不對報文進(jìn)行分類答渔,當(dāng)報文進(jìn)入接口的速度大于接口能發(fā)送的速度時关带,F(xiàn)IFO按報文到達(dá)接口的先后順序讓報文進(jìn)入隊列,同時沼撕,F(xiàn)IFO在隊列的出口讓報文按進(jìn)隊的順序出隊宋雏,先進(jìn)的報文將先出隊,后進(jìn)的報文將后出隊务豺。 Internet的默認(rèn)服務(wù)模式是Best-Effort磨总,采用FIFO隊列策略。
2笼沥、PQ (Priority Queueing蚪燕,優(yōu)先隊列) PQ使用了4個子隊列娶牌,優(yōu)先級分別是high,medium馆纳,normal诗良,low。PQ會先服務(wù)高優(yōu)先級的子隊列鲁驶,若高優(yōu)先級子隊列里沒有數(shù)據(jù)后鉴裹,再服務(wù)中等優(yōu)先級子隊列,依次類推钥弯。如果PQ正在服務(wù)中等優(yōu)先級子隊列径荔,但是高優(yōu)先級里又來了數(shù)據(jù)包,則PQ會中斷中等優(yōu)先級子隊列的服務(wù)寿羞,轉(zhuǎn)而服務(wù)高優(yōu)先級子隊列猖凛。每一個子隊列都有一個最大隊列深度(queue-size),如果達(dá)到了最大隊列深度绪穆,則進(jìn)行尾丟棄辨泳。
PQ優(yōu)點(diǎn): 1)對高優(yōu)先級的數(shù)據(jù)流提供了低延遲的轉(zhuǎn)發(fā) 2)大多數(shù)平臺上都支持該隊列機(jī)制 3)支持所有的IOS版本 PQ缺點(diǎn): 1)對單一子隊列而言,會繼承FIFO隊列的所有缺點(diǎn) 2)對低優(yōu)先級的數(shù)據(jù)流而言玖院,可能會被“餓死”菠红,因為只有高優(yōu)先級隊列里有數(shù)據(jù),PQ就不會服務(wù)低優(yōu)先級隊列 3)需要在每一跳上都手工的配置分類
3难菌、CQ(Customized Queue试溯,用戶定制隊列) CQ最多可包含16個組(即group-number的取值范圍為1~16),在每個組中指明了什么樣的數(shù)據(jù)包進(jìn)入什么樣的隊列郊酒、各隊列的長度和每次輪詢各隊列所能連續(xù)發(fā)送的字節(jié)數(shù)等信息遇绞。CQ對報文進(jìn)行分類,將所有報文分成最多至17類燎窘,分別屬于CQ的17個隊列中的一個摹闽,然后,按報文的類別將報文進(jìn)入相應(yīng)的隊列褐健。 CQ的17個隊列中付鹿,0號隊列是優(yōu)先隊列,路由器總是先把0號隊列中的報文發(fā)送完蚜迅,然后才處理1到16隊列中的報文舵匾,所以0號隊列一般作為系統(tǒng)隊列把實時性要求高的交互式協(xié)議報文放到0號隊列。1到16號隊列可以按用戶的定義分配它們能占用接口帶寬的比例谁不,在報文出隊的時候坐梯,CQ按定義的帶寬比例分別從1到16號隊列中取一定量的報文在接口上發(fā)送出去。其中刹帕,按帶寬比例分別發(fā)送的實現(xiàn)過程是這樣的烛缔,16個普通隊列采用輪詢的方式進(jìn)行調(diào)度馏段,當(dāng)調(diào)度到某一個隊列時,從這個隊列取出一定字節(jié)數(shù)的報文發(fā)送践瓷,用戶通過指定這個字節(jié)數(shù)院喜,就可以控制不同隊列之間的帶寬分配比例。 用戶在指定每個隊列每次調(diào)度時發(fā)送的字節(jié)數(shù)時晕翠,需要把握所配數(shù)值的大小喷舀,因為這關(guān)系到輪詢中配置增加的粒度。例如淋肾,為了實現(xiàn)4個隊列間的1:2:2:4的關(guān)系硫麻,我們可以配置這4個隊列發(fā)送字節(jié)數(shù)為:1、2樊卓、2拿愧、4,也可以配置為:500碌尔、1000浇辜、1000、2000唾戚。但在考慮了線路的MTU后柳洋,若MTU為500,則后一種方式較好叹坦。因為在輪詢時熊镣,所剩配額不夠發(fā)送當(dāng)前報文時,會只累加配額募书,然后等下次調(diào)度绪囱,顯然當(dāng)前條件下.第二種方案浪費(fèi)在輪詢空轉(zhuǎn)上的時間要少。 PQ賦予較高優(yōu)先級的報文絕對的優(yōu)先權(quán)莹捡,這樣雖然可以保證關(guān)鍵業(yè)務(wù)的優(yōu)先鬼吵,但在較高優(yōu)先級的報文的速度總是大于接口的速度時,將會使較低優(yōu)先級的報文始終得不到發(fā)送的機(jī)會道盏。采用CQ而柑,將可以避免這種情況的發(fā)生文捶。CQ可以把報文分類荷逞,然后按類別將報文被分配到CQ的一個隊列中去,對每個隊列粹排,可以規(guī)定隊列中的報文應(yīng)占接口帶寬的比例种远,這樣,就可以讓不同業(yè)務(wù)的報文獲得合理的帶寬顽耳,從而既保證關(guān)鍵業(yè)務(wù)能獲得較多的帶寬坠敷,又不至于使非關(guān)鍵業(yè)務(wù)得不到帶寬妙同。當(dāng)然CQ中的實時業(yè)務(wù)不能獲得象PQ一樣好的時延指標(biāo)。
注:難道是PQ+WRR的組合膝迎?
4粥帚、WFQ(Weighted Fair Queueing,加權(quán)公平隊列) WFQ是一個復(fù)雜的排隊過程限次,可以保證相同優(yōu)先級業(yè)務(wù)間公平芒涡,不同優(yōu)先級業(yè)務(wù)間加權(quán)。隊列的數(shù)目可預(yù)先配置卖漫,范圍是(16-4096)费尽。 WFQ,在保證公平(帶寬羊始、延遲)的基礎(chǔ)上體現(xiàn)權(quán)值旱幼,權(quán)值大小依賴于JP報文頭中攜帶的IP優(yōu)先級(Precedence)。WFQ對報文按流進(jìn)行分類(相同源IP地址突委,目的IP地址柏卤,源端口號,日的端口號鸯两,協(xié)議號闷旧,Precedence的報文屬于同一個流),每一個流被分配到一個隊列钧唐,該過程稱為散列忙灼。WFQ入隊過程采用HASH算法來自動完成,盡量將不同的流分入不同的隊列钝侠。在出隊的時候该园,WFQ按流的優(yōu)先級(precedence)來分配每個流應(yīng)占有出口的帶寬。優(yōu)先級的數(shù)值越小帅韧,所得的帶寬越少里初。優(yōu)先級的數(shù)值越大,所得的帶寬越多忽舟。這樣就保證了相同優(yōu)先級業(yè)務(wù)之間的公平双妨,體現(xiàn)了不同優(yōu)先級業(yè)務(wù)之間的權(quán)值。 如:接口中當(dāng)前有8個流叮阅,它們的優(yōu)先級分別為O刁品,2,2浩姥,3挑随,4,5勒叠,6兜挨,7膏孟。則帶寬的總配額將是:所有(流的優(yōu)先級+1)的和。即:1+3+3+4+5+6+7+8=37 每個流所占帶寬比例為:(自己的優(yōu)先級數(shù)+1)拌汇,(所有(流的優(yōu)先級+1)的和)柒桑。即,每個流可得的帶寬分別為:1/37噪舀,3/37幕垦,3/37,4/37傅联,5/37先改,5/37,6/37蒸走,7/37仇奶,8/37。 由此可見比驻,WFQ在保證公平的基礎(chǔ)上對不同優(yōu)先級的業(yè)務(wù)體現(xiàn)權(quán)值该溯,而權(quán)值依賴于IP報文頭中所攜帶的IP優(yōu)先級。
WFQ優(yōu)點(diǎn) 1)配置簡單(不用手工分類) 2)保證所有的流都有一定的帶寬 3)丟棄野蠻流量 4)大多數(shù)平臺上都支持 5)支持所有IOS版本 WFQ缺點(diǎn) 1)每個子隊列都繼承了FIFO的缺點(diǎn) 2)多個不同的流可能會被分入同一個隊列(流的數(shù)量超過了配置的隊列數(shù)) 3)不支持手工分類 4)不能提供固定帶寬保證 5)因為使用了復(fù)雜的分類和調(diào)度機(jī)制别惦,對系統(tǒng)資源有一定的限制
5狈茉、CBWFQ(class-based weighted fair queuing,基于類的加權(quán)公平隊列) CBWFQ通常使用ACL定義數(shù)據(jù)流類別掸掸,并將注入寬帶和隊列限制等參數(shù)應(yīng)用于這些類別氯庆。CBWFQ是網(wǎng)絡(luò)中的一個隊列配置方案,其允許通信基于標(biāo)準(zhǔn)分類扰付,例如訪問控制列表堤撵,輸入界面名,協(xié)議和服務(wù)質(zhì)量(QoS)標(biāo)志羽莺。CBWFQ擴(kuò)展了加權(quán)公平隊列WFQ功能的標(biāo)準(zhǔn)來提供自定義通信類型支持实昨。
CBWFQ特點(diǎn): 1)能夠給不同的類保障一定的帶寬 2)對傳統(tǒng)的WFQ作了擴(kuò)展支持用戶自己定義流量的分類: 3)隊列的個數(shù)和類別是一一對應(yīng),給每個class 保留帶寬
CBWFQ與WFQ的區(qū)別: WFQ: 用戶無法控制分類,由HASH算法自己決定 CBWFQ:讓用戶對流量自己來分類 WFQ 對正常流量 處理沒問題盐固,但是對語音流量顯得”太公平”(語音要求低延遲) CBWFQ:考慮到公平特性荒给,并沒有考慮到語音的應(yīng)用
6、LLQ(Low Latency Queueing刁卜,低延遲隊列) LLQ為基于類別的加權(quán)公平排隊(CBWFQ)提供絕對優(yōu)先排隊功能志电,減少了語音會話的抖動。LLQ相當(dāng)于CBWFQ加上一個嚴(yán)格優(yōu)先級隊列长酗,該隊列優(yōu)先級高于其他所有隊列溪北,非常適合時延敏感性應(yīng)用桐绒。LLQ的嚴(yán)格優(yōu)先級隊列是一個有最小保證帶寬的優(yōu)先級隊列夺脾,出現(xiàn)擁塞時之拨,該隊列的數(shù)據(jù)量不能超過所允許的帶寬,否則會被丟棄咧叭。 LLQ具有CBWFQ的所有優(yōu)點(diǎn)蚀乔,包括自定義流量類別,為每種類別的流量提供帶寬保證菲茬,并且可以在所有類別的隊列上應(yīng)用WRED吉挣。(嚴(yán)格優(yōu)先級隊列除外) 對于LLQ和CBWFQ來說,任何沒有被顯示分類的流量都被認(rèn)為class-default流量婉弹,可以將class-default流量類別隊列由FIFO改為WFQ睬魂,需要時也可以用WRED。 LLQ最大優(yōu)勢是可以為時延和抖動敏感型應(yīng)用的流量提供一個或多個有帶寬保證的嚴(yán)格優(yōu)先級隊列镀赌,LLQ并不局限于特定平臺或傳輸介質(zhì)氯哮。