原文轉自:http://blog.sina.com.cn/s/blog_6d2d9a5d0101u6to.html
1、引言
由於路由器是基於包交換的設備,每個端口采用帶寬統計復用,所以路由器必須在端口上維護一個或多個隊列,否則路由器無法處理多個數據包同時向同一端口轉發以及端口QOS等問題。對隊列進行管理直接影響路由器性能、擁塞管理能力以及QOS能力。路由器有兩類和控制隊列的算法:隊列管理算法和隊列調度算法。前者主要是在必要時通過丟包來管理隊列長度。后者決定下一個要發送哪個包,主要用來管理各流之間帶寬的分配。
由於Internet數據本質上是突發的,因此允許傳輸突發的數據包非常必要,而路由器中隊列的重要作用就是吸收(absorb)突發的數據包。較大的隊列能夠吸收更多的突發數據,提高吞吐量,但TCP機制往往會保持較高的隊列占用,從而增加了數據包的排隊延遲。因此需路由器對隊列進行管理,維持較小的隊列長度。因為維持較小的隊列長度除了降低排隊延遲,提高吞吐量外,還能保持較大的隊列空間來吸收突發數據包。擁塞控制機制就是要維持網絡處於低延遲高吞吐量的狀態。
當前的隊列管理算法可以分為兩大類:被動式隊列管理(Passive Queue Management,PQM)和主動式隊列管理(Active Queue Management,AQM)。
2、被動隊列管理
2.1 被動式隊列管理及其缺陷
管理路由器隊列長度的傳統技術是對每個隊列設置一個最大值(以包為單位),然后接受包進入隊列直到隊長達到最大值,接下來到達的包就要被拒絕進入隊列直到隊長下降。這種技術也就是所謂的"去尾"(drop-tail)算法。雖然這個方法在當前Internet上得到了廣泛的使用,但其存在幾個重大缺陷:
其一,死鎖(lock-out)問題:在某些情況下,"去尾"算法會讓某個流或者少數幾個流獨占隊列空間,阻止其他流的包進入隊列。這種"死鎖"現象通常是由於同步(synchronization)或其他定時作用的結果。
其二,滿隊列(full queues)問題:由於"去尾"算法只有在隊列滿時才會發出擁塞信號,因此會使得隊列在相當長時間內處於充滿(或幾乎充滿)的狀態。而隊列管理最重要的目標之一就是降低穩定狀態下隊列的長度,因為端到端的延遲主要就是由於在隊列中排隊等待造成的。
其三,全局同步(global synchronization)問題:由於Internet上數據的突發本質,到達路由器的包也往往是突發的。如果隊列是滿的或者幾乎是滿的,就會導致在短時間內連續大量地丟包。而TCP流具有自適應特性,源端發現包丟失就急劇地減小發送窗口,包到達速率就迅速下降,於是網絡擁塞得以解除,但源端得知網絡不再擁塞后又開始增加發送速度,最終又造成網絡擁塞,而且這種現象常常會周而復始地進行下去,從而在一段時間內網絡處於鏈路利用率很低的用狀態,降低了整體吞吐量,這就是所謂地"TCP全局同步"現象。
除了"去尾"機制,另外兩種在隊列滿時進行隊列管理的機制是"隨機丟棄"(random drop)和"從前丟棄"(drop front)機制。當隊列滿時,前者從隊列中隨機找出一個包丟棄以讓新來的包進入隊列;后者從隊列頭部丟包,以便讓新包進入隊列。這兩種方法雖然都解決了"死鎖"問題,但仍然沒有解決"滿隊列"問題。由於這幾種方法都是在隊列滿了被迫丟包,因此稱為被動式隊列管理。
2.2 主動式隊列管理及其優點
在當前的Internet上,丟包是對端節點進行擁塞通知的重要機制,解決路由器"滿隊列"的方法便是在隊列充滿之前丟包,這樣端節點便能在隊列溢出前對擁塞做出反應。這種方法便稱為"主動式隊列管理"(Active Queue Management)。
AQM是一族基於FIFO調度策略的隊列管理機制,使得路由器能夠控制在什么時候丟多少包,以支持端到端的擁塞控制。AQM有以下優勢:
其一,減少了路由器中丟棄的包的數量:Internet中數據包的突發本質是不可避免的,AQM通過保持較小的平均隊列長度(average queue size),能提供更大的容量吸收突發數據包,從而大大減少了丟包數。進一步說,如果沒有AQM,會有更多的包被丟棄,這主要是因為以下三個原因:
1) 由於使用共享的隊列和PQM,會不可避免地產生全局同步,導致很低的平均帶寬利用率,也即吞吐量很低。
2) TCP從突發包的丟棄中恢復要比從單個包丟棄中恢復更復雜。
3) 如果一個數據包在到達目的端之前被丟棄,則其在傳輸過程中所消耗的資源都被浪費,降低了網絡帶寬的利用率。因此,不必要的包丟棄也就意味着帶寬的浪費。
其二,對交互式服務提供了更低的延遲:AQM通過保持較小的平均隊列長度,隊列管理能夠減少包的排隊延遲(queueing delay),而排隊延遲是造成端到端延遲(end to end delay)的主要原因。這對交互式應用比如Web瀏覽、Telnet業務和視頻會議等非常重要。
其三,避免了"死鎖"現象:AQM能夠通過確保到來的包幾乎總是有可用的隊列空間,從而阻止"死鎖"行為的發生。也因為這個原因,AQM能防止路由器對低帶寬高突發的流的偏見。
3 隨機早期檢測算法(Random Early Detection,RED)
RED擁塞控制機制的基本思想是通過監控路由器輸出端口隊列的平均長度來探測擁塞,一旦發現擁塞逼近,就隨機地選擇連接來通知擁塞,使他們在隊列溢出導致丟包之前減小擁塞窗口,降低發送數據速度,從而緩解網絡擁塞。由於RED是基於FIFO隊列調度策略的,並且只是丟棄正進入路由器的數據包,因此其實施起來也較為簡單。
3.1 隨機早期檢測的設計目標
RED主要試圖達到以下目標: 最小化包丟失率和排隊延遲
避免全局同步現象 避免對突發業務的偏見:網絡中含有大量的突發數據,而傳統的"去尾"算法對突發業務有很大的偏見。在采用"去尾"算法的路由器中,如果某個流的突發性越高,則當該流的包進入隊列時越容易造成隊列溢出,從而導致連續地丟棄大量的該流的包。即使在缺乏傳輸層協議有效配合的情況下也能控制平均隊列長度,從而避免擁塞。為了達成以上目標,RED采用了基於時間的平均隊列長度,並且隨機地選擇正進入路由器地包進行丟棄。這種方法能被有效地實施而無需在路由器中維持每個流(per-flow)的狀態信息。
3.2 隨機早期檢測算法
RED算法主要分為兩個部分。首先是計算平均隊列長度,以此作為對擁塞程度的估計。另一個就是計算丟棄包的概率。
3.2.1 計算平均隊列長度
由於Internet數據的突發性,如果一個隊列很多時候是空的,然后迅速被充滿,又很快被取空,這時就不能說路由器發生擁塞而需要向源端發送擁塞指示。因此,RED在計算平均隊長avgQ時,采用了類似低通濾波器(low-pass filter)帶權值的方法:
avgQ = (1-w)×avgQ+q×w
其中,w為權值,q為采樣測量時實際隊列長度。這樣由於Internet數據的突發本質或者短暫擁塞導致的實際隊列長度暫時的增長將不會使得平均隊長有明顯的變化,從而"過慮"掉短期的隊長變化,盡量反映長期的擁塞變化。
在計算平均隊長的公式中,權值w相當於低通濾波器的時間常數,它決定了路由器對輸入流量變化的反應程度。因此對w的選擇非常重要,如果w過大,那么RED就不能有效地過慮短暫的擁塞;如果w太小,那么avgQ就會對實際隊列長度的變化反應過慢,不能合理地反映擁塞狀況,在這種情況下,路由器就不能有效檢測到早期的擁塞。w的值應根據不同情況預先設置,一般來說,它是由路由器允許發生的突發業務的大小和持續的時間所決定的。
3.2.2 計算丟棄包的概率
計算平均隊長的目的就是為了反映擁塞狀況,根據擁塞的程度來計算丟棄包的概率,從而有效地控制平均隊列長度。 RED有兩個和隊列長度相關的閾值:minth和maxth。當有包達到路由器時,RED計算出平均隊長avgQ。若avgQ小於minth,則沒有包需要丟棄;當minth≤avgQ≤maxth時,計算出概率P,並以此概率丟棄包;當avgQ>maxth時,所有的包都被丟棄(如圖1所示)。由於RED使用的是基於時間的平均隊長,就有可能會發生實際隊長大於平均隊長的情況,如果隊列已滿,則到達的包只能被丟棄。
計算概率P的方法如下:
Pb = maxp×(avgQ-minth) / (maxth-minth)
P = Pb / (1-count×Pb)
我們注意到P不僅和avgQ有關,而且還和從上一次丟包開始到現在進入隊列的包的數量count有關。隨着count的增加,下一個包被丟棄的可能性也在緩慢增加。這主要是為了在到來的包之間均勻間隔地丟包,避免連續丟包,從而避免對突發流的偏見和產生全局同步現象。
對隊列管理而言,吞吐量和排隊延遲始終是一對矛盾的關系。如果平均隊長能夠充分權衡吞吐量最大化和延遲最小化之間的矛盾,從而在總體性能上得到較為理想的結果,則該隊長稱為理想的平均隊長。閾值minth和maxth就是由理想的平均隊長決定的。一般來說,maxth-minth應大於一個回路響應時間內平均隊長的增加值,以避免由於路由器丟棄過多的包而導致全局同步。根據目前Internet上數據流的特點,可以將maxth設為minth的兩倍。由於理想的平均隊長依賴於不同的網絡條件,因此,如何確定理想的平均隊長仍是一個有待研究的問題。
4、結束語
主動式隊列管理AQM技術是IETF推薦的基於路由器擁塞控制的關鍵技術,它和TCP端到端的擁塞控制相結合,是解決目前Internet擁塞控制問題的一個主要途徑。不僅如此,在對IP QoS呼聲越來越高的今天,AQM也是實現QoS的重要機制。AQM不僅可以通過減小丟包率、端到端延遲、提高吞吐量等支持QoS,而且還可通過對不同業務實施不同的AQM機制來達到區分服務的目的。因此,AQM已經成為目前的研究熱點之一。 公平性是AQM需要解決的一個重要問題。如何使路由器不增加過多的額外負擔,又能夠提高公平性,一直是困繞廣大研究人員的一個難題。參數設置問題是AQM需要解決的另一主要問題。雖然目前也提出了一些解決方法,如ARED等,但並沒有完全解決這類問題。 另外,目前的AQM機制研究基本上都是基於仿真,然后根據經驗進行改進,缺乏有效的理論來指導。因此,還需要建立一套系統的理論體系來指導AQM技術的研究。