周 亮,姜勝明,熊晨霖
(1.上海海事大學(xué) 信息工程學(xué)院,上海 201306; 2.上海市教育考試院 網(wǎng)絡(luò)信息中心,上海 200433;3.華南理工大學(xué) 電子與信息學(xué)院,廣州 510641)
傳輸控制協(xié)議(Transmission Control Protocol,TCP)在陸地互聯(lián)網(wǎng)上表現(xiàn)出良好的性能,但將其應(yīng)用于船舶自組網(wǎng)中,其性能顯著下降。傳統(tǒng)TCP協(xié)議總是認(rèn)為數(shù)據(jù)包的丟失是由于網(wǎng)絡(luò)擁塞造成的,而在船舶無線自組織網(wǎng)絡(luò)中,由于信道損耗、動態(tài)路由等問題,很容易造成丟包,而這種丟包并不是由于擁塞引起的。當(dāng)TCP應(yīng)用于無線自組織網(wǎng)絡(luò)中時,這種非擁塞的丟包就會造成TCP丟包即擁塞的誤判,而降低發(fā)送速率。最終造成:非擁塞時信道資源的浪費(fèi);擁塞時不利于快速解除擁塞。針對上述問題,研究者提出了多種針對無線自組網(wǎng)的TCP改進(jìn)方案[1-2]。但大多數(shù)改進(jìn)都是基于原TCP協(xié)議結(jié)構(gòu)進(jìn)行的,其擁塞控制[3]功能仍在傳輸層實(shí)現(xiàn)[4],只是在特定的環(huán)境或應(yīng)用中體現(xiàn)出某一方面的優(yōu)越性,而整體性能卻并不令人滿意,如移動自組網(wǎng)傳輸協(xié)議(Ad-hoc Transport Protocol,ATP)[5-6]、頻率自適應(yīng)傳輸控制協(xié)議(TCP with Adaptive Pacing,TCP-AP)[7]等。
Semi-TCP是對TCP協(xié)議體系的突破,其將原傳輸層中的擁塞控制功能下放到數(shù)據(jù)鏈路層[8],通過逐跳控制,能更準(zhǔn)確地判斷網(wǎng)絡(luò)擁塞狀況,提高擁塞控制效率。船舶自組網(wǎng)有節(jié)點(diǎn)密度小、單跳距離遠(yuǎn)、信道損耗大、節(jié)點(diǎn)移動速度相對穩(wěn)定等特點(diǎn)。本文結(jié)合船舶自組網(wǎng)的特點(diǎn),對基于數(shù)據(jù)請求發(fā)送/清除發(fā)送(Request To Send/Clear To Send,RTS/CTS)的擁塞控制方法進(jìn)行改進(jìn),從而提高TCP在船舶自組網(wǎng)中的傳輸性能。
根據(jù)船舶自組網(wǎng)的特點(diǎn),船舶在水面上以一定的速度移動,信道損耗較大,將擁塞控制下放到MAC層是提高網(wǎng)絡(luò)性能最簡便且高效的方法。在IEEE802.11無線網(wǎng)絡(luò)中,基于DCF接入控制模式下的RTS/CTS有著非常廣泛的運(yùn)用,下面就詳細(xì)介紹基于RTS/CTS的Semi-TCP擁塞控制算法。
RTS/CTS握手協(xié)議即請求發(fā)送/清除發(fā)送協(xié)議,是基于競爭的介質(zhì)訪問控制協(xié)議CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance,帶沖突避免的載波偵聽多址接入)的一種媒體接入控制方式[9],其采用4次握手(RTS-CTS-DATA-ACK)的方式[10]。相比于基本的媒體接入控制方式(2次握手DATA-ACK),它的提出是為了解決隱藏終端[11]問題。隱藏終端是指在接收節(jié)點(diǎn)的覆蓋范圍內(nèi)而在發(fā)送節(jié)點(diǎn)的覆蓋范圍外的節(jié)點(diǎn),如圖1所示。
圖中節(jié)點(diǎn)A向B發(fā)送數(shù)據(jù),節(jié)點(diǎn)C也有數(shù)據(jù)需要發(fā)往D,圖中所示情況下的C節(jié)點(diǎn)就是一個隱藏終端,若采用的是二次握手的接入控制方式,那么其在監(jiān)聽到信道空閑后向D發(fā)送數(shù)據(jù),但是B同時處在A和C的接收范圍內(nèi),因此會造成B在接收數(shù)據(jù)時發(fā)生碰撞。采用RTS/CTS之后,即使C收不到A的RTS幀,仍可以收到B的CTS幀然后進(jìn)行退避,從而解決了這種情況。下面要討論的Semi-TCP算法就是基于該握手協(xié)議。
基于RTS/CTS的Semi-TCP算法也分為節(jié)點(diǎn)內(nèi)和節(jié)點(diǎn)間擁塞控制[12],節(jié)點(diǎn)內(nèi)擁塞控制原理這里不再贅述,下面就節(jié)點(diǎn)間的擁塞控制詳細(xì)介紹。
根據(jù)RTS/CTS協(xié)議,假設(shè)節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)送數(shù)據(jù),在爭取到發(fā)送機(jī)會后發(fā)送數(shù)據(jù)之前需要向節(jié)點(diǎn)B發(fā)送RTS幀,節(jié)點(diǎn)B收到RTS幀后回復(fù)CTS幀?;赗TS/CTS的Semi-TCP擁塞控制算法中,利用RTS和CTS幀中的空閑位攜帶擁塞信息,以表明自己是否處于擁塞狀態(tài)[13-15]。從而引入了2種控制幀——帶擁塞狀態(tài)信息的請求發(fā)送幀(Request-To-Send-with-Congestion-status,RTSC)和帶擁塞狀態(tài)信息的允許發(fā)送幀(Request-To-Send-with-Congestion-status,CTSC),同時增加了一種新的幀——拒絕清除發(fā)送幀(negative-Clear-To-Send,nCTS)。下面分別分析3種幀的作用,RTSC:發(fā)送節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)送數(shù)據(jù),若A處于擁塞,則發(fā)送RTSC,不擁塞時則發(fā)送RTS:
1)nCTS:接收節(jié)點(diǎn)B在收到RTS幀之后,判斷自身擁塞狀態(tài),若擁塞則回復(fù)nCTS幀,拒絕接收數(shù)據(jù),否則回復(fù)CTS。若節(jié)點(diǎn)A收到nCTS,則不能向B發(fā)送數(shù)據(jù)包。值得注意的是接收節(jié)點(diǎn)為目的節(jié)點(diǎn)的情況(最后一跳),此時對于擁塞的判斷不再是對于發(fā)送緩存進(jìn)行判斷,而是接收緩存。
2)CTSC:CTSC幀的引入主要是為了解決死鎖的情況,死鎖就是兩擁塞節(jié)點(diǎn)A和B需向?qū)Ψ桨l(fā)送數(shù)據(jù)來解除本身的擁塞,但這2個節(jié)點(diǎn)又處于相互拒絕對方的狀態(tài)中。
3)若節(jié)點(diǎn)A和節(jié)點(diǎn)B都處于擁塞狀態(tài),A和B發(fā)送緩存中隊首數(shù)據(jù)都是發(fā)送給對方。發(fā)送節(jié)點(diǎn)A會先發(fā)送RTSC幀,節(jié)點(diǎn)B會回復(fù)nCTS拒絕接收數(shù)據(jù)。由于節(jié)點(diǎn)B的拒絕,節(jié)點(diǎn)A和B將處于僵死的狀態(tài),直到超過重傳上限丟掉數(shù)據(jù)包。因此,當(dāng)節(jié)點(diǎn)B在收到RTSC之后,若判斷出可能出現(xiàn)死鎖,就回復(fù)CTSC幀互相幫助解除擁塞。
利用上述3種新的幀,當(dāng)網(wǎng)絡(luò)中某一節(jié)點(diǎn)擁塞時,就可以快速的向上游節(jié)點(diǎn)傳遞擁塞信息,各上游節(jié)點(diǎn)進(jìn)行逐跳的擁塞控制,最終將擁塞傳到源節(jié)點(diǎn),從源頭減少發(fā)往網(wǎng)絡(luò)中的數(shù)據(jù),以實(shí)現(xiàn)更好的網(wǎng)絡(luò)通信性能。
根據(jù)在1.1節(jié)中對RTS/CTS握手協(xié)議的介紹,RTS、CTS幀會在網(wǎng)絡(luò)分配矢量(NAV)域(具體值為控制幀中Duration位)中預(yù)約了時隙,以表明收到該幀的節(jié)點(diǎn)在多長時間以內(nèi)需要退避,從而避免發(fā)送數(shù)據(jù)幀時產(chǎn)生碰撞。RTS/CTS協(xié)議是為了解決隱藏終端而提出的,但是暴露終端問題也一定程度上影響網(wǎng)絡(luò)性能,暴露終端是指在發(fā)送節(jié)點(diǎn)的覆蓋范圍內(nèi)而在接收節(jié)點(diǎn)的覆蓋范圍外的節(jié)點(diǎn),如圖2所示。
節(jié)點(diǎn)C在向節(jié)點(diǎn)F發(fā)送數(shù)據(jù),A也需要向B發(fā)送數(shù)據(jù),圖示情況中的A節(jié)點(diǎn)就是一個暴露終端。A在收到C的RTS后會進(jìn)行退避,然而實(shí)際上各自的接收節(jié)點(diǎn)并不在對方的發(fā)送節(jié)點(diǎn)的接收范圍內(nèi),因此,2種數(shù)據(jù)并不會在接收端發(fā)生碰撞,A是可以向B發(fā)送數(shù)據(jù)的。這樣的暴露終端問題就造成了信道的浪費(fèi)。
不僅暴露終端問題,對于一個數(shù)據(jù)流較多、負(fù)載較重的擁塞網(wǎng)絡(luò)而言,自然會有多個nCTS幀的交互,這也會帶來很大的問題,假設(shè)有節(jié)點(diǎn)A需要發(fā)送數(shù)據(jù)幀給節(jié)點(diǎn)B,B回復(fù)nCTS,那么節(jié)點(diǎn)A在收到之后將不會在原本預(yù)約好的時隙中發(fā)送數(shù)據(jù)。如圖3所示,此時周圍的鄰居節(jié)點(diǎn)可以分情況考慮。
圖3 nCTS的交互
節(jié)點(diǎn)D作為隱藏終端,當(dāng)收到nCTS之后,根據(jù)其Duration會進(jìn)行相應(yīng)的退避;節(jié)點(diǎn)C作為暴露終端,收到RTS后也會進(jìn)行退避;節(jié)點(diǎn)E能收到2個控制幀,會選擇RTS和nCTS更大的Duration進(jìn)行退避。至此節(jié)點(diǎn)A~節(jié)點(diǎn)E都將不能發(fā)送數(shù)據(jù),從而造成信道的浪費(fèi),使得網(wǎng)絡(luò)擁塞加劇。
為了解決上述2種問題以優(yōu)化Semi-TCP的性能,進(jìn)行如下的算法設(shè)計:
1)將nCTS的Duration設(shè)為0,解決圖2中隱藏終端的退避問題。
2)節(jié)點(diǎn)在收到不是發(fā)給自己的RTS幀之后,會記錄下該幀的發(fā)送地址,同時開啟一個定時器暴露終端判定定時器(Timer for Exposed Terminal,TET),若在一定時間間隔內(nèi)沒有收到發(fā)往該地址的CTS或者重傳的RTS,則判定自己為暴露終端,可以取消退避。
3)若在TET定時器超時之前收到了nCTS,則取消退避。
4)節(jié)點(diǎn)在收到不是發(fā)給自己的RTS幀之后,在定時器TET超時前:收到別的節(jié)點(diǎn)發(fā)來的不是給自己的RTS幀,則記錄下新的地址并且重設(shè)定時器;收到不是發(fā)給自己的CTS幀無條件按照Duration進(jìn)行退避。
5)節(jié)點(diǎn)在TET定時器開啟的狀態(tài)下若收到任何發(fā)給自己的控制幀,都按照退避狀態(tài)處理。
關(guān)于設(shè)置的TET定時器的時長,必然需要考慮到重傳RTS的情況,設(shè)置滿足要求的最小值。結(jié)合RTS/CTS協(xié)議進(jìn)行分析,節(jié)點(diǎn)在發(fā)送了RTS幀之后,會開啟一個重傳定時器,該重傳定時器的值如式(1)所示,其中,PropDelay為傳播時延,SIFS為短幀間間隔,transmitDelay(CCTS)為CCTS幀的傳輸時延,slotTime為等待的隨機(jī)時間。
holdForCts=PropDelay+SIFS+
transmitDelay(CCTS)+
PropDlay+slotTime
(1)
即在這段時間之后,若在該規(guī)定時間內(nèi)沒有收到對方任何回應(yīng),則會重傳RTS幀。因此,一個節(jié)點(diǎn)在收到不是發(fā)給自己的RTS幀之后,如果連重傳的RTS都沒有,那么判定自身為暴露終端。TET定時器時長如式(2),transmitDelay(RRTS)為RTS的傳輸時延。
holdForBackup= (holdForCts-PropDelay)+
transmitDelay(RRTS)+PropDlay
(2)
在TET定時器沒開的狀態(tài)下,收到不是發(fā)給自己的控制幀的算法流程如圖4所示。
圖4 TET開啟狀態(tài)下收到非自己的控制幀處理流程
在TET定時器開啟的狀態(tài)下,收到不是發(fā)給自己的控制幀的算法流程如圖5所示。
圖5 TET關(guān)閉狀態(tài)下收到非自己的控制幀處理流程
吞吐量和時延作為網(wǎng)絡(luò)性能的重要評判參數(shù),在對Semi-TCP進(jìn)行的性能測試中,本文中將其作為主要的評判標(biāo)準(zhǔn)。網(wǎng)絡(luò)平均吞吐量直觀的表現(xiàn)了網(wǎng)絡(luò)的傳輸性能,是考察網(wǎng)絡(luò)性能的重要參數(shù),提高吞吐量也是網(wǎng)絡(luò)優(yōu)化協(xié)議的最主要的目的。分組時延是指分組從發(fā)送節(jié)點(diǎn)發(fā)出,到目的節(jié)點(diǎn)收到分組時的這段時間間隔,它包含了隊列時延、傳輸時延和傳播時延。在采用的Exata仿真軟件的統(tǒng)計中,以上參數(shù)都會直接給出方便觀察比較。
本節(jié)只針對船舶自組網(wǎng)進(jìn)行仿真,為了能體現(xiàn)出船舶自組網(wǎng)的特點(diǎn),有必要建立一個遠(yuǎn)距離的動態(tài)的仿真場景,海上的部分節(jié)點(diǎn)按一定速度運(yùn)動,并配合適當(dāng)?shù)男诺浪p模型,同時,要對擁塞控制算法進(jìn)行測試,必然需要建立擁塞的場景,因此,加上了多個應(yīng)用數(shù)據(jù)流,從而盡可能體現(xiàn)出網(wǎng)絡(luò)吞吐量、丟包率、平均分組時延的差異。仿真場景抽象場景如圖6所示。
圖6 船舶自組網(wǎng)仿真場景
場景中各個節(jié)點(diǎn)的發(fā)送范圍僅覆蓋與其相鄰的節(jié)點(diǎn),節(jié)點(diǎn)A發(fā)往節(jié)點(diǎn)C和節(jié)點(diǎn)F的數(shù)據(jù)流都需要經(jīng)過中間節(jié)點(diǎn)的轉(zhuǎn)發(fā)。節(jié)點(diǎn)J到K的數(shù)據(jù)流主要是為了驗(yàn)證A作為暴露終端的情況下的Semi-TCP改進(jìn)算法的性能,B的2個數(shù)據(jù)流主要是為了造成網(wǎng)絡(luò)的擁塞。場景的基本參數(shù)設(shè)置如表1所示。
表1 仿真場景主要參數(shù)
為了方便敘述,本文將基于RTS/CTS的Semi-TCP擁塞控制算法稱為Semi-TCP-RTS,改進(jìn)算法稱為Semi-TCP-RTS-V2,2種算法的仿真結(jié)果與軟件提供的一個TCP的輕量版本TCP-Lite進(jìn)行比較。
為了分析門限值對于算法性能的影響,將其作為變量進(jìn)行多次仿真,同時鑒于有多個數(shù)據(jù)流,統(tǒng)計了各個數(shù)據(jù)流平均吞吐量的總和并進(jìn)行了比較,結(jié)果如圖7所示。
圖7 擁塞場景下吞吐量隨門限值的變化
由該結(jié)果可以看出,2種Semi-TCP算法相較于TCP-Lite,在網(wǎng)絡(luò)總吞吐量上都有大幅的提升,這是因?yàn)門CP-Lite將由于信道質(zhì)量不足造成的丟包錯判為網(wǎng)絡(luò)擁塞,錯誤地降低了發(fā)送窗口,限制了網(wǎng)絡(luò)性能。同時Semi-TCP-RTS-V2相較于Semi-TCP-RTS,總吞吐量上稍有下降,針對該結(jié)果結(jié)合圖8中對發(fā)送節(jié)點(diǎn)A的負(fù)載的對比做出解釋。
圖8 發(fā)送節(jié)點(diǎn)A負(fù)載隨門限值的變化
結(jié)合圖8可以發(fā)現(xiàn),節(jié)點(diǎn)A的負(fù)載相較于整個網(wǎng)絡(luò)的平均吞吐量之和小得多,實(shí)際上在Semi-TCP-RTS測試結(jié)果中,甚至存在節(jié)點(diǎn)A的一個數(shù)據(jù)流建立失敗的情況。這是因?yàn)楣?jié)點(diǎn)A發(fā)送數(shù)據(jù)會同時受到節(jié)點(diǎn)J和節(jié)點(diǎn)B的影響,不僅充當(dāng)了J—>K以及B—>C數(shù)據(jù)流的暴露終端,同時在B—>D數(shù)據(jù)流中,由于D在其接收范圍內(nèi)也會影響其發(fā)包。再加上節(jié)點(diǎn)B的兩個數(shù)據(jù)流造成的擁塞,更加限制了A發(fā)送數(shù)據(jù)包。因此也就出現(xiàn)了上述結(jié)果。
另外還可以明顯發(fā)現(xiàn),在改進(jìn)算法中,節(jié)點(diǎn)A在整個網(wǎng)絡(luò)吞吐量下降的情況下,自身的負(fù)載反而上升。這說明節(jié)點(diǎn)A與另外2個發(fā)送節(jié)點(diǎn)之間的差距縮小了,也就是說在數(shù)據(jù)流的公平性上有所改善。這是因?yàn)镾emi-TCP-RTS-V2中,暴露終端的問題得到改善,因此負(fù)載也有所提升。至于圖7中顯示的總吞吐量相較于Semi-TCP-RTS偏低,是由于改進(jìn)算法中對于暴露終端的判斷需要耗費(fèi)一些時間,同時節(jié)點(diǎn)A在發(fā)包時會使得另外兩個發(fā)送節(jié)點(diǎn)都進(jìn)入暴露終端的判斷階段,因此才產(chǎn)生這樣的結(jié)果。
繼續(xù)觀察圖7,可以發(fā)現(xiàn)門限值的變化對于網(wǎng)絡(luò)整體的吞吐量并沒有造成很大的影響,但是隨著門限值的增加,隊列的平均長度必然也會增加,則平均隊列時延一定會相應(yīng)的變長,下面針對J—>K數(shù)據(jù)流中,節(jié)點(diǎn)J的平均隊列時延進(jìn)行數(shù)據(jù)統(tǒng)計,結(jié)果如圖9所示,由于門限值一致,Semi-TCP-RTS和Semi-TCP-RTS-V2并沒有什么差異,整體上升的趨勢也符合預(yù)期。
圖9 節(jié)點(diǎn)J的平均隊列時延隨門限值的變化
船舶自組網(wǎng)采用IEEE802.11協(xié)議標(biāo)準(zhǔn),本文介紹現(xiàn)有的Semi-TCP-RTS擁塞控制算法,同時提出針對Semi-TCP-RTS的改進(jìn)算法Semi-TCP-RTS-2,以解決暴露終端以及由于nCTS的交互帶來的信道資源浪費(fèi)等問題。在Exata仿真平臺分別實(shí)現(xiàn)和測試了3種算法,并進(jìn)行了對比分析。結(jié)果顯示,Semi-TCP-RTS-V2算法優(yōu)于TCP-Lite和Semi-TCP-RTS,同時在節(jié)點(diǎn)發(fā)送數(shù)據(jù)的公平性上有所改善。
[1] AFANASYEV A,TILLEY N,REIHER P,et al.Host-to-host Congestion Control for TCP[J].IEEE Com-munications Surveys & Tutorials,2010,12(3):304-342.
[2] HANBALI A A,ALTMAN E,NAIN P.A Survey of TCP over Ad Hoc Networks[J].IEEE Communications Surveys & Tutorials,2005,7(3):23-36.
[3] SARDAR B,SAHA D.Survey of TCP Enhancements for Last-hop Wireless Networks[J].IEEE Com-munications Surveys and Tutorials,2006,8(3):20-34.
[4] CHRISTIAN L,BJORN S,MARTIN M.A Survey on Congestion Control or Mobile Ad Hoc Networks[J].Wiley Wireless Communications and Mobile Computing,2007,7(5):655-676.
[5] FU Zhenghua,GREENSTEIN B,MENG Xiaoqiao.Design and Implementation of a TCP-friendly Transport Protocol for Ad Hoc Wireless Networks[C]//Pro-ceedings of ICNP’02.Paris,France:[s.n.],2002:216-225.
[6] MONZER H A M,SUHAIDI H.Loss Detection and Recovery Techniques for TCP in Mobile Ad Hoc Network[C]//Proceedings of the 2nd International Conference on Network Applications,Protocols and Services.Washington D.C.,USA:IEEE Press,2010:48-54.
[7] 蔡業(yè)桂.多跳無線網(wǎng)絡(luò)基于RTS/CTS的Semi-TCP擁塞控制算法研究[D].廣州:華南理工大學(xué),2010.
[8] 劉 梅,姜勝明,陸以勤.無線多跳網(wǎng)絡(luò)中Semi-TCP 協(xié)議的實(shí)現(xiàn)[J].計算機(jī)工程,2012,38(9):79-82.
[9] 張 偉.無線移動 Ad Hoc 網(wǎng)絡(luò)違規(guī)行為分析[J].中國科技縱橫,2012,13:62-64.
[10] 虞萬榮.無線自組網(wǎng)MAC協(xié)議關(guān)鍵技術(shù)研究[D].長沙:國防科學(xué)技術(shù)大學(xué),2006.
[11] 劉志敏,徐鳳英.移動Ad Hoc網(wǎng)絡(luò)隱藏和暴露終端問題的研究[J].計算機(jī)與網(wǎng)絡(luò),2010,6(1):30-37.
[12] LIU J,SINGH S.ATCP:TCP for Mobile Ad Hoc Networks[J].IEEE Journals on Selected Areas in Communications 2001,19(7):1300-1315.
[13] SUNDARESAN K,ANANTHARAMAN V,HSIEH H Y,et al.ATP:A Reliable Transport Protocol for Ad Hoc Networks[C]//Proceedings of ACM International Sympo-sium on Mobile Ad Hoc Networking and Computing.New York,USA:ACM Press,2003:64-75.
[14] 毛華超.多跳無線網(wǎng)絡(luò)服務(wù)質(zhì)量與擁塞控制的聯(lián)合設(shè)計[D].廣州:華南理工大學(xué),2013.
[15] TASSIULAS L.Adaptive Back-pressure Congestion Control Based on Local Information[J].IEEE Transactions on Automatic Control,1995,40(2):236-250.