宋 揚(yáng),徐 楨
(北京航空航天大學(xué)電子信息工程學(xué)院,北京 100083)
在航空移動(dòng)通信中為用戶提供語音和數(shù)據(jù)移動(dòng)通信業(yè)務(wù)在技術(shù)上已經(jīng)日趨成熟,需求也在不斷增加。由于飛機(jī)的高速移動(dòng)性帶來的大多普勒頻移和航空移動(dòng)通信環(huán)境的復(fù)雜性造成了非常高的隨機(jī)誤碼和突發(fā)誤碼。
TCP協(xié)議提供端到端的可靠傳輸,主要適用低誤碼率的環(huán)境。在高誤碼的航空移動(dòng)通信系統(tǒng)中,現(xiàn)有的TCP協(xié)議性能急劇下降。因?yàn)榈孛婢W(wǎng)絡(luò)有極低的誤碼率,傳統(tǒng)TCP將所有的丟包都認(rèn)為是擁塞造成的,而在移動(dòng)的飛機(jī)通信中存在高隨機(jī)誤碼和突發(fā)誤碼,如果將誤碼丟包作為擁塞進(jìn)行處理,勢必造成數(shù)據(jù)發(fā)送速率頻繁減小,嚴(yán)重影響吞吐量[1],所以高誤碼率是必須克服的問題。
網(wǎng)絡(luò)編碼[2]技術(shù)2000首次提出,極大地提高了有線網(wǎng)絡(luò)的吞吐量和可靠性,隨后新的網(wǎng)絡(luò)編碼算法(如隨機(jī)線性網(wǎng)絡(luò)編碼[2],應(yīng)用于實(shí)際的網(wǎng)絡(luò)編碼方法如COPE[4])大量涌現(xiàn)。
J.K.Sundararajan等人在2009年首先提出了適應(yīng)TCP傳輸?shù)木W(wǎng)絡(luò)編碼協(xié)議TCP/NC[5],該協(xié)議巧妙利用了編碼數(shù)據(jù)的無差異性,大大提高了TCP在無線環(huán)境中的性能。然而,該協(xié)議不能直接應(yīng)用到航空移動(dòng)通信領(lǐng)域,因?yàn)閰f(xié)議的成功實(shí)現(xiàn)需要依賴與對(duì)丟包率進(jìn)行準(zhǔn)確估計(jì),這在航空移動(dòng)通信高隨機(jī)誤碼和突發(fā)誤碼的環(huán)境中很難實(shí)現(xiàn)。鑒于這種局限性,本文提出了一種具有丟失感知的TCP編碼方法,通過接收端反饋丟失信息:第一,避免對(duì)鏈路丟包率的估計(jì);第二,使編碼包丟失與冗余添加取得同步,防止無效冗余的出現(xiàn),從而節(jié)約帶寬,提高吞吐量;第三,及時(shí)的冗余補(bǔ)齊,獲得比TCP/NC更低的解碼等待時(shí)延。
TCP/NC的主要思想是在TCP層和IP層之間添加一個(gè)網(wǎng)絡(luò)編碼層,具體操作參見文獻(xiàn)[6]。為了獲得更好的兼容性,選擇TCP-Vegas[7-8]作為傳輸層協(xié)議。
為確保編解碼操作成功實(shí)現(xiàn),TCP/NC協(xié)議需要對(duì)端到端丟包率做出較為準(zhǔn)確的估計(jì)。假定端到端丟包率為pe,冗余因子理論最優(yōu)R=1/(1-pe)。而由于航空移動(dòng)通信的隨機(jī)誤碼和突發(fā)誤碼,導(dǎo)致pe的估計(jì)異常困難,冗余因子選擇對(duì)傳輸性能至關(guān)重要,選擇較小就無法掩蓋丟失,選擇較大又會(huì)造成冗余的浪費(fèi),兩者都會(huì)造成協(xié)議性能下降。因此,這種冗余添加方式并不適用于航空移動(dòng)通信。
本文提出了一種具有有丟失感知的改進(jìn)編碼方法TCP/NCLA。方法通過接收端反饋丟失信息的方法,使發(fā)送端可以針對(duì)性的發(fā)送冗余編碼包來補(bǔ)齊丟失,消除了原協(xié)議冗余發(fā)送與數(shù)據(jù)包丟失不同步所帶來的矛盾。通過這種方式,避免了對(duì)鏈路丟失概率的估計(jì),可以更好的適應(yīng)隨時(shí)變化的網(wǎng)絡(luò)狀況,避免了盲目發(fā)送冗余數(shù)據(jù)包導(dǎo)致的帶寬的浪費(fèi),提高傳輸性能。下面介紹對(duì)編碼包包頭的修改。
新方法修改了部分條目,并為與新編碼方法相關(guān)的條目分配了空間。包括數(shù)據(jù)包傳輸原因(TX_REASON),其中TX_REASON=0代表正常傳輸,TX_REASON=1代表由于超時(shí)而重傳,TX_REASON=2代表由于收到重復(fù)ACK而重傳;編碼窗口base(TX_BASE),即編碼窗口中最早的數(shù)據(jù)包的序列號(hào)值;編碼窗口大小(ENCODED NUM),即編碼窗口中原始數(shù)據(jù)包的個(gè)數(shù);編碼系數(shù)向量 (CODING COEFFICIENT VECTOR),即在有限域 GF(28)中隨機(jī)產(chǎn)生的編碼系數(shù)[4],每個(gè)系數(shù)占用1個(gè)字節(jié),最大可存儲(chǔ)12個(gè)編碼向量,即最多編碼12個(gè)數(shù)據(jù)包;與ACK包相關(guān)的丟失標(biāo)志(TCP_FLAG),其中TCP_FLAG=1標(biāo)志存在丟失,需要發(fā)送冗余編碼包;刪除標(biāo)志(DELETE_FLAG),其中DELETE_FLAG=1標(biāo)志解碼成功,可以刪除編碼窗口中已解碼原始數(shù)據(jù)包等。如圖1,左邊為TCP包頭,右邊為修改后的編碼包頭。
圖1 TCP包頭和修改的TCP/NCLA包頭Fig.1 Header structure of TCP and NC layers
發(fā)送端:發(fā)送端需要回應(yīng)2種類型的事件—TCP層到達(dá)的數(shù)據(jù)包和IP層到達(dá)的ACKs包。
1)等待狀態(tài)
如果以下的事件發(fā)生,則按照如下規(guī)則進(jìn)行響應(yīng);否則,保持等待狀態(tài)。
2)TCP到達(dá)數(shù)據(jù)包
a.如果到達(dá)的是用于連接管理的控制包,則將控制包傳輸給IP層并返回等待狀態(tài)。如果到達(dá)的數(shù)據(jù)包TX_REASON為0,則將數(shù)據(jù)包加入編碼窗口。
b.重復(fù)以下步驟TCP_FLAG+1次:
產(chǎn)生編碼窗口中數(shù)據(jù)包的線性聯(lián)合;添加編碼包頭,即隨機(jī)線性編碼包所對(duì)應(yīng)的編碼向量,編碼包中編碼的原始數(shù)據(jù)包的個(gè)數(shù)ENCODED_NUM以及TX_BASE;將編碼包發(fā)送到IP層,記錄當(dāng)前傳輸時(shí)間。
c.如果到達(dá)的數(shù)據(jù)包的傳輸原因TX_REASON為1或2,則重復(fù)以上步驟一次。
d.如果發(fā)送編碼包時(shí),編碼窗口大小超出了事先設(shè)定的閾值T,再次重復(fù)以上步驟。
e.返回等待狀態(tài)。
3)從IP層到達(dá)ACK包
移除ACK包編碼包頭,提取標(biāo)志位DELETE_FLAG和TCP_FLAG;若DELETE_FLAG=1,刪除編碼窗口中已解碼的原始數(shù)據(jù)包;更新當(dāng)前接收時(shí)間,向TCP提交ACK包;返回等待狀態(tài)。
接收端:接收端需要回應(yīng)兩種類型的事件—IP層到達(dá)的數(shù)據(jù)包和TCP sink到達(dá)的ACKs。
1)設(shè)置接收矩陣的秩
Rank:=0,接收端本地base值初試化。
2)等待狀態(tài)
如果以下的事件發(fā)生,則按照如下規(guī)則進(jìn)行響應(yīng);否則,保持等待狀態(tài)。
3)從TCP sink到達(dá)的ACK包
如果ACK包是用于連接管理的控制包,則將控制包傳輸給IP層,然后返回等待狀態(tài)。否則忽略該ACK。
4)從發(fā)送端到達(dá)數(shù)據(jù)包
a.移除編碼包頭,提取編碼系數(shù)向量,加入解碼矩陣作為新一行,對(duì)解碼矩陣進(jìn)行高斯消去法,更新矩陣的秩Rank;提取TX_BASE值,并更新本地base;提取ENCODED_NUM。
b.如果編碼包是更新的,Rank=Rank+1。
c.產(chǎn)生一個(gè)新的ACK,序列號(hào)為最新一個(gè)可見的數(shù)據(jù)包的序列號(hào);如果ENCODED_NUM==Rank,表明當(dāng)前解碼窗口解碼成功,DELETE_FLAG=1;如果ENCODED_NUM>Rank,表明傳輸過程中出現(xiàn)丟失,設(shè)置TCP_FLAG=1。
d.如果編碼包是非更新的,則表明該編碼包為無效冗余或該編碼包的編碼向量與解碼矩陣線性相關(guān):若為第一種情況,則忽略不進(jìn)行任何操作;若為后一種情況,則效果等同于該包丟失,設(shè)置TCP_FLAG=1。
e.對(duì)解碼緩存區(qū)中的編碼包進(jìn)行解碼,將解碼出的原始數(shù)據(jù)包傳遞給TCP sink,最終返回等待狀態(tài)。
為保證方法的完整性,還需要一些相應(yīng)的適應(yīng)性調(diào)整。
a.在傳輸過程中,回復(fù)的ACK可能出現(xiàn)丟失,而其中可能包含丟失信息,TCP對(duì)于丟失的ACK可能會(huì)判斷為超時(shí)而重傳。當(dāng)編碼窗口收到重傳的原始數(shù)據(jù)包時(shí),不會(huì)再將該數(shù)據(jù)包加入到編碼窗口中,而是將編碼窗口中的數(shù)據(jù)包線性聯(lián)合發(fā)送一次。
b.接收端接收到編碼包,提取編碼向量加入到解碼矩陣中,對(duì)矩陣進(jìn)行高斯消去,若該編碼包不是更新包(innovative packet),則按照出現(xiàn)丟失進(jìn)行處理。
c.發(fā)送端編碼窗口根據(jù)經(jīng)驗(yàn)值選擇一個(gè)窗口大小閾值T,當(dāng)超過該值則自動(dòng)添加冗余發(fā)送。該措施是為了防止出現(xiàn)ACK丟失可能造成的冗余不足。
對(duì)于TCP網(wǎng)絡(luò)編碼方法,由于網(wǎng)絡(luò)編碼產(chǎn)生的原始數(shù)據(jù)包解碼等待時(shí)延是不可忽略的。接收端每當(dāng)有數(shù)據(jù)包被看見則回復(fù)ACK,而從數(shù)據(jù)包被看見到能夠解碼會(huì)造成一定的時(shí)延,即解碼等待時(shí)延,該時(shí)延對(duì)于網(wǎng)絡(luò)編碼方法是無法避免的,且直接影響到TCP端到端的投遞時(shí)延。
本文采用原始數(shù)據(jù)包從產(chǎn)生時(shí)刻tis到解碼矩陣滿秩的時(shí)刻tid的平均值作為時(shí)延的評(píng)價(jià)指標(biāo)。即原始數(shù)據(jù)包端到端平均投遞時(shí)延
仿真性能分析是在NS2中實(shí)現(xiàn)的。仿真環(huán)境配置如下:仿真模型為飛機(jī)與地面基站直接通信,飛機(jī)距離基站 7 000 m;TCP 層使用的版本為 TCP-Vegas,Vegas參數(shù)選擇α=3,β=5,γ=2;數(shù)據(jù)包大小1 000字節(jié);鏈路緩存區(qū)大小設(shè)置為50個(gè)數(shù)據(jù)包;每次仿真的持續(xù)時(shí)間為300 s,仿真結(jié)果是運(yùn)行至少10次取平均值得到的結(jié)果。
針對(duì) TCP-Vegas,TCP/NC 和 TCP/NCLA 3 種 方法,本文研究了吞吐量隨鏈路丟包率的變化情況。端到端的丟包率從0%~20%變化,如圖2,顯示了3種方法吞吐量的變化情況。
圖2 吞吐量與端到端丟包率關(guān)系Fig.2 Throughput vs.loss rate end-to-end
通過仿真結(jié)果可以看出,TCP-Vegas隨端到端丟包率的上升,吞吐量下降較快,說明TCP協(xié)議對(duì)于無線鏈路中的丟失比較敏感,丟失將直接導(dǎo)致發(fā)送端降低發(fā)送速率;在端到端丟包率較小時(shí),TCP-Vegas的性能優(yōu)于編碼方法,原因是編碼所造成的少許時(shí)延影響到傳輸性能,當(dāng)丟失率進(jìn)一步上升,兩種編碼方法與TCP-Vegas相比,吞吐量都有較大的提升;TCP/NCLA與TCP/NC相比吞吐量又有一定的提升,且隨著鏈路丟失率的增加,優(yōu)勢更加明顯,如當(dāng)鏈路丟失率為20%時(shí),吞吐量提高21.24%。新方法之所以會(huì)有吞吐量的提高,是因?yàn)樗扇×藖G失反饋的機(jī)制,避免了冗余的浪費(fèi);若發(fā)送端發(fā)送了冗余編碼包,鏈路并未發(fā)生丟包,則接收端將它判斷為無效冗余,該冗余并未起到傳輸新數(shù)據(jù)的作用,卻占據(jù)了帶寬,造成了帶寬的浪費(fèi)。
對(duì)于端到端平均投遞時(shí)延,仿真結(jié)果如圖3,兩種編碼方法都隨著鏈路丟失率增加,端到端平均投遞時(shí)延逐漸增加,原因是隨著鏈路丟失率的增加,解碼矩陣的秩逐漸增加,需要的解碼等待時(shí)間也逐漸增加;TCP/NCLA與TCP/NC相比,端到端的平均投遞時(shí)延相對(duì)較小,平均降低約25.48%,原因是新方法能夠及時(shí)補(bǔ)齊丟失,而使解碼矩陣的秩保持在較小的水平,從而使解碼等待時(shí)延也較小,因而平均投遞時(shí)延也較小。
圖3 端到端平均投遞時(shí)延與端到端丟包率關(guān)系Fig.3 Delivery delay vs.loss rate end-to-end
本文基于TCP/NC協(xié)議提出了一種適用于航空移動(dòng)通信的具有丟失感知的新方法TCP/NCLA。
1)新方法將TCP網(wǎng)絡(luò)編碼應(yīng)用到航空移動(dòng)通信領(lǐng)域,并根據(jù)航空移動(dòng)通信的特點(diǎn)進(jìn)行適應(yīng)性調(diào)整,很大程度上改善了航空移動(dòng)通信中高突發(fā)誤碼和高隨機(jī)誤碼導(dǎo)致的吞吐量下降的問題。
2)新方法使用丟失反饋的方法,不再需要預(yù)知鏈路丟失率,在一定程度上解決了原方法由于包丟失與冗余添加的不同步性所導(dǎo)致的吞吐量與理論上限存在較大差距的缺陷。
3)改進(jìn)后的方法使冗余添加更加及時(shí),使解碼等待時(shí)間大大縮短,從而縮短了端到端的平均投遞時(shí)延。
TCP的網(wǎng)絡(luò)編碼方法要在實(shí)際中應(yīng)用需要注意很多問題,TCP/NCLA在提高吞吐量和降低時(shí)延方面有所改善,然而還存在一些難題,如降低解碼復(fù)雜度等,這些都是在以后的工作中重點(diǎn)研究的方向。
[1]HANBALI A AL,ALTMAN E,NAINP.A Survey of TCP Over ad Hoc Networks[J].IEEE Communications Surveys&Tutorials,2005,7(3):22-36.
[2]AHLSWEDE R,CAI N,LI S-Y R,et al.Network information flow[J].IEEE Trans Inform Theory,2000,46(4):12.4-1216.
[3]KATTI S,RAHUL H,HU W,et al.XORs in the air:Practical wireless network coding[J].ACM SIGCOMM Computer Communication Review,2006,36(4):243-254.
[4]SUNDARARAJAN J K,SHAH D,MEDARD M,et al.Network Coding Meets TCP[C].Proceedings of IEEE INFOCOM,2009.
[5]SUNDARARAJAN J K,JAKUBCZAK S,MEDARD M,et al.BARROS J.Interfacing Network Coding With TCP:An Implementation[C].Proceedings of IEEE INFOCOM,2010.
[6] BRAKMO L S,PETERSONL L.TCP Vegas:End to end congestion avoidance on a global internet[J].IEEE JSAC,1995,13(8):1465-1480.
[7]SHIHADA B,ZHANG Q,HO P-H,et al.A novel implementation of TCP Vegas for optical burst switched networks[J].Optical Switching and Networking,2010,7(3):115-126.
[8] Network Simulator-ns-2[EB/OL].[2012-05-08].http://www.isi.edu/nsnam/ns/.