王剛
(江西財經大學,江西 南昌 330013)
隨著網絡技術的日益發展,網絡應用領域和應用模式不斷創新,基于UDP協議的音頻、視頻和P2P共享資源逐漸占據了互聯網的大部分帶寬,而目前通訊產業雖然取得了巨大的進展,但龐大的硬件設施投資仍然無法滿足爆炸性增長的網絡流量需求。因此,如何利用好現有的帶寬資源為更多的網絡應用提供有效服務是網絡擁塞控制要解決的問題。
按網絡層次可以將現有的網絡擁塞控制算法大致分為兩類:即TCP擁塞控制和IP 擁塞控制。
TCP擁塞控制:基于傳輸層TCP協議的端到端擁塞控制算法,是采用和式增加、積式減少的AIMD擁塞窗口管理方法進行流控制的機制。當TCP發送端收到ACK包,并且沒有檢測到丟包事件時,擁塞窗口加1;當TCP發送端檢測到丟包事件后,擁塞窗口除以2。這種方法可以在網絡擁塞時迅速降低TCP端的發包速度,可以緩解中間路由器和接收端的負荷,但其擁塞窗口的鋸齒狀變化會導致網絡傳輸速率發生震蕩,使網絡帶寬不能有效地利用。針對這些不足,業界又提出了改進算法:TCP Tahoe算法,增加了快速重傳功能[1]。TCP Reno,增加了快速恢復功能,輕度擁塞時保持較大的擁塞窗口[2]。TCP NewReno,在快速恢復階段,重傳“部分確認”后丟失的報文,避免了過多的超時等待[3]。TCP Sack,檢測到擁塞時,選擇性的重傳丟包,避免了不必要的重傳。
IP擁塞控制:基于網絡層的擁塞控制策略,是通過對路由器緩沖隊列的分組實施調度來影響TCP擁塞控制的動態性能來實現的。目前已經有了一系列的隊列調度和管理算法來實現網絡的擁塞控制。FIFO(先進先出),即對先到來的數據包先提供轉發服務,當緩沖區滿后,丟失最后到達的數據包。FQ(公平排隊)和WFQ(加權公平排隊),到達的分組被進行分類并在合適的等待區域排隊,WFQ調度器以循環方式為各個組提供服務。RED(隨機早期檢測算法),該算法通過監控數據包隊列的長度,當擁塞迫近而未滿之前,按照一定的概率丟棄進入路由器的數據包,從而盡早通知發送端減少擁塞窗口[4]。
TCP擁塞控制機制是一種通信端的擁塞控制機制,它是借助從TCP接收端反饋的ACK數據包和通信時延RTT來感知網絡的擁塞狀況。總體位于傳輸層,對網絡層基本透明,很難對網絡層路由器的擁堵情況做出細微精確的反饋,是一種后發反饋。傳輸層的TCP擁塞控制有以下缺陷:首先是反應遲滯的問題,由于需要等待來自接收端返回的ACK數據包帶回擁塞信息,當網絡狀況不佳時,ACK傳輸本身需要一定的時延,當發送端獲取到反饋信息之后,也許網絡的擁塞情況卻已經緩解了。其次是公平性的問題,由于協議只提供了TCP協議的擁塞控制,而網絡中大量存在的UDP數據包并未提供相應的擁塞控制機制,當網絡發生輕度擁塞時,TCP會主動減少自己的發包速度,而UDP會繼續全速發包,這樣就導致網絡中出現UDP數據洪流,它們搶占了大部分的帶寬,而具有網絡友好特性的TCP數據流產生“餓死”現象[5]。
IP擁塞機制主要實施了對中間路由器的擁塞調節,它可以感知細微的網絡擁塞變化情況,并且可以區分不同的發送端產生的數據流,可以在路由器中通過隊列調度方案,丟棄產生擁塞的發送端的數據包,可以比較精確的進行擁塞控制。但是,由于該策略僅在中間的路由器完成必要的擁塞處理,例如丟棄數據包,而不能在網絡擁塞的源頭進行及時干預。后來的改進策略使用顯示擁塞通知(ECN,Explicit Congestion Notification)技術,借助路由器的對IP報文的標記功能傳遞擁塞信息給接收端,然后通過ACK包反饋擁塞信息給發送端,在網絡擁塞時,這一過程同樣存在嚴重的時滯,同時也無法解決UDP洪流問題[6]。
雖然許多學者在提高TCP對網絡數據擁塞的發現和控制能力方面做了大量的改進性研究工作,尋求讓網絡用戶能公平地分享網絡帶寬資源的方法。但這些研究大多基于Van.Jacobson 的經典擁塞算法和路由器緩沖隊列的管理機制,很少對網絡層的發送端緩沖區隊列管理加以改進,使其具有擁塞控制機制。本文針對當前擁塞機制存在的不足之處,提出一種通過時間片管理發送端緩沖隊列的方法,根據網絡層擁堵信息,主動調節網絡發送端發包速率的機制,從而實現擁塞控制的及時性和公平性[7]。
在一臺同時具有TCP和UDP應用的源主機上,我們按照包流的不同建立通訊進程緩沖隊列(Process buffer),各緩沖隊列對應相同的發送端進程名,Sender進程以循環的方式從各個隊列提取數據報,但各隊列一次取走數據報的個數決定于Sender進程在該隊列服務時間的長短,也就是通過時間片來控制隊列一次循環所能發送報文的數量。如圖1所示。

