張宗福
(廣東江門職業技術學院 廣東江門 529090)
網絡擁塞指的是當網絡中存在過多的數據包時,網絡的性能就會下降。在網絡通信的過程中,網絡擁塞是造成延遲和吞吐量等性能指標下降的主要原因,是影響帶寬和緩存等網絡資源利用率的關鍵因素。網絡擁塞的根本原因是用戶提供給網絡的負載大于網絡資源容量和處理能力;直接原因是INTERNET中的存儲空間不足、帶寬容量不足及處理機處理能力較弱等[1]。網絡擁塞如果不加以控制,往往會導致惡性循環,因此,網絡擁塞已成為制約網絡發展和應用的一個瓶頸,研究如何有效解決擁塞問題對于提高網絡性能有著特別重要的意義。
Jacobson在TCP中增加的擁塞控制算法,提出了著名的“慢啟動”、“擁塞避免”、“快速重傳”和“快速恢復”4個算法。這4個算法是TCP擁塞控制的核心算法,是Internet上主要使用的端系統擁塞控制機制。雖然這些算法在Internet中執行能有效的控制擁塞,避免擁塞崩潰現象的發生,但是實質上這是一種較保守的策略,它并非在所有的網絡條件下都能保證其良好的性能。慢啟動算法中存在的問題尤為突出,比如丟包嚴重、網絡資源利用率低、延遲增加以及傳輸延遲較大等。
文章將對Internet中的TCP/IP擁塞控制進行探討,針對TCP擁塞控制策略中的慢啟動階段存在的問題,提出一種改進的基于歷史連接參數的擁塞控制算法,并對慢啟動算法作了相應的改進,并使用NS2對研究內容進行仿真實現,為有效控制擁塞提供一種新的解決方案。
TCP擁塞控制由慢啟動、擁塞控制、快速重傳和快速恢復4個核心算法組成。這4個基本算法互相聯系,是目前在Internet上主要使用的擁塞控制機制。慢啟動是其中的一個關鍵算法,主要思想是:為了解決擁塞的問題,新建立的TCP連接不是一開始就發送大量數據,而是逐步增加每次發送的數據量,也就是說,當建立一個新的TCP連接時,可以把擁塞窗口(cwnd)初始設置為一個數據包的大小,源端按擁塞窗口(cwnd)的大小發送數據,每當接收端收到一個確認信號(ACK),擁塞窗口(cwnd)就會自動增加一個數據包的發送量,這樣擁塞窗口(cwnd)就將隨著回路響應時間(RTT)的增長而呈指數型增長,源端向網絡發送的數據量也將隨之而急劇增加。在慢啟動策略中,要達到每個RTT發送W 個數據包所需要的時間僅為RTT×logW。由于在發生擁塞時,擁塞窗口會減半或降到1,因此慢啟動確保了源端的發送速率最多是鏈路帶寬的2倍。
雖然慢啟動策略在TCP擁塞控制機制中運用能有效地避免擁塞現象,但越來越多的研究表明,這是一種比較保守的策略,并不是在所有的網絡條件下都能保證良好的性能,存在以下3個問題:
①建立新的TCP連接時,在慢啟動階段,由于發送方無法了解到瓶頸鏈路的帶寬,所以在每個回路響應時間(RTT)內都會將擁塞窗口(cwnd)的數量增加一倍,假如慢啟動閾值(ssthresh)比較大,發送方窗口也增加到足夠大時,連接將會丟失大約一半的數據包;
②TCP慢啟動在傳輸數據前,是要先設定好參數,然后按照參數開始傳輸的,取擁塞窗口(cwnd)數為1個數據包大小,取慢啟動閾值(ssthresh)為64個數據包大小,TCP連接在閑置一段時間后,再使用慢啟動算法重新開始通信,當網絡可用帶寬較大時,會造成網絡資源利用率降低及延遲增加;
③雖然TCP給予窗口的擁塞控制機制對于傳輸大批量文件具有良好的適應性,但是當這一機制為萬維網應用等短小數據流服務時性能較差,往往需要幾個RTT時間探測合適的網絡帶寬,傳輸延遲較大[2]。
針對慢啟動算法中存在的問題,人們已經提出了很多解決方案,在相關研究的基礎上提出一個基于歷史連接參數和令牌技術的改進算法,通過調整慢啟動階段初始參數的設置來提高TCP的性能[3]。在擁塞控制的慢啟動階段,讓相類似的連接實例共享擁塞控制信息庫,利用一個緩存表把類似的連接實例的相關參數保存下來,如果下次需要建立相類似的連接時,可以使用該表中的歷史連接參數對新的連接進行初始化,避免了重新探測網絡帶寬的過程,減少了傳輸延遲。
但是,往往根據緩存表信息設置的初始窗口(cwnd)會大于一個數據包的大小,在建立連接時,如果在開始進行數據傳輸時不采取相應的措施,容易造成大量的突發數據在很短的時間內注入網絡,加重擁擠程度,為了避免這一情況,可在發送方引入令牌控制的思想,使用RTT/cwnd作為令牌的生成速度,用來調節初始窗口中的數據包在一個RTT時間內均勻發送[4],一直到確認信號(ACK)自計時開始。
基于前面的算法思想,該算法只需要對發送方進行修改,具體算法如下:
①建立一個緩存表,用于存放連接參數(如目標主機地址、cwnd、ssthresh、RTT等),當每一次建立新的連接時,根據歷史記錄,如存在與之匹配的歷史記錄,則從緩存表中取出相應的信息,然后對新的連接的參數進行初始化(RTT,ssthresh值保持不變),cwnd值取決于上一個連接結束前是處于慢啟動階段還是擁塞避免階段,如果是在慢啟動階段,cwnd的值設為原值的1/2,如在擁塞避免階段,cwnd的值設為原值減1;
②發送方在傳輸數據的過程中,如果遇到cwnd值減少,則將當前的擁塞參數保存在緩存中,然后使用如下方法計算并存儲擁塞參數的初始值:t=now-times,cwnds=(1-f(α,t))×cwndc+f(α,t)×cwnds),其中(0≤f(α,q)≤1,0≤α≤1),t是該記錄在緩存中的存儲時間,now是系統當前時間,times是該記錄被存儲在緩存中的時間,cwnds是當前緩存表中保存的擁塞窗口大小,cwndc是當前連接獲得的擁塞窗口大小。值得注意的是擁塞參數保存的時間越長,反映網絡當前狀態的可能性越小,所以,在保存擁塞參數時,必須考慮時間的影響;
③當根據緩存信息設置好初始參數并建立一個新的連接時,初始窗口的大小往往大于一個數據包,為了避免初始窗口中的大量數據包注入網絡,可使用令牌技術控制數據包須在第一個RTT內均勻發送,將突發的數據流轉化為相對平緩傳輸的數據流。令牌機制僅在發送窗口中使用,采用令牌機制時,發送方在發送前先調用申請令牌的函數,獲得發送令牌,每獲得一個令牌就發送一個數據包,令牌的產生速度由RTT/cwnd來確定,這樣就確保了在第一個RTT時間內數據包是按照一定的時間間隔發送的,降低了數據的突發性。
NS2是一種針對網絡技術的,面向對象的、離散事件驅動的網絡仿真模擬平臺,能夠仿真多種局域網和廣域網性能。NS2仿真分2個層次:①是基于OTcl編程的層次。利用NS已有的網絡元素實現仿真,無需修改NS本身,只需編寫OTcl腳本;②是基于C++和OTcl編程的層次。如果NS中沒有所需的網絡元素,則需要對NS進行擴展,添加所需網絡元素,即添加新的C++和OTcl類,編寫新的OTcl腳本[5]。
進行網絡仿真前,首先分析仿真涉及哪個層次,假設用戶已經完成了對NS的擴展,或者NS所包含的構件已經滿足了要求,那么進行一次仿真的步驟大致如下[6]:
①開始編寫OTcl腳本。首先配置模擬網絡拓撲結構,此時可以確定鏈路的基本特性,如延遲、帶寬和丟失策略等;
②建立協議代理,包括端設備的協議綁定和通信業務量模型的建立;
③配置業務量模型的參數,從而確定網絡上的業務量分布;
④設置Trace對象。NS通過Trace文件來保存整個模擬過程。仿真完后,用戶可以對Trace文件進行分析研究;
⑤編寫其他的輔助過程,設定模擬結束時間,至此OTcl腳本編寫完成;
⑥用NS解釋執行剛才編寫的OTcl腳本;
⑦對Trace文件進行分析,得出有用的數據;
⑧調整配置拓撲結構和業務量模型,重新進行上述模擬過程。
根據上述仿真步驟,運用NS2進行仿真分析如下:
⑴編寫OTcl腳本
配置模擬網絡拓撲結構,對應的拓撲結構圖如圖1所示。

