龔顯麗 王嘉梅 房曉麗 王兵
云南民族大學電氣信息工程學院 云南 650500
慢開始沖突避免算法是 TCP傳輸過程中慢開始和擁塞避免這兩種方法的總稱,是因特網(wǎng)建議標準RFC 2581定義的擁塞控制的四種方法中的兩種。后來在這兩種擁塞控制方法的基礎之上又做出了一些改進,分別是RFC 2582和RFC 3390中的快重傳(Fast retransmit)和快恢復(Fast recovery)算法,由于引進了后面兩種改進算法,最原始的慢開始和擁塞避免算法中已經(jīng)丟棄不用。隨著信息傳送量的逐漸增大和網(wǎng)絡組成的日益復雜,網(wǎng)絡發(fā)生擁塞的可能性也越來越大。如果不對網(wǎng)絡擁塞進行有效的控制和在網(wǎng)絡發(fā)生擁塞時使網(wǎng)絡能及時恢復到正常狀態(tài),就會造成嚴重的網(wǎng)絡擁塞,甚至導致網(wǎng)絡崩潰。因此,網(wǎng)絡擁塞的避免和控制成為越來越重要和急待解決的問題。擁塞控制是 TCP協(xié)議研究的重要內(nèi)容。目前,標準的TCP協(xié)議實現(xiàn)都包含了一些避免和控制網(wǎng)絡擁塞的算法。但是,現(xiàn)有的擁塞控制算法都有一些局限性。因此,對TCP擁塞控制算法進行進一步的研究具有重要的理論和應用價值。
提出這兩個算法是基于如下的考慮:如果發(fā)送方設置的超時計時器時限已到但還沒有收到確認,那么很可能是網(wǎng)絡出現(xiàn)了擁塞,致使報文段在網(wǎng)絡中的某處被丟棄。在這種情況下,TCP馬上把擁塞窗口cwnd減小到1,并執(zhí)行慢開始算法,同時把慢開始門限值ssthresh減半。
快重傳算法在接收方做了一些改進,首先要求接收方每收到一個失序的報文段后就立即發(fā)出重復確認(為的是使發(fā)送方及早知道有報文段沒有到達對方)而不要等待自己發(fā)送數(shù)據(jù)時才進行捎帶確認。
與快重傳對應,快恢復是在發(fā)送方做了一些改進??旎謴椭饕^程有以下兩點:
(1)當發(fā)送方連續(xù)收到三個重復確認時,就執(zhí)行“乘法減小”算法,把慢開始門限 ssthresh減半。這是為了預防網(wǎng)絡發(fā)生擁塞。請注意,接下去不執(zhí)行慢開始算法。
(2)由于發(fā)送方現(xiàn)在認為網(wǎng)絡很可能沒有發(fā)生擁塞(如果網(wǎng)絡發(fā)生擁塞,就不會一連有好幾個報文段到達接收方,就不會導致接收方連續(xù)發(fā)送重復確認),因此與慢開始不同之處是現(xiàn)在不執(zhí)行慢開始算法(即擁塞窗口 cwnd現(xiàn)在不設置為1),而是把cwnd值設置為慢開始門限ssthresh減半后的數(shù)值,然后開始執(zhí)行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。
圖1 快重傳和快恢復示意圖
從圖1中可以觀察得到,使用快重傳和快恢復算法的情況,在網(wǎng)絡出現(xiàn)擁塞之后,其數(shù)據(jù)報文段的傳輸速度恢復的要比慢開始算法快得多。改進了的慢開始擁塞避免算法,大大增加了網(wǎng)絡利用率。
以下先給出利用Visual C++的仿真結果,如圖2所示。
圖2 傳輸輪次與門限值關系示意圖
從圖2中可以看出,當傳輸輪次達到一定限度時,慢開始門限ssthresh的值有可能降至最低值2*MSS(MSS定義為允許發(fā)送的最大報文段長度)。從圖中可以看出,這種發(fā)送效率是比較低下的。每一次檢測到網(wǎng)絡出現(xiàn)擁塞時,都要從最低慢開始門限慢慢增加,這種情況在網(wǎng)絡狀況不是太理想時,避免網(wǎng)絡沖突比較有效的方法。但如果在上述情況之后突然出現(xiàn)網(wǎng)絡狀況突然轉(zhuǎn)良,即每一次遇到網(wǎng)絡擁塞之間的時間間隔拉的很開了,這個時候在每一次出現(xiàn)了網(wǎng)絡擁塞后,再從 2*MSS慢慢的加一恢復就顯得比較慢了。因此,本文試圖在此處對慢開始和擁塞避免算法做出改進。
在發(fā)送端發(fā)送數(shù)據(jù)時,加入統(tǒng)計機制。統(tǒng)計機制在慢開始門限ssthresh達到最低值2*MSS時,開始統(tǒng)計。統(tǒng)計每兩次網(wǎng)絡出現(xiàn)擁塞之間,經(jīng)歷的傳輸輪次(記為W)。統(tǒng)計次數(shù)可以根據(jù)實際情況實際處理,下文會給出詳細算法。記錄W出現(xiàn)的情況,然后按照統(tǒng)計學的方法,得出W的分布,以及均值,方差等。表1是根據(jù)仿真結果得出的統(tǒng)計數(shù)據(jù)。
表1 仿真結果統(tǒng)計數(shù)據(jù)
根據(jù)表1的統(tǒng)計結果計算得出均值如下:
在統(tǒng)計模塊統(tǒng)計了足夠的次數(shù)之后,根據(jù)計算得出的均值和方差,確定網(wǎng)絡信道狀況是否轉(zhuǎn)良。若在統(tǒng)計完成之后,且兩次阻塞之間的輪次間隔大于某一值S,則采用適當?shù)倪f增算法(后面會給出詳細討論),加大慢開始門限的值。
(1)統(tǒng)計模塊檢測慢開始門限ssthresh的值,如果ssthresh值等于2,則開始統(tǒng)計。
(2)當網(wǎng)絡擁塞出現(xiàn)至少兩次后,記錄當前擁塞與前一次擁塞之間的經(jīng)歷的傳輸輪次,得到一次統(tǒng)計樣本X[i],并且記錄當前出現(xiàn)的擁塞的總次數(shù)i。
注:ε要根據(jù)網(wǎng)絡實際情況調(diào)整。
(1)在慢開始門限達到最低值前,以快重傳和快恢復的慢開始和擁塞避免算法控制慢開始門限。
(2)在達到最低限度后,以3.1中的算法開始統(tǒng)計,在統(tǒng)計停止之前,仍然按照第一步中的算法控制慢開始門限,在3.1的算法停止后。記錄每一次的擁塞出現(xiàn)時,已經(jīng)達到的數(shù)據(jù)傳輸速度Z[i],則下一次的慢開始門限為下式。
采用上述控制方法后,擁塞窗口接入控制過程示意圖如圖3所示。
圖3 擁塞窗口接入控制過程示意圖
從圖3中可以觀察得到,當ssthresh的值降至最低時,也可以較快的恢復傳輸速度,不用在達到最低值之后,每一次出現(xiàn)擁塞都從2開始慢慢增加。當然本改進算法在網(wǎng)絡情況出現(xiàn)極端不利時,慢開始門限也會慢慢收斂,不至于出現(xiàn)慢開始門限減不下來的情況。
本文提出的 TCP流量控制算法是繼快重傳和快恢復后對慢開始和擁塞避免算法的又一改進。它具有一定的實際應用價值。
[1]謝希仁.計算機網(wǎng)絡(第5版).電子工業(yè)出版社.2008.
[2]李建東.盛敏.通信網(wǎng)絡基礎.高等教育出版社.2004.
[3]陳鳴等.計算機網(wǎng)絡實驗教程.從原理到實踐.機械工業(yè)出版社.2007.
[4]季福坤.計算機網(wǎng)絡基礎.人民郵電出版社.2008.
[5]高傳善等.數(shù)據(jù)通信與計算機網(wǎng)絡.高等教育出版社.2004.