摘 要: 互聯(lián)網業(yè)務的快速發(fā)展使得網絡擁塞日益嚴重,,因此如何減輕網絡擁塞也就成為當前研究的熱點。針對這一問題,,首先敘述了TCP擁塞控制的基本原理及其相關算法,;然后對擁塞控制算法進行了詳細分析并提出了自適應比例系數(shù)的新策略;最后對新策略進行NS2仿真,。仿真結果表明,,新方法提高了包投遞率,降低了端到端時延,。
關鍵詞: 擁塞控制,;自適應;NS2
21世紀以來,,計算機網絡發(fā)生了突飛猛進的發(fā)展,,各種新業(yè)務在互聯(lián)網上的應用也越來越廣泛,這就給帶寬有限的網絡帶來了巨大的負擔,,從而引發(fā)了嚴重的網絡擁塞問題,。
TCP是互聯(lián)網上應用極其廣泛的基于滑動窗口的擁塞控制協(xié)議。它使用了一種可靠的設計思路,,這種思路具有較為簡單,、擴展性強等特點。它能夠依據(jù)網絡的實際具體情況自動地調整擁塞窗口的大小,,使得TCP數(shù)據(jù)的發(fā)送能夠依據(jù)網絡的負擔自適應地變化,。但近年來,互聯(lián)網上的用戶越來越多,,業(yè)務量也隨之增加,,網絡擁塞問題亦越來越嚴重。因此,,人們對擁塞控制的研究重視程度亦越來越高,,先后提出了許多新的算法,如TCP Tahoe,、TCP Reno,、TCP New-Reno,、TCP sack、TCP Vegas[1],。這些算法著重研究了快重傳和快恢復機制,,而慢開始和擁塞避免并無過多涉及。但慢啟動和擁塞避免亦不能忽視,,因為這些策略的好壞對擁塞控制機制的影響同樣是巨大的,。針對該問題,本文提出了一種自適應比例系數(shù)的擁塞控制策略,。
1 TCP擁塞控制原理及相關算法
互聯(lián)網擁塞控制主要由傳輸層完成,,它通過改變一些主要的參數(shù)來降低發(fā)送端數(shù)據(jù)的發(fā)送速率。這些參數(shù)主要包括擁塞窗口cwnd(發(fā)送端一次最多發(fā)送的數(shù)據(jù)包的個數(shù))和慢開始門限ssthresh(慢開始階段與擁塞避免階段的分界點),。
早期的擁塞控制協(xié)議中,,發(fā)送端每發(fā)送一個報文就必須收到接收端返回的ACK后才能發(fā)送下一個報文。發(fā)送端在等待接收端發(fā)送ACK的期間內不發(fā)送任何報文,;當報文丟失時,,必須等到計時器超時后才能重發(fā)丟失的數(shù)據(jù)包。顯然,,這種策略嚴重地浪費了網絡的帶寬,,網絡傳輸數(shù)據(jù)的效率極其低下。
現(xiàn)在使用的擁塞控制協(xié)議采用了AMID[2]控制算法,,能夠達到較好的擁塞控制效果,,提高了網絡數(shù)據(jù)的傳輸效率,這種策略一般分為4個階段[3],,具體如下:
(1)慢開始階段,。在TCP建立連接之初,如果發(fā)送方將cwnd設置為較大值,,發(fā)送方有可能將較大的數(shù)據(jù)字節(jié)全部注入到網絡中,,但此時并不清楚網絡的狀況,因此就有可能引起網絡擁塞,。經實際證明,,最好的方法是試探一下,即由小到大逐漸增大發(fā)送端的cwnd數(shù)值,。通常發(fā)送方在開始發(fā)送數(shù)據(jù)報文段時將cwnd設置為一個最大的MSS數(shù)值,發(fā)送方每接收到接收方發(fā)來的一個ACK,,就把cwnd增加一個值,,直到cwnd增加到ssthresh(慢開始門限值),此時進入擁塞避免階段,,采取擁塞避免算法,。在采取擁塞避免算法之前,,擁塞窗口cwnd的值以指數(shù)方式增長。
(2)擁塞避免階段,。當cwnd值達到ssthresh(慢開始門限值)時,,此后進入擁塞避免階段,發(fā)送端的cwnd每經過一個RTT(往返時延)就增加一個MSS的大?。ǘ还茉跁r間RTT內收到了幾個接收端發(fā)送的ACK),。這樣,發(fā)送端cwnd就不再像慢開始階段那樣進行指數(shù)增長 ,,而是按線性規(guī)律增長(稱為加法增大),,這比慢開始算法的擁塞窗口增長速率緩慢得多。在沒有丟包之前,,該策略將一直持續(xù)下去,。當假定cwnd的數(shù)值增長到N(N=24)時,網絡出現(xiàn)超時(表明網絡擁塞了),。ssthresh置為N/2(為發(fā)送窗口數(shù)值的一半,,這種算法稱為乘法減小),cwnd重置為1,,并執(zhí)行慢開始算法,。當cwnd=12時改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長,,每經過一個RTT就增加一個MSS的大小,。
(3)快重傳階段。前面的慢開始和擁塞避免算法是在TCP早期使用的擁塞控制算法,,后來人們對其進行了改進,,因此就有了快重傳和快恢復。假設發(fā)送端發(fā)送了M1~M4這4個報文段,,當接收端收到M1和M2后,,就發(fā)出確認ACK2和ACK3。現(xiàn)假定M3丟失了,,接收端收到下一個M4,,發(fā)現(xiàn)其序號不對,但仍收下放在接收緩存中,,同時發(fā)出確認,,但發(fā)出的是重復的ACK3(不能發(fā)送ACK5,因為ACK5表示M4和M3都已經收到了),。這樣發(fā)送端知道現(xiàn)在可能是網絡出現(xiàn)的擁塞造成了分組丟失或是M3仍滯留在網絡中某處,,還需經過較長的時延才能到達接收端。發(fā)送端接著發(fā)送M5和M6,,接收端收到了M5和M6后,,還要分別發(fā)出重復的ACK3,。這樣發(fā)送端共接收到了4個ACK3,其中3個是重復,。如果快重傳算法規(guī)定,,當發(fā)送端連續(xù)收到3個重復的ACK時即可斷定有分組丟失了,就應立即重傳丟失的報文而不必繼續(xù)等待為M3設置的重傳計時器超時,。由此可知,,快重傳并非取消重傳計時器,而是在某些情況下更早地重傳丟失的報文段,。
(4)快恢復階段,。與快重傳配合使用的還有快恢復算法,當不使用快恢復算法時,,發(fā)送端若發(fā)現(xiàn)網絡出現(xiàn)擁塞就將擁塞窗口置為1,,然后執(zhí)行慢開始算法。但這樣做的缺點是網絡不能很快地恢復到正常狀態(tài),??旎謴退惴梢暂^好地解決這一問題。當發(fā)送端連續(xù)接收到3個重復的ACK時,,就采用乘法減小設置ssthresh,,與慢開始不同的是cwnd設置為ssthresh+3×MSS,然后執(zhí)行擁塞避免算法,,這樣可以使網絡快速恢復到正常水平(與cwnd設置為1相比),,大大地提高了網絡的吞吐量。
TCP擁塞控制算法效果圖如圖1所示,。
2 乘法減小及其存在問題
當假定cwnd的數(shù)值增長到N(N=24)時,,網絡出現(xiàn)超時(表明網絡擁塞了)。ssthresh置為N/2,,ssthresh的新數(shù)值為12,,這種算法稱為“乘法減小”。進一步說,,“乘法減小”是指不論在慢開始階段還是擁塞避免階段,,只要出現(xiàn)一次超時(即出現(xiàn)一次網絡擁塞),就將慢開始門限值ssthresh設置為當前的擁塞窗口值的1/2,。當網絡頻繁出現(xiàn)擁塞時,,ssthresh值就會下降得很快,以大大減少注入到網絡中的分組數(shù),。但是網絡擁塞極其頻繁時,,這種固定比例的減小策略就會存在問題,這種減小力度不夠大,仍會造成網絡十分擁堵,,甚至使得網絡發(fā)生崩潰;當網絡很少出現(xiàn)擁塞時,,這種固定的減小策略會使得注入網絡的分組數(shù)不夠多,,從而造成網絡帶寬得不到充分利用,造成網絡資源的浪費,。
3 一種新的變比例因子的乘法減小策略
針對固定比例因子的“乘法減小”策略容易出現(xiàn)的一些問題,,本文提出了一種新的變比例因子的策略,其主要思路是在數(shù)據(jù)傳送初期設置4個參數(shù):3個時間參數(shù)t1,、t2,、△t和比例因子p,依據(jù)3個時間參數(shù)的變化來動態(tài)調整比例因子p的大小,,從而使得比例因子p根據(jù)網絡的狀況自適應地變化,。
具體思路:引入3個時間參數(shù)a、b,、c和p(0<p<1),。t1是上次超時的時間,t2是本次超時的時間,,△t是本次超時與上次超時的時間差,,p是減小比例系數(shù)并賦初值為0.5。當出現(xiàn)超時時,,比較t2-t1與△t的大小,,(1)若t2-t1<△t,判斷p是否小于0.2,,如果p<0.2,,則p的值大小不變,且將t2-t的值賦給△t,,將t2的值賦給t1,;否則將p-0.2的值賦給p,將t2-t的值賦給△t,,將t2的值賦給t1,;(2)若t2-t1≥△t,判斷p是否小于0.8,,如果p>0.8,,則p的值大小不變,將t2-t的值賦給△t,,t2的值賦給t1,,否則將p+0.2的值賦給p,t2-t的值賦給△t,且將t2的值賦給t1,。新策略的算法描述大致如下,。
t1=初值;
t2=初值,;
p=0.5 ,;
if(超時)
{
t2=getcurrenttime();
if(t2-t1>=△t)
{
if(p>0.8)
{
p=0.9;
ssthresh=(int)p×cwnd;
△t=t2-t1;
t1=t2;
}
else
{
p+= 0.2,;
ssthresh=(int)p×cwnd,;
△t=t2-t1;
t1=t2;
}
}
else
{
if(p<0.2)
{
p=0.1;
ssthresh=(int)p×cwnd,;
△t=t2-t1;
t1=t2;
}
else
{
p-=0.2,;
ssthresh=(int)p×cwnd;
△t=t2-t1;
t1=t2;
}
}
}
本文所提出的動態(tài)變化系數(shù)策略如上所述,,新策略可以根據(jù)網絡狀態(tài)的好壞動態(tài)地調整系數(shù)p的大小,。
4 仿真
4.1 仿真場景
為了證明新策略的有效性,本文使用NS2[4]網絡仿真軟件對未改進的策略與改進后的策略進行了仿真對比,。本文使用的網絡拓撲圖如圖2所示,。
圖2中,s1,、s2為發(fā)送端,,t1、t2為干路的路由器,,r1,、r2為接收端。在上面的拓撲圖中,,建立了兩條鏈路,,一條為s1將數(shù)據(jù)通過干路路由器轉發(fā),將數(shù)據(jù)發(fā)送到r1,;另一條為s2將數(shù)據(jù)通過干路路由器轉發(fā),,將數(shù)據(jù)發(fā)送到r2。兩條鏈路均采用基于TCP的FTP連接,,傳輸速率為10 Mb/s,,延遲為2 ms,分組大小為1 000 B,。干路路由器t1,、t2之間構成瓶頸鏈路,傳輸速率為1.5 Mb/s,,延遲為50 ms,。
4.2 仿真結果分析
圖3,、圖4是新舊策略包到達率和端到端延時比較,可以看到,,新策略的到達率比原策略大,,這是因為新策略可以根據(jù)網絡狀態(tài)的好壞動態(tài)調整乘法比例因子。當網絡發(fā)生擁擠時,,新策略降低乘法因子,,減少數(shù)據(jù)包的發(fā)送,減小網絡負擔,,因此數(shù)據(jù)包到達的可能性提高,封包端到端時延減小,。
本文闡述了擁塞控制原理及算法并對算法做出了一些改進,,提出了自適應比例因子乘法減小策略。通過NS2仿真分析可知,,這種策略明顯提高了網絡的性能,。
參考文獻
[1] 王云濤,方建安,,張曉輝,,等.基于TCP Vegas的網絡擁塞控制改進算法[J].計算機應用研究,2009,,26(12):56-58.
[2] Yang Ming,,Hang Fuyan.AIMD-based congestion control for layered multicast[S].IEEE.2002,02:833-837.
[3] 謝希仁.計算機網絡[M].北京:電子工業(yè)出版社,,2006.
[4] 徐雷鳴,,龐博,趙耀.NS與網絡模擬[M].北京:人民郵電大學出版社,,2003.