文獻(xiàn)標(biāo)識(shí)碼: A
隨著通信網(wǎng)絡(luò)的不斷發(fā)展,不同類型的網(wǎng)絡(luò)并存成為目前通信領(lǐng)域的一種普遍現(xiàn)象,有線/無線混合網(wǎng)絡(luò)成為目前通信研究的一個(gè)熱點(diǎn),通常情況下這種有線/無線混合網(wǎng)絡(luò)被稱為異構(gòu)網(wǎng)絡(luò)。異構(gòu)網(wǎng)絡(luò)的整體性能受TCP協(xié)議算法的影響,所以提高TCP協(xié)議性能對(duì)提高異構(gòu)網(wǎng)絡(luò)的整體性能來說是非常必要的。目前應(yīng)用最廣泛的TCP協(xié)議是TCP Reno協(xié)議,它是為有線網(wǎng)絡(luò)設(shè)計(jì)的,在有線網(wǎng)絡(luò)環(huán)境中性能表現(xiàn)良好。由于異構(gòu)網(wǎng)絡(luò)中有著較高的誤碼率,較大的帶寬延時(shí)積,鏈路帶寬不對(duì)稱等特性,使得傳統(tǒng)的TCP Reno協(xié)議應(yīng)用在異構(gòu)網(wǎng)絡(luò)環(huán)境中性能低下。因此如何提高異構(gòu)網(wǎng)絡(luò)下的TCP性能已經(jīng)成為了一個(gè)研究熱點(diǎn)[1-3]。
目前改善TCP協(xié)議在異構(gòu)網(wǎng)絡(luò)環(huán)境下的性能的方法主要分為以下三類:鏈路層方法、分離連接方法和端到端方法。
鏈路層方法是通過本地重傳和前向糾錯(cuò)屏蔽發(fā)送端與鏈路相關(guān)的丟包。但由于鏈路層協(xié)議與高層協(xié)議都有獨(dú)立的差錯(cuò)控制功能,存在一定的重復(fù)性,相互競(jìng)爭(zhēng)會(huì)降低無線信道的利用率,導(dǎo)致端到端吞吐量下降。代表性協(xié)議是Snoop[4]。
分離鏈接方法是在基站處將TCP連接分成有線連接和無線連接兩部分:有線連接部分使用傳統(tǒng)的TCP協(xié)議,無線連接部分使用改進(jìn)的TCP協(xié)議。它破壞了端到端的TCP語義連接性。代表性協(xié)議是Indirect-TCP[5]。
端到端方法只修改TCP發(fā)送端和接收端的協(xié)議,保證了端到端的TCP語義連接性。代表性協(xié)議是TCP Westwood[6]。該協(xié)議在發(fā)端監(jiān)視收到的ACK數(shù)據(jù)流,并以此來估計(jì)當(dāng)前鏈路的可用帶寬。一旦丟包,發(fā)端將利用估計(jì)的帶寬對(duì)慢啟動(dòng)閾值和擁塞窗口進(jìn)行適當(dāng)設(shè)置,保證了網(wǎng)絡(luò)的快速恢復(fù)并可更有效地避免擁塞。
本文提出了一種適用于異構(gòu)網(wǎng)絡(luò)的TCP算法TCP -BM(TCP Based Measurement),其基本思想是利用往返時(shí)延RTT來控制擁塞窗口的增長速度,使發(fā)送窗口穩(wěn)定在一個(gè)比較理想的狀態(tài),在網(wǎng)絡(luò)發(fā)生丟包后,通過對(duì)RTT的實(shí)時(shí)分析判斷出丟包原因,從而采取相應(yīng)的控制措施。
1 傳統(tǒng)TCP Reno協(xié)議及分析
1.1 TCP Reno協(xié)議流程
TCP Reno協(xié)議包括慢啟動(dòng)、擁塞避免、快速重傳和快速恢復(fù)4個(gè)階段:
(a)慢啟動(dòng)階段:TCP將擁塞窗口值設(shè)為1,發(fā)送端每收到一個(gè)新的ACK就把擁塞窗口值增加一個(gè),即W=W+1,W表示擁塞窗口;
(b)擁塞避免階段:發(fā)送端每收到一個(gè)新的ACK就把擁塞窗口值增加擁塞窗口值的倒數(shù),即W=W+1/W;
(c)丟包標(biāo)志為3個(gè)重復(fù)ACK:發(fā)送端重傳丟失的包,并且在窗口范圍內(nèi)繼續(xù)發(fā)送新的數(shù)據(jù)包,此后發(fā)送端每收到1個(gè)重復(fù)的ACK就將擁塞窗口值增加1;
(d)丟包標(biāo)志為計(jì)時(shí)器超時(shí):發(fā)送端重傳丟失的包,然后將慢啟動(dòng)閾值設(shè)為當(dāng)前窗口的一半,將擁塞窗口設(shè)為1。
因?yàn)門CP協(xié)議是端到端的協(xié)議,因此這里的說明只涉及發(fā)送端和接收端。在連接開始時(shí),發(fā)送端執(zhí)行(a), 直到擁塞窗口值大于(或等于)慢啟動(dòng)閾值或者出現(xiàn)丟包:(1)如果是出現(xiàn)丟包,發(fā)送端執(zhí)行策略與丟包標(biāo)志相關(guān),如果丟包標(biāo)志為3個(gè)重復(fù)ACK,則發(fā)送端執(zhí)行(c), 直到發(fā)送端收到新的ACK為止,然后發(fā)送端TCP將擁塞窗口和慢啟動(dòng)閾值都設(shè)為快速重傳前擁塞窗口值的一半,重新開始擁塞避免階段;如果丟包標(biāo)志為計(jì)時(shí)器超時(shí),則發(fā)送端執(zhí)行(d),重新開始慢啟動(dòng)階段;(2)如果是擁塞窗口大于(或等于)慢啟動(dòng)閾值,則發(fā)送端執(zhí)行(b),該策略一直持續(xù)到出現(xiàn)丟包為止,一旦出現(xiàn)丟包,發(fā)送端執(zhí)行策略同慢啟動(dòng)階段出現(xiàn)丟包時(shí)采取的策略一樣。
1.2 TCP Reno協(xié)議分析
快速恢復(fù)算法避免了在快速重傳之后通道為空的現(xiàn)象,從而避免了在單個(gè)報(bào)文丟失后重新開始慢啟動(dòng)階段。TCP發(fā)送端在每個(gè)往返時(shí)延內(nèi)最多重傳1個(gè)包,因此在只有1個(gè)數(shù)據(jù)包丟失的情況下,該協(xié)議性能最佳。當(dāng)1個(gè)窗口中有2個(gè)報(bào)文丟失時(shí),在TCP發(fā)送端快速重傳和快速恢復(fù)就將被執(zhí)行2次,因?yàn)樵诳焖倩謴?fù)階段窗口的調(diào)整策略為ssthresh=cwnd/2,cwnd=ssthresh,因此慢啟動(dòng)閾值和擁塞窗口都將被減小2次,這是不必要的。當(dāng)有更多數(shù)據(jù)包丟失時(shí),根據(jù)Reno協(xié)議TCP發(fā)送端就必須等待重發(fā)計(jì)時(shí)器超時(shí)才能恢復(fù)。
2 TCP-BM協(xié)議
該算法的基本思想是在慢啟動(dòng)階段根據(jù)網(wǎng)絡(luò)的實(shí)時(shí)狀況來合理地調(diào)節(jié)擁塞窗口的增長速度;將擁塞避免過程分為正增長過程和負(fù)增長過程,從而使發(fā)送窗口穩(wěn)定在比較理想的狀態(tài)而有預(yù)見性地避免擁塞。在網(wǎng)絡(luò)發(fā)生丟包后,通過對(duì)RTT的實(shí)時(shí)分析以及估計(jì)的帶寬判斷出丟包原因,從而采取不同的恢復(fù)措施。下面詳細(xì)介紹TCP-BM協(xié)議的幾個(gè)階段,未說明部分沿用傳統(tǒng)的TCP Reno協(xié)議。
2.1慢啟動(dòng)階段
開始時(shí)數(shù)據(jù)量較少,對(duì)帶寬的利用率較低,因此可以使擁塞窗口較快地增長;當(dāng)擁塞窗口增大到一定程度時(shí),減小其增長速度,使其相對(duì)緩慢并且平滑地增加;最后當(dāng)擁塞窗口的大小接近于慢啟動(dòng)閾值時(shí),再次減小其增加速度,使其更加緩慢且平滑地接近于慢啟動(dòng)閾值。算法描述如下:
If (cwnd<ssthresh)
If (cwnd*(1+(double)(rtt/rttmin)) <ssthresh)
cwnd+=(double)(rtt/rttmin);
else if (2*cwnd < ssthresh)
cwnd+=1;
else cwnd+=(double)(rttmin/ rtt)
其中,cwnd表示擁塞窗口;ssthresh表示慢啟動(dòng)閾值,rtt表示當(dāng)前的往返時(shí)延值,它反映當(dāng)前的網(wǎng)絡(luò)狀態(tài);rttmin表示往返時(shí)延歷史數(shù)據(jù)中的最小值,它反映歷史上網(wǎng)絡(luò)的最好狀態(tài)。在連接開始時(shí),擁塞窗口大小設(shè)為1,以后每收到一個(gè)ACK,擁塞窗口就增加(double)(rtt/rttmin);擁塞窗口增大到一定程度時(shí)降低其增長速度,變?yōu)槊渴盏揭粋€(gè)ACK,擁塞窗口就增加1;最后當(dāng)擁塞窗口接近于慢啟動(dòng)閾值時(shí),擁塞窗口以更緩慢的方式進(jìn)行增長,cwnd+=(double)(rttmin/rtt), 直到擁塞窗口大于(或等于)慢啟動(dòng)閾值或者出現(xiàn)丟包為止。
2.2 擁塞避免階段
當(dāng)擁塞窗口大于(或等于)慢啟動(dòng)閾值后,TCP發(fā)送端發(fā)送的數(shù)據(jù)量已經(jīng)向網(wǎng)絡(luò)所能容忍的一個(gè)限度靠近,此時(shí)不能再使擁塞窗口像慢啟動(dòng)階段那樣快速地增長,因此利用往返時(shí)延值將此階段分為正增長和負(fù)增長2個(gè)階段,使傳輸過程能更長時(shí)間地穩(wěn)定在該階段。算法描述如下:
if((rtt/rttmin)< A
cwnd = cwnd + B1*increment;
else
cwnd = cwnd - B2*increment;
令T=rtt/rttmin,則T表示當(dāng)前往返時(shí)延值是往返時(shí)延歷史數(shù)據(jù)中的最小值的多少倍,即當(dāng)前的網(wǎng)絡(luò)狀態(tài)比歷史上網(wǎng)絡(luò)的最好狀態(tài)差多少;A表示擁塞閾值,即當(dāng)前往返時(shí)延值達(dá)到往返時(shí)延歷史數(shù)據(jù)中的最小值的A倍時(shí),網(wǎng)絡(luò)將趨于擁塞。在擁塞避免階段,如果T≥A,則說明網(wǎng)絡(luò)趨于擁塞,此時(shí)TCP發(fā)送端不宜再增加擁塞窗口,相反,TCP發(fā)送端將減小擁塞窗口以避免擁塞,擁塞窗口減小策略為cwnd=cwnd-B2*increment,B2>0;如果T<A,說明網(wǎng)絡(luò)還沒有趨于擁塞,此時(shí)TCP發(fā)送端可以增加擁塞窗口大小,進(jìn)一步提高網(wǎng)絡(luò)帶寬利用率,擁塞窗口增加策略為cwnd=cwnd+B1*increment,B1>0; B1、B2為調(diào)整因子,B1用來增加擁塞窗口的大小,過大會(huì)使擁塞窗口增長過快,容易導(dǎo)致?lián)砣麃G包,過小則無法充分利用網(wǎng)絡(luò)資源;B2用來減小擁塞窗口的大小,有預(yù)見性地避免擁塞。B1、B2相互制約,使得擁塞窗口在增大到一定程度以后開始減小,這樣可以使擁塞窗口維持在一個(gè)理想的發(fā)送狀態(tài),而使網(wǎng)絡(luò)不至于發(fā)生擁塞。經(jīng)過多次仿真分析A取1.5,B1取1,B2取0.5能達(dá)到較好的性能。
2.3快速重傳和快速恢復(fù)
網(wǎng)絡(luò)發(fā)生丟包后,TCP發(fā)送端采取快速重傳措施,重傳丟失的報(bào)文,然后根據(jù)丟包標(biāo)志的不同,通過比較最新的往返時(shí)延值和前一次的往返時(shí)延值以及估計(jì)的帶寬值來區(qū)分丟包原因,從而采取不同的控制措施。算法描述如下:
If (dupacks)
if(rtt>=lastrtt&&bw2<bw1)
ssthresh= cwnd /2, cwnd =ssthresh;
if (timeout)
ssthresh=cwnd/2,cwnd=1;
其中,dupacks表示3個(gè)重復(fù)ACK的情況,lastrtt表示上一次的往返時(shí)延值,bw2和bw1分別表示第二個(gè)重復(fù)ACK時(shí)的測(cè)量帶寬和第三個(gè)重復(fù)ACK時(shí)的測(cè)量帶寬(bw1=d/(t2-t1),bw2=d/(t3-t2),d表示ACK所確認(rèn)的報(bào)文段的長度,t1表示第一個(gè)重復(fù)ACK到來的時(shí)間,t2表示第二個(gè)重復(fù)ACK到來的時(shí)間,t3表示第三個(gè)重復(fù)ACK到來的時(shí)間),timeout表示計(jì)時(shí)器超時(shí)的情況。當(dāng)丟包標(biāo)志為dupacks時(shí),如果rtt≥lastrtt并且bw2<bw1,則認(rèn)為是網(wǎng)絡(luò)擁塞導(dǎo)致丟包,因此需要減小擁塞窗口和慢啟動(dòng)閾值,調(diào)整策略與傳統(tǒng)的TCP Reno協(xié)議方法相同;否則就認(rèn)為是無線誤碼導(dǎo)致網(wǎng)絡(luò)丟包,對(duì)慢啟動(dòng)閾值和擁塞窗口值不做調(diào)整。當(dāng)丟包標(biāo)志為timeout時(shí),因?yàn)橛?jì)時(shí)器超時(shí)是比3個(gè)重復(fù)ACK更嚴(yán)重的情況,所以此處沿用傳統(tǒng)的方法對(duì)擁塞窗口和慢啟動(dòng)閾值進(jìn)行調(diào)整,其調(diào)整策略見算法描述。
3 性能分析
在ns-2[7]仿真平臺(tái)上進(jìn)行仿真,其網(wǎng)絡(luò)拓?fù)淙鐖D1所示。網(wǎng)絡(luò)拓?fù)溆?段鏈路和4個(gè)節(jié)點(diǎn)組成,其中S表示TCP發(fā)送端,R表示路由器,BS表示基站,D表示TCP接收端,有線部分包括從發(fā)送端到路由器,從路由器到基站兩部分,最后一段為無線部分。其中發(fā)送端與路由器之間的有線鏈路帶寬為100 Mb/s,延遲為1 ms,路由器與基站之間的有線鏈路帶寬為100 Mb/s, 延遲為49 ms,基站與接收端之間的無線鏈路帶寬為1 Mb/s,延遲為0.01 ms。數(shù)據(jù)包的大小采用固定長度,其值設(shè)為1 000 byte,無線誤碼率設(shè)為0,仿真時(shí)間設(shè)為200 s,且只采用一個(gè)FTP數(shù)據(jù)流,該數(shù)據(jù)流在10 s開始,在200 s結(jié)束。
在上述仿真環(huán)境下比較TCP-BM協(xié)議和TCP Reno協(xié)議擁塞窗口隨時(shí)間的變化情況,結(jié)果如圖2所示。
圖2中,橫軸表示時(shí)間,單位為s,縱軸表示擁塞窗口大小,單位為packet。從圖2中不難看出,在整個(gè)200 s的仿真過程中,TCP Reno協(xié)議的擁塞窗口大小隨時(shí)間的變化非常劇烈,而TCP-BM協(xié)議的擁塞窗口的大小除了出現(xiàn)少數(shù)幾次較為劇烈的波動(dòng)之外,其余時(shí)間變化則較為平緩。對(duì)仿真追蹤所得到的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,TCP Reno協(xié)議的擁塞窗口最小值為1,最大值為26,且變化頻繁,變化范圍集中在10~18;而TCP-BM協(xié)議的擁塞窗口最小值為1,且只出現(xiàn)了屈指可數(shù)的幾次,最大值為21,穩(wěn)定之后變化范圍集中在13~17。
對(duì)擁塞窗口值在時(shí)間上進(jìn)行平均,TCP Reno協(xié)議的擁塞窗口平均值大小為13.10,而TCP-BM協(xié)議的擁塞窗口平均值大小為14.03,這說明TCP-BM協(xié)議發(fā)送量比TCP Reno協(xié)議有明顯增加,這必將會(huì)導(dǎo)致業(yè)務(wù)吞吐量的提高。
對(duì)擁塞窗口值的方差在時(shí)間上進(jìn)行平均可得TCP Reno協(xié)議的擁塞窗口值的平均方差大小為28.86,而TCP-BM協(xié)議的擁塞窗口值的平均方差為1.72,這表明了TCP-BM協(xié)議的擁塞窗口變化情況要比改進(jìn)前緩和得多,說明了TCP-BM協(xié)議的帶寬利用率較為穩(wěn)定。
對(duì)TCP Reno協(xié)議和TCP-BM協(xié)議吞吐量變化情況進(jìn)行比較,結(jié)果如圖3所示。
圖3中,橫軸表示時(shí)間,單位為s,縱軸表示吞吐量,單位為kb/s。從圖3中可以明顯看出,TCP-BM協(xié)議的吞吐量比TCP Reno協(xié)議有明顯的提高。對(duì)仿真數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析可知,TCP Reno協(xié)議的吞吐量從零開始,然后急劇增加,增加到500 kb/s左右后發(fā)生波動(dòng),且波動(dòng)幅度較大,60 s后趨于穩(wěn)定,最終穩(wěn)定在540 kb/s左右;TCP-BM協(xié)議的吞吐量從零開始,然后急劇增加,增加到600 kb/s左右開始緩慢地上升,分別在50 s和145 s左右時(shí)出現(xiàn)2次相對(duì)大的波動(dòng),這是因?yàn)槌霈F(xiàn)了計(jì)時(shí)器超時(shí)的情況。圖2中TCP-BM的擁塞窗口波動(dòng)也可以說明這一問題。最終其吞吐量穩(wěn)定在644 kb/s左右,TCP-BM協(xié)議的吞吐量比TCP Reno協(xié)議提高了大約19.3%。
最后對(duì)丟包率進(jìn)行統(tǒng)計(jì)分析,對(duì)上述仿真結(jié)果進(jìn)行計(jì)算可得,TCP Reno協(xié)議的丟包率為1.65%,而TCP-BM協(xié)議的丟包率為0.21%,對(duì)其進(jìn)行比較可發(fā)現(xiàn),TCP-BM協(xié)議的丟包率比TCP Reno協(xié)議的丟包率減小了1.44%,這也從一定程度上說明了TCP-BM協(xié)議的吞吐量比TCP Reno協(xié)議的吞吐量有所提高。
在傳統(tǒng)的TCP Reno協(xié)議的基礎(chǔ)上提出了一種適用于異構(gòu)網(wǎng)絡(luò)的TCP擁塞控制協(xié)議,該協(xié)議在慢啟動(dòng)階段根據(jù)往返時(shí)延值適當(dāng)調(diào)整擁塞窗口的增長速度,在擁塞避免階段利用當(dāng)前的往返時(shí)延與往返時(shí)延的歷史最小值的比值來控制擁塞窗口的增加與減小,不但能充分利用網(wǎng)絡(luò)資源,并且在一定程度上可以有預(yù)見性地避免擁塞,當(dāng)網(wǎng)絡(luò)發(fā)生丟包后,通過比較當(dāng)前的往返時(shí)延值與歷史記錄以及比較測(cè)量的帶寬,從而區(qū)分丟包原因,對(duì)擁塞窗口和慢啟動(dòng)閾值采取不同調(diào)整策略。經(jīng)過仿真驗(yàn)證,改進(jìn)后的TCP算法性能優(yōu)于傳統(tǒng)的TCP Reno協(xié)議。下一步工作是要進(jìn)一步改進(jìn)該算法,使之適用于更復(fù)雜的網(wǎng)絡(luò)環(huán)境。
參考文獻(xiàn)
[1] 曲大鵬,黃東軍. 一種新的適用于異構(gòu)網(wǎng)絡(luò)的TCP算法[J]. 計(jì)算機(jī)應(yīng)用, 2007,27(10):2437.
[2] 葛鴿,張國清.一種適用于異構(gòu)網(wǎng)絡(luò)的TCP協(xié)議設(shè)計(jì)及其仿真[J].系統(tǒng)仿真學(xué)報(bào),2004,16(12):2875.
[3] 葉進(jìn),王建新,龔皓. 無線/有線網(wǎng)絡(luò)中基于自適應(yīng)丟包區(qū)分的TCP改進(jìn)[J].通信學(xué)報(bào),2007,28(5):15-16.
[4] BAL K H, SASHA S, KATE R H. Improving reliable transport and handoff performance in cellular wireless networks[J]. ACM,Wireless Networks, 1995,1(4):469-481.
[5] BAKER A, BADRINATH B R. I-TCP: Indirect TCP for mobile hosts[A]. In the Proceedings of the 15th International Conference on Distributed Computing Systems,1995:136-143.
[6] CASETTI C, GERLA M, MASCOLO S, et al. TCP Westwood: Bandwidth estimation for enhanced transport over wireless links[A]. In Proceedings of ACM Modicums, 2001:287-297.
[7] The network simulator - ns-2 [EB/OL]. http://www.isi.edu/nsnam/ns/