一、引述
網絡擁塞(Congestion)是指在通信子網內局部(單個節點或數個節點)或全局性地發生數據流通不暢或阻塞的現象,嚴重時可能造成死鎖(Dead-locked)。可能造成擁塞的原因很多,例如,用戶注入通信子網的數據過多、過快;在某一節點上多條輸入線路瞬時指向同一條線路的輸出數據過多、過快,超出了節點處理能力或線路輸出能力;輸出隊列過長耗盡緩存空間等等。擁塞現象很容易發生連鎖反應,例如,單節點發生擁塞時,如果數據較集中地指向同一目標,擁塞可能沿傳輸路徑逆向擴散。另外,如果試圖緩解擁塞的措施不當也可能使擁塞情況更加惡化,例如,當發生擁塞的節點為了減少對該節點的壓力,將新到達的報文丟棄時,又可能由于“確認超時”(Timeout )而引起大量的數據重傳。
盡管好的流量控制和路徑選擇技術,有利于減小擁塞的發生或在一定程度上減緩擁塞,但流控、選徑技術并不能替代擁塞控制,必須在網內設計相應的專門的擁塞控制策略,盡量避免擁塞的發生和在發生擁塞時能夠緩解和解除擁塞。
擁塞控制(Congestion Control)技術可以分為開環控制與閉環控制兩大類。開環控制的基本思想是通過適當的策略盡量避免擁塞發生,其策略包括:限制輸入流量、適時丟棄報文或分組以及為某些網絡節點制訂擁塞控制決策措施等。閉環控制實質上是反饋控制,它以擁塞狀況檢測數據為基礎,通知或告誡相關節點采取措施阻止擁塞發生或緩解擁塞狀況。閉環擁塞控制過程通常由3個步驟構成,詳見下表1所述。
表 1:閉環擁塞控制過程的步驟
二、擁塞預防策略
在網絡層擁塞預防策略包括多個方面,下表2-0給出了不同種常用的策略。將在下面分別專門討論其中的3種策略:限制入網數據流的策略、基于服務質量的策略和資源預留策略。
表 2-0:網絡層擁塞預防的常用策略總述
1、限制入網數據流的策略(Traffic Shaping)
大量的突發性數據注入網內往往是造成網絡擁塞的重要原因。一種限制過量突發數據入網方法稱為平滑數據流的策略,其具體做法是:根據服務質量合同,采用限制各邏輯鏈路上的入網速率(承諾速率、承諾的突發速率和承諾的額外突發速率)。限制入網數據流的策略屬于開環擁塞控制手段,也可以歸入預防性策略之中。下面討論的兩種算法也屬于限制入網數據流的策略。
1)漏桶算法:“漏桶算法(Leaky Bucket Algorithm)”借用廚房中使用漏桶以漏孔限制水流的思路來限制入網數據。當漏桶盛滿水時,水從漏桶上面溢出;“漏桶算法”限定單位時間內允許單臺計算機網絡注入網絡的數據量(相當于“漏孔”大小),當待入網數據過多時,則將多余部分丟棄(類似于水從漏桶上方溢出)。平滑數據流中的具體實現方式至少有如下表2-1-1的兩種。
表 2-1-1:平滑數據流中的具體實現方式
2)變孔徑漏桶算法:采用上面介紹的“漏桶算法”過于死板,嚴格限制單個主機單位時間內允許注入網絡的數據,如果某時段無數據或待發數據少于限量值(固定孔徑)在下一時段不能利用過去未用的額度。由于任一主機期望注入網絡的數據率在時間上的分布規律不同,在某些時刻,無數據發送或需發的數據較少,而在另外一些時刻又可能產生較大量的突發性數據。如果允許將未用盡的發送額度保留一個最大的限額,待有突發性數據時使用(有些像偶然地適當放大“漏孔”),則既能夠適應突發性數據的傳輸,又能夠保證整個網絡的入網數據仍然大體保持平衡(各主機突發數據產生的時刻不同)。這種算法稱為“變孔徑漏桶法”(Token Bucket Algorithm),規定一個正常孔徑,平時發送量受該孔徑限制,當前面的計時周期內未超過正常孔徑允許的發送數據時,節余的發送量可用于本周期發送,此時的發送限額,大于正常孔徑。這種可變的發送孔徑就是本次的發送限額,也即“Token”。
2、基于服務質量的策略
限制入網速率的方法不僅限于主機,這一方法可以推廣到網絡設備(如路由器),通過網絡設備的配合實現在一對端系統主機間進行數據流的平滑控制。IETF的RFC 1363建議了一種在平滑控制中用于描述數據流的注入模式和期望的服務質量的方法。這種方法的基本思路是:在(無連接服務的)數據報文序列發送前或在(有連接服務)建立連接前,發送方通過數據流的描述詢問通信子網是否可接受;如果可以接受,則繼續向前進行這一過程。被詢問方的應答可能是:接受、拒絕或者提出自身可接受的數據流描述。這一過程將一直進行到收方、發方與通信子網三方取得一致意見為止。大家可能已經意識到,上述策略盡管沒有提到建立連接,但實質上是在一對主機與中間經過的服務器間建立一條能夠滿足請求方所要求的服務質量的連接。這也再次說明,有連接服務在保證服務質量方面優于無連接服務。表2-2舉例說明了數據流描述的可能內容,其中,表中第1列的參數用于描述輸入數據流的特征;第2列描述發送方期望通信子網提供的服務質量的相關參數。
表 2-2:數據流描述的可能內容舉例
面向連接的OSI網絡服務從保證服務質量的角度,定義了服務質量協商過程,即在連接建立之初,端系統的網絡服務用戶與網絡服務提供者(通信子網)之間共同商定某連接在其存在過程中提供的網絡服務質量。應當指出,盡管基于服務質量的策略客觀上起到了一定平滑數據流的作用,但無論再好的預防策略都很難保證不會發生擁塞,因此,網絡中還必須具備在發生擁塞后緩解或消除擁塞的措施。
3、資源預留策略
資源預留策略的出發點實質上是保證服務質量,盡管在客觀上起到一定減少發生擁塞的可能性的作用。最有代表性的資源預留協議是Internet中的RSVP(Resource Reservation Protocol)(RFC 2205)。RSVP試圖在無連接的IP協議之上,在發送方和接收方之間,為特定的單向數據流提供傳輸服務質量保證。由于IP協議中各報文傳輸的路徑可變,而服務質量的保證必須由一對收、發方之間的所有中間節點(路由器)來保證,因此,對此特定的數據流實質上需要在收發方和途經的各路由器之間建立一條“連接”。一旦通過RSVP協商后,各路由器就必須為保證該信息流的傳輸預留相應的資源。資源的預留,在一定程度上起到減緩擁塞的作用。
有關RSVP的具體內容請參見RFC 2205。為了能根據擁塞情況采取解救措施,首先需要能感知擁塞即將或已經發生,然后將擁塞信息傳遞給能夠緩解擁塞的節點,以便采取相應的措施。這種擁塞控制方式屬于閉環控制,下面我們將討論閉環擁塞控制技術。
三、閉環擁塞控制技術
1、概述
閉環擁塞控制技術的出發點是當發生擁塞時,限制入網數據流以緩解網絡的壓力。對于面向連接的網絡服務,除可以限制主機注入網內的分組數外(例如:直接減緩發送或減小窗口大小),還可采用限制新連接的建立或限制新連接通過擁塞區的方式進一步限制新數據流的引入。閉環擁塞控制手段啟用的前提是發生了擁塞,因此,要應用這類技術必須首先發現擁塞。為此,各網絡節點必須對相關的線路利用率進行周期性的監測,通過線路利用率的歷史和近況求得線路利用率。計算公式如下式所示,式中的符號的含義及參數的取值詳見下表3-1。
u(新)=α u(舊)+(1-α)f
表 3-1:符號的含義及參數的取值范圍
每個網絡節點可以將u等于某值(例如0.9)時定義為輸出線路擁塞的閾值,一旦某輸出線路的利用率達到該值,該線路即進入“警告”狀態。當新的分組或報文到達該節點時,如果其相應的輸出線路處于“警告”狀態,則該節點將向該分組的源主機發送一“限流”分組(Choke Packet)或報文。當源主機收到此限流分組或報文后,將按規定將其發向特定目的地的分組或報文減小一定比例,從而起到緩解該節點及相關節點的擁塞狀況的作用。
2、相關方法
上述方式的應用依賴于主機收到警告分組后自覺減少發送的數據,但如果主機不遵守這一約定,擁塞仍得不到緩解。為此,有人提出了另一種方法稱為“公平排隊”(Fair Queuing)法。其基本思想是在網絡節點中的輸出線路上,為每一源主機設置一隊列,網絡節點對該線路的輸出隊列公平對待,輪流輸出一分組,因此,發送分組較多的源主機并不能獲得更多的發送機會(可以制約收到限流分組而不減少發送數據的主機)。
公平排隊法以分組為基礎計算隊列長度,對于像ATM這樣定長信元的分組的確較公平,但對多數協議,由于分組長度是變化的,因此并不一定能實現對各信息源數據傳輸的公平性。有人建議的一種替代辦法是:對各隊列中的隊首分組進行字節計數,按從短到長的發送順序排列在輸出線路上。
以上兩種方法都強調對各信息源的公平性,但是,如果不同的信息流需要不同的服務質量,特別是不同的數據傳輸速率,則這種“公平性”就不太合理(不同的用戶可能租用不同速率的傳輸服務,繳納不同等級的費用)。因此,有人提出了加權公平排隊算法,對不同的信息源給予不同的權值,方法之一是以同一信息源主機建立的虛電路(連接)數為基礎賦予權值。
上述幾種方法都是基于“端到端”限流的方法,對于遠距離傳輸,限流分組到達源端主機時間較長,緩解擁塞的效果可能不夠明顯。為此,可以采取逐級限流的方法,即限流分組直接反向發給上一節點或沿反向路徑中的所有節點,上一節點或反向路徑上的所有節點都立即減流,迅速緩解對擁塞節點的壓力。
擁塞控制的最后一招,也是最有效的手段是丟棄分組。如果上述手段仍無法緩解或消除擁塞,網絡節點可以將部分分組丟棄,這種方法被稱為“泄流法”(Load Shedding)。由于網中的分組丟棄后造成的影響因應用不同而不同,如文件傳輸數據流的丟棄需要造成重傳,而圖像、話音部分數據丟失可能影響不大等等,因此,應當采用選擇性地丟棄策略。在某些網絡中,如ATM網,對數據丟棄定義了優先權,這樣網絡較容易實現合理地丟棄分組策略。
欲進一步了解為我國IP網絡服務質量要求的請進入。