圖1 拓撲結構圖
⑵各時刻進程信息:
時刻與進程信息如下:

⑶演示過程與分析
源端開始向接收端發送報文段,擁塞窗口(cwnd)大小為1時,發送0號分組,當接收到0號ACK后,擁塞窗口(cwnd)增加到2,發送1,2號分組,接收到1,2號ACK后,同理,按指數規律增加擁塞窗口,擁塞窗口(cwnd)大小增加到8后,一直保持在最大值8上。發送完所有38個分組,收到31號ACK后,FTP傳送結束。從以上過程數據可以看出,經過改進后算法,在慢啟動后期,擁塞窗口cwnd越接近慢啟動閾值,ssthresh增長越趨于平緩,最后能平滑地過渡到擁塞避免階段[7],能很好地解決慢啟動階段存在的問題,有效地對網絡擁塞進行控制。
慢啟動算法是網絡擁塞控制中的一種重要的算法,在網絡建立連接或重傳超時的情況下,都會轉入慢啟動階段,慢啟動算法的好壞對于網絡擁塞控制的性能有著直接的影響。一個好的慢啟動算法能夠降低慢啟動階段數據包的丟棄率,提高鏈路的利用率,還能降低數據傳輸的延遲[8]。文章提出的基于歷史連接參數和令牌技術的改進算法,通過調整慢啟動階段初始參數的設置來提高TCP的性能。通過NS2仿真分析也證明了改進的慢啟動算法的有效性。
[1]劉文遠,馮 波,龍承念等.一種新的TCP 擁塞控制慢啟動策略[J].小型微型計算機系統,2005,26(1):23-25.
[2]林 荔.基于擁塞控制和資源調節的DDOS 攻擊防范策略[J].計算機與網絡,2011,37(18):71-73.
[3]王 強,普杰信,劉 偉.TCP 擁塞控制慢啟動策略的研究[J].微電子學與計算機,2007,24(12):210-212.
[4]陳 晶,鄭明春,孟 強.一種基于歷史連接的網絡擁塞控制算法及其性能分析[J].計算機研究與發展,2003,40(10):1470-1475.
[5]劉星宇.TCP 擁塞控制算法的NS 模擬實驗[J].實驗技術與管理,2011,28(9):79-81.
[6]杜玉林,張術平,王 煒.隨機早期檢測算法公平性的改進[J].計算機與網絡,2009,35(3):112-115.
[7]張宗福.無線局域網安全問題及解決方案[J].計算機安全,2011(6):48-51.
[8]黃 敏,張鵬麗,段 焰.基于Petri 網的Internet 擁塞控制慢啟