夏潔,李付勇,姜勝明
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
傳統(tǒng)TCP擁塞控制是因特網(wǎng)中一種端到端的擁塞控制方法[1],其中源節(jié)點通過收到的ACK分組來了解網(wǎng)絡(luò)的擁塞狀況,自適應(yīng)地調(diào)節(jié)擁塞窗口,從而實現(xiàn)擁塞控制。多跳無線網(wǎng)絡(luò)是一種具有無固定基礎(chǔ)設(shè)施、數(shù)據(jù)多跳傳輸?shù)忍攸c的無線網(wǎng)絡(luò)[2]。多跳無線網(wǎng)絡(luò)中信道質(zhì)量的不穩(wěn)定性、無線信道的競爭性、節(jié)點的移動性和能供的波動性等因素常常造成對網(wǎng)絡(luò)的擁塞狀況做出誤判,并錯誤地觸發(fā)了擁塞控制機制來降低發(fā)送窗口,從而造成網(wǎng)絡(luò)性能的下降。在這種情況下,發(fā)送節(jié)點無法及時或者正確獲取擁塞狀況,所以傳統(tǒng)的TCP不適用于多跳無線網(wǎng)絡(luò)的擁塞控制[3]。
針對上述問題,提出了一種新的協(xié)議Semi-TCP協(xié)議[4]。Semi-TCP重新分配了傳統(tǒng)TCP的功能,在運輸層只保留端到端數(shù)據(jù)傳輸?shù)目煽啃钥刂疲磥G包重傳。而將擁塞控制功能下放到數(shù)據(jù)鏈路層,可由媒體訪問控制協(xié)議(Media Access Control,MAC)層具體實現(xiàn)逐跳擁塞控制[5],發(fā)送節(jié)點能夠及時或者正確獲取擁塞狀況,提高了TCP在無線多跳網(wǎng)絡(luò)中的性能。所以MAC層的擁塞控制技術(shù)是Semi-TCP的關(guān)鍵技術(shù)。目前研究人員已經(jīng)提出了一些應(yīng)用于Semi-TCP擁塞控制的方法,這些方法在一定程度上提高了網(wǎng)絡(luò)性能,但是其對MAC協(xié)議的修改,增加了MAC層的復(fù)雜度,降低了Semi-TCP的適用性。且發(fā)送節(jié)點在競爭信道時或之后才能做出擁塞控制,造成了信道資源的浪費。
因此,本文提出了一種用于Semi-TCP的基于被動偵聽與數(shù)據(jù)幀調(diào)度的擁塞控制方法。本算法在不改變原有的MAC協(xié)議的情況下,使得未配置Semi-TCP功能的節(jié)點能和已配置的節(jié)點兼容,提高了Semi-TCP的適用性,更快速地掌握網(wǎng)絡(luò)的擁塞情況,減少了信道資源的浪費。
本文對活躍度的定義為偵聽到的節(jié)點在單位時間內(nèi)發(fā)送數(shù)據(jù)的能力大小??梢岳斫鉃椋簩τ诰哂邢嗤彺娲笮〉墓?jié)點,固定時間內(nèi)發(fā)送的數(shù)據(jù)幀越多,即節(jié)點活躍度越高,說明其處理緩存中數(shù)據(jù)幀的能力越大,其釋放自身擁塞的能力越大,進而可以認為其發(fā)生擁塞的可能性越小,以此作為量化擁塞的依據(jù)。
當(dāng)偵聽節(jié)點偵聽到周圍節(jié)點發(fā)送的數(shù)據(jù)幀時,使用基于被動偵聽的方法來進行擁塞狀況判斷。以發(fā)送節(jié)點A為例,節(jié)點A正常發(fā)送數(shù)據(jù)幀的同時,也被動偵聽周圍節(jié)點發(fā)送的數(shù)據(jù)幀,解析這些數(shù)據(jù)幀,得到這些數(shù)據(jù)幀的發(fā)送節(jié)點地址,統(tǒng)計這些發(fā)送節(jié)點的活躍度來量化節(jié)點的擁塞狀態(tài),具體步驟如下[6]:
(1)節(jié)點A正常發(fā)送數(shù)據(jù)幀的同時偵聽周圍節(jié)點發(fā)送的數(shù)據(jù)幀,解析這些數(shù)據(jù)幀,得到發(fā)送這些數(shù)據(jù)幀的節(jié)點的地址,在固定時間Ts內(nèi),每解析出相同發(fā)送節(jié)點如節(jié)點B的數(shù)據(jù)幀,NB(A)加1,NB(A)指的是Ts時間內(nèi)節(jié)點A偵聽到節(jié)點B發(fā)送數(shù)據(jù)幀的個數(shù),其初始值為0,一般場景下,Ts取25ms;
(2)發(fā)送節(jié)點A統(tǒng)計最近m個Ts時間內(nèi),節(jié)點A偵聽到節(jié)點B發(fā)送數(shù)據(jù)幀的個數(shù)分別為{NB[1],...,NB[m]},,并計算其平均值N^B(A),其中NB[1]指最近一次完整Ts時間內(nèi)統(tǒng)計的值,這里將m定義為統(tǒng)計窗口,只保留最新的m個NB(A)進行計算,一般場景下,m取10;
(3)節(jié)點A計算最近一個Ts時間內(nèi),偵聽到的周圍節(jié)點發(fā)送數(shù)據(jù)幀次數(shù)的均值為N^au(A)=(NB[1]+NC[1]+…)/n,最近一次Ts時間內(nèi)節(jié)點A正確解析出的數(shù)據(jù)幀,這些數(shù)據(jù)幀的發(fā)送節(jié)點數(shù)目為n;
(4)考慮到節(jié)點的擁塞狀態(tài)由兩個因素決定,一是網(wǎng)絡(luò)狀態(tài)的連續(xù)性,因而給出了節(jié)點相對于自身歷史的活躍度;二是其他節(jié)點處理擁塞的能力,因而給出了節(jié)點當(dāng)前相對于其他節(jié)點的活躍度。節(jié)點B相對于自身歷史的活躍程度ηhB(A)如式(1)所示:
節(jié)點B相對于其他節(jié)點的活躍程度ηrB(A)如式(2)所示:
(5)對上述節(jié)點B相對于自身歷史的活躍程度和相對于其他節(jié)點的活躍程度兩種活躍度進行歸一化,則節(jié)點A估計的節(jié)點B的擁塞量化值θB(A)如式(3)所示:
若θB>1,則認為節(jié)點 B處于非擁塞狀態(tài),若θB∈(0.5,1),則認為節(jié)點 B 處于半擁塞狀態(tài),若θB∈(0,0.5),則認為節(jié)點B處于擁塞狀態(tài)。
現(xiàn)有的基于RTS/CTS的Semi-TCP擁塞控制算法依賴于發(fā)送節(jié)點接收CTS/nCTS,來獲取接收節(jié)點的擁塞狀態(tài),并做出擁塞控制?;诖_認幀(ACK)的Semi-TCP擁塞控制算法依賴于發(fā)送節(jié)點接收ACK/ACKC,來獲取接收節(jié)點的擁塞狀態(tài),并做出擁塞控制。這兩種算法都在發(fā)送節(jié)點競爭信道之后進行擁塞控制的,若當(dāng)前數(shù)據(jù)幀的接收節(jié)點已經(jīng)處于擁塞狀態(tài),這就降低了信道競爭的效率,造成資源的浪費。
本文的算法采用了一種基于數(shù)據(jù)幀調(diào)度的擁塞控制方法,節(jié)點可以在數(shù)據(jù)幀競爭信道之前及時做出擁塞控制,該方法中發(fā)送節(jié)點根據(jù)以下步驟對數(shù)據(jù)幀進行調(diào)度管理[6]:
(1)當(dāng)前節(jié)點A先判斷自身的擁塞狀態(tài),方式如下:若當(dāng)前緩存內(nèi)的數(shù)據(jù)幀個數(shù)即隊列長度N小于節(jié)點緩存的擁塞閾值Th,則節(jié)點A判定自身處于非擁塞狀態(tài),正常發(fā)送數(shù)據(jù)幀;反之,節(jié)點A判定自身處于擁塞狀態(tài),執(zhí)行下一步;
(2)若當(dāng)前發(fā)送節(jié)點A已經(jīng)擁塞,則判斷當(dāng)前待發(fā)送的數(shù)據(jù)幀的接收節(jié)點B的擁塞狀態(tài)。若節(jié)點B處于非擁塞狀態(tài),則節(jié)點A直接發(fā)送數(shù)據(jù)幀;若節(jié)點B處于半擁塞狀態(tài),則節(jié)點A退避time backoff時間再發(fā)送,其中time backoff為發(fā)送一次數(shù)據(jù)幀的時間;若節(jié)點B處于擁塞狀態(tài),則節(jié)點A取消此次信道競爭,執(zhí)行下一步驟;
(3)發(fā)送節(jié)點檢查此數(shù)據(jù)幀的擁塞計數(shù),擁塞計數(shù)是指每當(dāng)數(shù)據(jù)幀競爭信道時其接收節(jié)點處于擁塞狀態(tài)的次數(shù);
(4)若擁塞計數(shù)小于節(jié)點預(yù)設(shè)的擁塞閾值th_cong,則將此數(shù)據(jù)幀移至隊列中的第pos的位置排隊等待,節(jié)點擁塞計數(shù)加1,并且令隊列中下一個數(shù)據(jù)幀開始競爭信道。
(5)若擁塞計數(shù)大于或等于節(jié)點預(yù)設(shè)的擁塞閾值th_cong,則節(jié)點A將此數(shù)據(jù)幀返回上層,以告知上層其下的MAC層已經(jīng)處于擁塞狀態(tài)[7]。
本節(jié)將具體介紹基于被動偵聽與數(shù)據(jù)幀調(diào)度的擁塞控制方法在EXata仿真平臺上的實現(xiàn)與測試,重點分析了在不同場景中,擁塞控制方法的性能。同時與現(xiàn)有的兩種方法(基于RTS/CTS的Semi-TCP擁塞控制算法[8]與基于確認幀(ACK)的Semi-TCP擁塞控制算法[9])對比[10]。
吞吐量和時延是網(wǎng)絡(luò)性能的重要評判參數(shù),在對Semi-TCP進行性能測試時,也使用這兩個參數(shù)作為主要的評判標(biāo)準(zhǔn)。其中平均吞吐量為單位時間內(nèi),目的節(jié)點收到的源節(jié)點發(fā)送的數(shù)據(jù)包的總字節(jié)數(shù)。通過設(shè)置不同參數(shù),不同場景中分析其對擁塞控制方法的性能的影響,選擇了合適的參數(shù)。如表1所示在之后所述的多個場景中,以下場景參數(shù)固定,不再變動。
表1 固定場景參數(shù)
下面將采用上述參數(shù)值進行仿真,與已有的基于RTS/CTS的Semi-TCP擁塞控制算法和基于確認幀(ACK)的Semi-TCP擁塞控制算法的仿真結(jié)果進行對比。為了方便起見,將上述兩種算法分別稱為Semi-TCP-RTSC/CTSC、Semi-TCP-ACKC,本文方法稱為Semi-TCP-LP。
(1)靜態(tài)場景測試
現(xiàn)將本文的Semi-TCP-LP算法與已有的Semi-TCP-RTSC/CTSC、Semi-TCP-ACKC算法在如圖1所示的靜態(tài)場景里進行仿真。在圖1的靜態(tài)場景中,設(shè)置由節(jié)點1到節(jié)點2,節(jié)點6到節(jié)點10,節(jié)點8到節(jié)點9的FTP應(yīng)用,這三條數(shù)據(jù)流通過節(jié)點4中繼,增加了節(jié)點4發(fā)生擁塞的頻率。同時調(diào)整節(jié)點物理層發(fā)送功率,增加每個節(jié)點的發(fā)送范圍,保證覆蓋多個節(jié)點,從而增加信號被偵聽的次數(shù)。
因為上述三種方法都依賴擁塞閾值作為擁塞判斷的標(biāo)準(zhǔn),因此將擁塞閾值作為橫軸,將平均吞吐量作為豎軸,對多個數(shù)據(jù)流進行多次仿真比較,結(jié)果如圖2所示。
圖1 靜態(tài)路拓撲場景
圖2 平均吞吐量隨擁塞閾值的變化
由圖2可以看出,采用已有的兩種Semi-TCPRTSC/CTSC、Semi-TCP-ACKC算法時,平均吞吐量隨著擁塞閾值的增大而增大。而采用Semi-TCP-LP算法時平均吞吐量在取不同擁塞閾值時沒有呈現(xiàn)規(guī)律的變化,且它的吞吐量基本低于已有的兩種算法。這是因為靜態(tài)場景中鏈路相對穩(wěn)定,Semi-TCP-LP擁塞控制功能并不明顯,尤其對于某些能及時恢復(fù)成非擁塞的節(jié)點仍然進行調(diào)度,而錯失了合適的發(fā)送時機,一定程度上造成了吞吐量的下降。
(2)動態(tài)場景測試
下面將Semi-TCP-LP算法與已有的Semi-TCPRTSC/CTSC、Semi-TCP-ACKC擁塞控制算法在如圖3所示的動態(tài)場景里進行仿真結(jié)果對比。動態(tài)場景中,不僅擴大了節(jié)點的通信范圍,增加偵聽的數(shù)據(jù)幀的多樣性,而且賦予了節(jié)點隨機移動性,增加了路由的不確定性,使得場景與移動自組織網(wǎng)絡(luò)更加相似,其中紅旗表示節(jié)點的移動軌跡。且仿真時間設(shè)為30s,節(jié)點3和節(jié)點5按一定速率移動。發(fā)送,從而造成吞吐量的下降。而當(dāng)擁塞閾值較大時,緩存較慢達到擁塞閾值,需要節(jié)點進行調(diào)度的機會較少,對吞吐量的影響降低了。
圖3 動態(tài)鏈路拓撲場景
仍然將擁塞閾值作為橫坐標(biāo),對多個數(shù)據(jù)流統(tǒng)計了其平均吞吐量進行比較,結(jié)果如圖4所示。
圖4 平均吞吐量隨擁塞閾值的變化
圖5 平均吞吐量隨擁塞閾值的變化
由圖4可以看出,當(dāng)擁塞閾值小于50時,采用本文的Semi-TCP-LP算法時的性能比Semi-TCP-RTSC/CTSC算法的性能更好。但沒有Semi-TCP-ACKC算法好。當(dāng)擁塞閾值大于50時,采用Semi-TCP-LP算法時性能的優(yōu)勢比較明顯。
為了進一步討論該算法在移動自組織網(wǎng)絡(luò)中的性能,將增大節(jié)點3和節(jié)點5的移動速率,分析平均吞吐量與擁塞閾值的關(guān)系,結(jié)果如圖5所示。
由圖5可以看出,由于增加了節(jié)點的移動速率,進一步惡化了網(wǎng)絡(luò)狀況,上述三種算法的性能都有所下降。但是Semi-TCP-LP算法的平均吞吐量隨著擁塞閾值的增大逐漸優(yōu)于其他兩種算法。
鑒于擁塞閾值決定了擁塞的判斷,當(dāng)擁塞閾值較小時,緩存較快達到擁塞閾值,超過閾值時開始進行擁塞控制,對于Semi-TCP-ACKC和Semi-TCP-RTSC/CTSC算法而言,若擁塞規(guī)模較小,可及時利用接收節(jié)點回復(fù)的信息恢復(fù)發(fā)包。但是Semi-TCP-LP算法將已經(jīng)判斷為擁塞的接收節(jié)點的數(shù)據(jù)包取消競爭并滯后
(3)混合場景測試
測試Semi-TCP-LP算法與未配置的Semi-TCP的節(jié)點兼容運行,來提高網(wǎng)絡(luò)的性能。還是用圖3中的動態(tài)場景,配置兩個對照組,一組節(jié)點全部使用TCP Lite,另一組中只將節(jié)點3和節(jié)點4設(shè)為TCP Lite,其他節(jié)點使用Semi-TCP-LP。TCP Lite與Semi-TCP-LP的擁塞控制機制不同。對多個數(shù)據(jù)流統(tǒng)計了其平均吞吐量進行比較,結(jié)果如圖6所示。
圖6 TCP Lite與混合TCP的平均吞吐量對比圖
由圖6可以看出,采用Semi-TCP-LP的混合場景比只使用TCP Lite的平均吞吐量大幅提高。因為信道質(zhì)量不足引起的丟包被TCP Lite錯判為擁塞,因而錯誤的觸發(fā)了擁塞機制,降低了發(fā)送窗口,限制了網(wǎng)絡(luò)性能。而Semi-TCP-LP通過偵聽與探測估計節(jié)點的擁塞程度來進行擁塞控制,減緩了擁塞的發(fā)生,提高了網(wǎng)絡(luò)的平均吞吐量。
本文提出了一種用于Semi-TCP的基于被動偵聽與數(shù)據(jù)幀調(diào)度的擁塞控制方法。并在EXata仿真平臺對其進行了仿真分析。在靜態(tài)與動態(tài)場景中,對比已有的Semi-TCP-ACKC和Semi-TCP-RTSC/CTSC算法,發(fā)現(xiàn)當(dāng)擁塞閾值較大時,本文提出的方法有一定的優(yōu)勢。同時在未配置Semi-TCP節(jié)點通信的混合場景中,吞吐量有較大的提高。本算法在不改變原有的MAC協(xié)議的情況下,使得未配置Semi-TCP功能的節(jié)點能和已配置的節(jié)點兼容,提高了Semi-TCP的適用性,更快速地掌握網(wǎng)絡(luò)的擁塞情況,及時進行擁塞控制,減少了信道資源的浪費。