圖1 發送端緩沖區隊列管理擁塞控制Fig.1 Queue Management Congestion Control of Sender Buffer
我們設當前有三個進程流正在進行通信,每個進程對應一個緩沖隊列,每個隊列一次存儲6個報文,默認分配每個隊列4個時間片。這樣初始狀態Sender進程一次輪詢發送服務,每個隊列一次可以發送出去4個報文,三個流開始享有相同的數據傳輸率。在運行期間,根據網絡的擁塞狀況調整各隊列的時間片的數量。調整原則為,當發生網絡中間路由器發生擁塞時,路由器反饋ICMP擁塞信息給主機發送端,發送端減少所對應擁塞隊列的1個時間片;每隔一定周期(例如30秒),給每個隊列增加1個時間片;每隊列的時間片的變化范圍為0到4,即減少到0時不再減小,增加到4時不再增加。
當傳輸網絡上的中間路由器發生輕度擁塞時,根據路由器隊列管理的隨機早期檢測算法(RED),在緩存占滿之前,一旦發現擁塞迫近就按一定的概率丟棄進入路由器的數據包,并且發送ICMP擁塞報文(ICMP報文結構見圖3)到發送端。發送端如果檢測到來自路由器的ICMP擁塞報文(類型值為4,代碼值為0),根據ICMP報文末端存儲的TCP/UDP首部信息,可以提取到導致網絡擁塞的數據包的目的IP地址,進而可以定位到對應的流,對該流的緩沖隊列減少1個時間片,從而降低了包的發送速率,緩解了路由器的擁塞狀況。
每隔一定周期,對所有最近沒有進行減少時間片操作而且擁有時間片不超過默認時間片數量的流隊列進行加1個時間片的操作,這一機制使得各通訊流的傳輸速率保持一個遞增的趨勢,但又不會搶占其他通訊進程的傳輸帶寬。隊列時間片的處理流程如圖2所示。
通過對發送端緩沖隊列的有效管理,可以在網絡層對TCP和UDP都進行擁塞控制和流量均衡,網絡發送端主機可以根據中間路由器的ICMP擁塞報文調整流的傳輸速度,這是對網絡狀況的變化做出的最直接的反應,可以使整體網絡的擁塞控制靈敏度得到提高。

圖2 隊列時間片的處理流程圖Fig.2 Processing flow chart of queue time slice
本文采用網絡仿真軟件NS2來驗證在負荷相對較大的網絡環境下,采用該擁塞控制機制可以讓不同的網絡通信進程平等地分享帶寬,并且在出現網絡擁塞時,UDP流也不會搶占TCP的帶寬資源。仿真實驗的網絡拓補圖如圖4所示。源節點S1運行三個通訊進程,依次是TCP進程P1,UDP進程P2,TCP進程P3。P1、P3、P3分別同時發送1000M流量,通過路由器R1、R2,到達目標節點D1、D2、D3。如圖3所示。

圖3 仿真拓補結構Fig.3 Simulation topology architecture
我們分別采用無緩沖隊列管理的發送端和有緩沖隊列管理的發送端進行數據包傳送實驗,并對3個進程平均傳輸速率和傳輸時間進行記錄。通過統計分析發現,在第一種情況下,UDP的帶寬利用率為71.76%,TCP的帶寬利用率分別為13.75%、14.49%,UDP出現了搶占TCP帶寬資源的現象。在第二種情況下,UDP的帶寬利用率下降到了41.25%,TCP的帶寬利用率提高到了28.91%和29.84%,雖然UDP帶寬占有仍然保持了一定的優勢,但比例上已經降低到了一個相對合理的程度,不足以影響到TCP應用的正常通訊,基本實現了帶寬資源的公平使用。
隨著多媒體流量在互聯網上快速地增加,如何使這些基于UDP協議的多媒體數據流以相對友好的方式和TCP流量共享有限的帶寬是目前擁塞控制領域比較突出問題。本文針對這個問題,提出了基于網絡層發送端緩沖隊列管理的擁塞控制機制,對TCP和UDP數據流實施公平的流量控制,并且基于最直接的ICMP擁塞反饋方式,可以實現對網絡系統的高效擁塞控制。