*
(1.江蘇方天電力技術有限公司,南京 211102;2.南京大學計算機科學與技術系,南京 210023;3.南京大學金陵學院信息科學與工程學院,南京 210089)
傳輸控制協議(Transmission Control Protocol,TCP)是可靠的、面向連接的擁塞控制協議,其廣泛應用于各類網絡,包括有線網絡、無線網絡和容器集群網[1]等。TCP 是一種傳輸層協議,可確保數據段的有序交付,從而補充了網絡層的Internet 協議。TCP 主要是為有線網絡設計的,當應用于無線場景時,它會面臨性能下降的問題。因此,了解無線網絡中的TCP行為以及用于增強TCP性能的方法是一項重大挑戰[2]。
無線網絡中,網絡傳輸發生數據丟包的概率會因網絡不穩定而變大,如移動設備與無線路由器之間有障礙物或兩者距離較遠時。文獻[3-4]的研究表明,通過無線網絡進行高速數據傳輸,會因為各種原因產生1%~10%的丟包。TCP 協議為確保數據傳輸的可靠性,接收端檢測到丟包后會要求發送端重傳報文,這將大大增加數據傳輸時延,并占用額外帶寬重傳數據,影響到后續數據段的傳輸。因此,減少丟包重傳對于提升網絡傳輸速率具有重要意義。
前向糾錯[5]是解決丟包重傳問題的有效方法,其核心是通過冗余數據段,降低重傳的概率。通過前向糾錯機制,接收端即使發現了丟包,仍然可以基于接收到的冗余數據段,恢復丟失的信息,避免報文重傳。基于前向糾錯的TCP 傳輸機制工作于TCP 層與IP 層之間,報文在TCP 層根據最大報文長度(Maximum Segment Size,MSS)形成待發送的數據段后,通過前向糾錯編碼生成一個或多個冗余數據段,并可通過設定糾錯編碼的參數調節冗余數據段的比例。冗余段與有效數據段的比值越大,丟包恢復能力越強,但傳輸相同數量有效數據需要的額外帶寬也越多;反之,則丟包恢復能力越低,額外傳輸代價也相對較低。
冗余段比例與數據段完成傳輸的時間關系比較復雜,不是簡單的線性關系。如何確定冗余段比例是設計前向糾錯機制的難點問題。對于一組連續的數據段而言,丟失的數據段越多,重傳花費的時間就越長,并影響后續的連續數據段傳輸。提高冗余段比例能夠減少丟包的概率,減少重傳,進而減少數據段的傳輸時間。但是由于可用帶寬是有限的,冗余段比例增加會使得冗余段占用的帶寬增加,有效數據段可用的帶寬減少,又會使得數據段完成傳輸的時間變長。因此為了最大限度地對傳輸時間進行優化,需要在增強冗余恢復以及減少冗余段之間找到最佳平衡點,即找到最優冗余段比例。
針對上述問題,目前已有研究工作針對不同的應用場景研究確定前向糾錯的冗余比例[6-9]。文獻[6-7]關注應用的最小傳輸速率,即在達到最小速率之后使用較低的冗余段比例以減少冗余數據占用的額外帶寬,提升有效數據的傳輸效率。文獻[8-9]則針對網頁訪問等時延敏感的應用,提出以較高的冗余段比例保證最少的重傳。這些研究重點關注提高冗余段比例來降低丟包,而忽略了冗余段本身占用帶寬帶來的影響。在連續數據段的數據量遠小于傳輸帶寬時,提高冗余段可有效提升傳輸性能。但當連續數據段的數據量較大時,如文件傳輸協議(File Transfer Protocol,FTP)下載或多媒體應用,單純提高冗余數據比例會影響傳輸速率。因此,現有方法難以適應多變的網絡環境和應用類型。
對此,本文研究提出了一種動態的自適應調整的前向糾錯機制,可根據網絡狀況以及發送端發送數據的速率調整冗余段比例以最小化連續數據段傳輸的時間。具體而言,首次對求解TCP 傳輸的冗余段比例問題進行建模,在已知一組數據段長度的情況下,以數據段完成傳輸的時間為優化目標,以降低前向糾錯后的丟包率為約束條件。在這基礎上,設計一種兩段式前向糾錯機制,先通過梯度下降法高效求出最優冗余段比例,再根據網絡狀況動態更新冗余段比例,以優化傳輸性能。為了最小化參數確定過程引入的計算時延,利用相鄰多組TCP 段面臨的網絡狀況相似的特點,通過將周期性建模求解與基于接收端反饋調整的自適應參數確定算法相結合,在降低優化問題的求解頻率同時保證冗余段比例的最優。本文主要工作可概括如下:
1)本文首次對前向糾錯機制設計中求解TCP傳輸的最優冗余段比例問題進行建模,該模型精確刻畫了前向糾錯不同的冗余段比例對網絡傳輸帶來的影響,能夠在保證連接傳輸穩定的情況下最小化數據段傳輸的時間。
2)本文提出了一種兩段式的基于前向糾錯的自適應傳輸機制(Adaptive transmission mechanism based on Forward Error Correction,AdaptiveFEC)。該機制首先通過周期性求解優化問題,精確確定傳輸過程中的最優冗余段比例,并能利用反饋機制根據周期之間的網絡狀況變化進行冗余段比例的調整,使TCP連接上的數據傳輸的成功率維持在較高水平。
3)實驗結果表明,與靜態的前向糾錯機制相比,本文提出的自適應網絡傳輸機制能大幅提升傳輸速率,仿真實驗中平均提升了42%,真實通信實驗中將傳輸速率至少提升至原先的2倍。
在不穩定的網絡環境中,丟包是無法避免的。前向糾錯機制是解決丟包重傳問題的有效方法。當前,已有很多研究工作針對不同的應用場景設計不同的前向糾錯機制,以提升網絡傳輸性能。根據不同的應用類型,現有研究工作大致可以分為兩大類:時延敏感類應用研究和時延不敏感類應用研究。
1)時延敏感類應用研究。時延敏感類應用研究如實時視頻對傳輸的時延要求比較高,這類應用在應用層將數據幀劃分為多個應用層數據包并對數據包進行冗余,之后將數據包發往傳輸層處理。此時,幀的失真率以及數據傳輸速率對應用體驗影響較大。如何設置應用層冗余數據包比例以保證關鍵幀的最小失真,同時能保證最小傳輸速率是實時視頻應用的關鍵問題。文獻[10-11]使用擴展窗口的前向糾錯編碼對視頻流傳輸的冗余比進行實時調整;文獻[12]基于決策樹為不同網絡狀況下的視頻流傳輸調整冗余比;文獻[13]利用基于低密度奇偶檢查(Low-Density Parity-Check,LDPC)碼的前向糾錯編碼為視頻監控系統傳輸提供前向糾錯。以上文獻利用網絡狀況進行冗余比例調整,但是沒有考慮到數據段的特征,導致當應用于一般應用時效果較差。文獻[14]根據360 度視頻流中視場角(Field Of View,FOV)不同調整不同幀的冗余比;文獻[15-17]利用當前接收端對幀接收率的反饋為下一時刻傳輸調整冗余比;文獻[18]通過應用層的速率控制以及應用層數據包冗余減小視頻失真率;文獻[19]根據不同應用的服務質量(Quality of Service,QoS)需求為傳輸設定冗余比。以上文獻利用了視頻幀的特有信息,導致這些工作不能應用于一般應用。
2)時延不敏感類應用研究。時延不敏感類應用對傳輸時延不敏感,如文檔傳輸、網絡聊天等。這類應用多數是基于用戶數據報協議(User Datagram Protocol,UDP),而UDP 數據包的成功傳輸是可以消除因重傳帶來的高時延,進而提高數據傳輸的效率。此時傳輸時延以及吞吐量對冗余比的影響較大。文獻[20]中將網絡環境變化建模成馬爾可夫過程來調整受限制的應用協議(Constrained Application Protocol,CoAP)協議傳輸過程的冗余比,該研究針對低速率、低帶寬環境設計算法,當應用于需要提高傳輸速率的場景中時優化效果較差。文獻[21]將前向糾錯作為擴展加入到快速UDP 網絡連接(Quick UDP Internet Connection,QUIC)協議中,但并沒有針對于網絡狀況以及連接上的數據量等因素對冗余段比例進行動態調整。
綜上,現有研究工作設計的機制要么是靜態的,要么多是針對特定的應用進行優化,即時延敏感類應用或者低速率情況下的時延不敏感應用,而對高速率情況下的應用如大文件傳輸涉及得較少。因此,亟須設計動態的自適應前向糾錯機制,來有效地提升機制應用的廣泛性。
本章對基于前向糾錯的TCP 傳輸過程進行描述,為下一步問題建模打下基礎。
糾刪碼(Erasure Code)[22-23]是前向糾錯技術核心技術之一,其基本思想在于通過對數據進行一定量的冗余,使得原數據發生丟失時能夠通過冗余數據進行數據恢復。相較于多副本復制的方法來說,糾刪碼的數據冗余度更小,但是同時糾刪碼的編碼方式也較為復雜,需要的計算量較大。糾刪碼主要包括三大類:陣列糾刪碼、里德-所羅門類糾刪碼[24-25]和奇偶校驗糾刪碼[26-27],后兩者更多應用于網絡傳輸中。
為減少冗余編碼時間,現有研究中多使用奇偶校驗的方式進行冗余編碼。由于奇偶校驗編碼只能產生一個冗余段,且有效數據段的數量必須為整數,使得冗余段比例的可行解集合較小,不利于獲得性能較好的解。對此,本文采用里德-所羅門類糾刪碼,其能夠對任意的有效數據段數量生成任意數量的冗余段,丟失的少于冗余段數量的任意報文段均恢復。
基于前向糾錯的網絡傳輸過程可細分為三個模塊:重新劃分報文段的模塊、控制模塊以及前向糾錯模塊,三個模塊及傳輸過程示意圖如圖1 所示。報文形成待發送的數據段后,進入重新劃分報文模塊進行緩存。每過一段時間,重新劃分報文模塊將等待發送的數據段信息發送給控制模塊,之后控制模塊確定當前的最優冗余段比例,即有效數據段以及冗余數據段數量,分別發給重新劃分報文模塊以及前向糾錯模塊。重新劃分報文段模塊重新劃分出長度相等的報文段后,將編碼信息存放在頭部的額外空間中,再將添加完頭部的報文段封裝成IP 數據包發送到接收端。接收端收到報文段后,若發生報文段丟失,則嘗試利用冗余段信息進行報文段恢復,之后將原始TCP段傳遞給上層,若無法對丟失的報文段進行恢復,則由發送端進行重傳。
控制模塊中如何確定冗余段比例是前向糾錯機制設計的難點所在,也是本文研究的關鍵問題。下一章,將對該問題進行建模,并基于此設計自適應前向糾錯機制。

圖1 基于前向糾錯的網絡傳輸過程Fig.1 Network transmission process based on forward error correction
首先介紹建模涉及的數學符號及其表示意義。假設TCP連接上的第i時刻端到端的網絡丟包率為λ,連接上端到端時延為d,可用帶寬為B,發送端當前積累的未編碼數據段的數量為s,這些數據段的總長度記為ltotal,從產生首個數據段到產生最后一個數據段所經過的時間為T,前向糾錯的數據段以及冗余段數量分別用n和m表示,冗余段比例即為m與n的比值。在每一輪的數據傳輸中,重新劃分報文模塊將冗余前等待發送的長度為ltotal的數據平均劃分為n個數據段,編碼后產生m個冗余段,將共(n+m)個數據段發送至接收端,lheader為接收端所需要的前向糾錯編碼信息的長度,前向糾錯信息被添加到所有數據段以及冗余段的頭部位置,這些數據段的數據總長度為L。
冗余段比例與丟包率、端到端時延以及連續數據段的數據量有關。提高冗余段比例能夠減少數據段的重傳,進而減少由于重傳對數據段傳輸時間的影響。但是提高冗余段比例會增加冗余數據量,數據傳輸時間也會相應增加。因此冗余段比例的改變會對連接上首次傳輸數據段和冗余段的時間以及重傳的額外時間都造成影響。本文通過刻畫首次傳輸需要的時間和重傳的額外時間來表征冗余段比例對傳輸效率的影響,并以此為優化目標,尋找最佳冗余段比例,以提升數據傳輸效率。
首次傳輸的時間包括數據段在TCP協議棧中被處理的時間和數據段在鏈路上傳輸的時間。數據段在TCP協議棧中被處理的時間包括數據段等待編碼的時間以及編碼后進行發送的時間,因此首次傳輸的時間為上述三段時間的和。
如第2 章所述,重新劃分將所有數據段分為相同長度,因此每個劃分數據段需要發送的數據長度ltotal被平分后取整再加上頭部長度,因此數據段總長度可以可表示成如下形式:

為了不在網絡中引發擁塞,每個時間單位中發出的數據量應當不超過連接的可用帶寬Bi,因此為了將總長度為L的數據發出,發送端數據的所需要的時間tdelay為:

首個數據段從產生到被發送端發出,經過的時延為T,由于在高速的數據傳輸過程中,數據段是連續到來的,可以近似認為數據是勻速產生的,即每個數據段的等待時延按照數據段到來的時間間隔均勻減小。因此發送端等待數據段的平均時間可計算為:

綜上,首次傳輸的時間計算為ttransfer+tdelay+d。
單次重傳數據段需要的額外時間包括重傳信號返回的時間和重傳的數據段在鏈路上的傳輸時間,即2d+tdelay。同時注意到,單次重傳所需額外時間與需要重傳的概率有關。假設接收端成功恢復數據段的概率為P,則單次重傳數據段的額外時間可計算為(1-P) ×(2d+tdelay)。
正如第2章所述,采用的里德-所羅門類糾刪碼能夠在丟失的數據段個數少于冗余段數量的情況下對任意丟失的數據段進行恢復,即一組數據段不需要重傳的條件為接收端收到的數據段及冗余段數量大于或等于n。對于無線網絡中的傳輸過程來說,網絡中的丟包往往是由于信號強度不夠導致接收端錯誤接收了信號或信號丟失,這樣產生的多次丟包之間往往是沒有關聯的,因此可以將數據段的丟失看成獨立的隨機事件。使用隨機獨立實驗的相關推論計算接收端成功恢復數據段的概率P如式(4)所示:

綜上,數據段的傳輸時間D為首次傳輸的時間和單次重傳時間之和,即:

本文目標是最小化數據段的傳輸時間D,尋找冗余段比例,優化問題見式(6)~(12)。條件(7)表示數據發送時,單個數據段加上頭部后的大小不能超過最大傳輸單元(Maximum Transmission Unit,MTU)的大小,否則會在網絡層被分片,增加額外的時延,這是由網絡的基本屬性決定的。條件(8)表示TCP 連接上發生丟包時,擁塞窗口會發生一定程度的縮小,若一組數據段成功傳輸的概率低,則連接上會發生較為頻繁的丟包,擁塞窗口可能會在恢復原有值之前再次縮小,導致擁塞窗口無法增大,并因此限制TCP連接的傳輸速率,優化目標中的傳輸時間沒有反映這種情況,因此通過條件(8)表明希望丟包率維持在較低的水平,其中M代表線路上的最大報文段長度。若有效數據段的值過大,由于劃分后每個數據段的長度為總長度平分后的均值,經過重新劃分報文的重新劃分后每個數據段的長度可能過小,此時數據段前添加的頭部所占的比重就會過大,會占用過多的額外帶寬,因此兩個數量有所限制,如條件(9)~(10)所示。條件(11)~(12)表明前向糾錯需要確定的參數n和m均為整數,且m可以為0,m為0即表示此時不需要進行冗余。

通過對上述優化問題的最優解進行求解,便能夠得到當前連接的最優冗余段比例。
網絡數據傳輸時,通常在一段時間內傳輸是較為穩定的,此時的最優冗余段比例大致是相同的。因此,多組數據段之間通常不需要頻繁地對優化問題進行求解。降低優化問題的求解頻率,能夠進一步減少在數據傳輸過程中引入的時延。但網絡不可避免地會發生網絡波動,當網絡狀況變差時,原先的最優冗余段比例難以保證數據段的穩定傳輸,會導致丟包概率增大,觸發擁塞窗口縮小,使得傳輸速率下降,此時需要針對網絡狀況動態調整冗余比例。
基于上述認識,本文提出了一種兩段式的自適應調整傳輸機制,實現針對不同的網絡狀況動態調整冗余段比例,優化網絡傳輸效率。該機制包含兩模塊:第一個模塊為最優冗余段比例確定算法,用于求解最優冗余段比例。第二模塊是通過基于丟包率統計的冗余段比例調整算法,用于對前向糾錯的參數進行動態設置。整體的基于前向糾錯的自適應傳輸機制結構示意圖如圖2 所示,最優冗余段比例確定算法按照一定時間間隔對最優化問題進行求解,為了保證這段時間里最優化算法是有效的,再通過基于反饋的調整機制對m和n進行調整。下面分別介紹兩個算法。

圖2 基于前向糾錯的自適應網絡傳輸機制Fig.2 Adaptive network transmission mechanism based on forward error correction
對優化問題的目標進行觀察可以發現,在每組數據段即將發送時,排隊時延以及鏈路的時延已經確定,數據段的發送時延以及接收端成功恢復數據的概率P都是隨著冗余段數量增加而遞增的。因此先確定n的大小,之后計算m的大小。算法偽代碼見算法1。
首先通過約束條件(7)以及約束條件(9)計算得出n。確定n之后,再對m進行求解。求解m時先對原問題中的整數條件進行放松。在m為非整數條件下概率P中的以及求和函數沒有意義,因此在求和函數以及中用m替代m,得到放松后的概率函數P如式(13):

放松后的P雖然不連續,但是在每個連續區間內是可導的,在每個連續區間內P的導數如式(14):

將概率函數以及式(2)代入目標函數,由上述分析可知,此時目標函數是在個別點不可導,但是在每個連續區間內可導,可得每個m取值處的導數
但是通過對函數二次求導可以發現目標函數可能是非凸的,不能使用凸優化的相關方法進行優化,因此選擇適用梯度下降的方法對目標函數進行優化,通過選擇合適的學習率,梯度下降算法能夠通過多輪迭代找到非凸問題的局部最優解,對應算法的第3)步。第3)步中求解得到解最優解m',此時得到的m'可能不滿足原問題中對m的整數約束,需要對m'向上取整和向下取整,取使得D最小同時滿足約束條件的解,作為每個n取值對應的最優解,該步對應算法的第4)步。最后取不同n對應的最優解中的最優解作為算法整體的最優解,該步對應算法的第6)步。
算法1 最優冗余段比例確定算法(Optimal Redundant Segment Ratio Determination Algorithm)。
輸入:緩存隊列總長度ltotal、網絡丟包率λ、接收端數據恢復成功率P;
輸出:數據塊數量n,冗余塊數量m。
1)求解約束(7),得到n的范圍,將n的最小值計為nmin,n的最大值計為nmax;
2)FOR(n=nmin;n≤nmax;n++)DO
3)對原問題的整數約束條件進行放松,根據式(14)對目標函數求導,利用梯度下降的方法對原問題的目標函數進行優化,得到局部最優解m';
4)對m'向上取整以及向下取整,分別對目標函數值進行計算,取能夠使目標函數取到較小值的m作為算法這一輪的最優值
5)ENDFOR
6)取每一輪的最優值中目標函數最小的結果的n和m作為算法的輸出
為了應對網絡情況的變化對冗余比例進行調整,首先需要對網絡狀況的變化進行感知,網絡狀況的變化主要通過丟包率的變化來表示,因此需要先對TCP連接上的丟包率進行計算。
通過利用TCP協議自帶的丟包重傳機制對TCP連接的丟包率進行計算。由于前向糾錯是針對即將發送的TCP 數據段,接收端的TCP 協議棧收到的是嘗試恢復之后的數據段。一組數據段如果能夠在接收端被成功恢復,發送端的TCP 協議棧是不會對數據段進行重傳的,其只會對接收端未成功恢復的部分數據段進行重傳。當發生重傳時,表明本輪計算時使用的丟包率低于真實丟包率,此時需要提高數據段的冗余比例。具體的丟包率計算方法見算法2。
算法需要對重傳數據段進行判斷,由于TCP 數據段都有數據段序號,對重傳數據段的判斷可以通過數據段序號進行。對于每個統計丟包率的時間間隔,記錄下該時間間隔中第一個到達的數據段的序號,作為這個時間間隔中的最小序號與最大序號的初始值,根據后續數據段的序號更新該時間間隔內最大序號的值,并統計該時間間隔內的數據段總數,即算法2 第2)和3)步。顯然,如果發出的數據段的序號在當前的最大序號和最小序號之間,根據TCP 數據段的編號規則可以得知當前發出的數據段是重傳數據段,需要對丟失的數據段的數量進行更改,即算法2第5)步。在時間間隔結束時,發送端將時間間隔內發送的總數據段與成功傳輸的數據段的數量進行統計,計算得到鏈路的丟包率,即算法2第6)步。在高速數據傳輸的TCP 連接上,由于每個時間間隔內發出的數據段數量很多,通過在每輪數據段發送時調用算法2,計算得出的丟包概率與真實丟包概率相近。數據發送速率越高,調用算法2的頻率就越高,即算法2得出瞬時丟包率會越高。
算法2 丟包率估計算法(Packet Loss Rate Estimation Algorithm)。
輸入:當前序號區間(Smin,Smax),當前發送包的序號S,丟包數量nloss,發送包數量nsend;
輸出:瞬時丟包率λ。

完成了對網絡狀況的估計后,再根據網絡狀況的變化調整冗余比例。為了能夠在較小的時間粒度對網絡狀況作出反應,算法每過一個較小的時間間隔就根據當前的丟包概率進行冗余比例的調整。考慮到TCP在高速傳輸時數據到來的速度較快,一個時間間隔內每輪的數據量相差不大,因此n的最優值不需要進行改變,只需要通過改變m的值來調整糾錯能力,即冗余段比例。具體的調整算法見算法3。
當網絡狀況變差時,需要提高數據傳輸的冗余比例,考慮到每一輪數據的丟包具有隨機性,因此不能只根據一個時刻的丟包率上升就提高冗余比例。通過實驗發現,連續三個時刻丟包率上升時,能夠比較準確地反映出網絡狀況變差的情況,因此當連續3 個時刻丟包率都上升時增加冗余數據段的數量,即算法3 第1)步的判斷。當網絡狀況變好時,TCP 連接是較為穩定的,且丟包率較低,此時需要降低冗余比例來提高數據傳輸的有效速率。但由于丟包率較低時缺少明顯的可用特征,通過在長時間的穩定傳輸之后嘗試減少冗余段比例來提高傳輸速率,即算法3 中第2)步的判斷。算法3 會使用到算法2 的輸出,考慮到發送速率越高,算法2 得出瞬時丟包率會越高,所以使用丟包率序列的長度T1來做判斷,能夠比較快地對網絡變化做出反饋。設置T1>180是一個經驗性的參數設置,通過實驗驗證了這一設置效果良好。當上述情況均不滿足,認為當前的網絡狀況與之前變化不大,即維持之前的冗余段比例進行傳輸。
算法3 基于丟包率的冗余段比例調整算法(Packet Loss Rate-based Redundant Segment Proportional Adjustment Algorithm)。
輸入:t時刻統計的連續丟包率序列(λt,λt-1,λt-2),丟包率閾值λ′,低于閾值的最大連續丟包率序列長度T1,當前冗余段數量m;
輸出:下一時刻冗余段數量m'。
1)如果(λt,λt-1,λt-2)均大于λ′,且滿足λt≥λt-1或者λt≥λt-2,則m'=m+1
2)如果當前時刻的丟包率低于丟包率閾值λ′,且滿足T1>180,則m'=m-1
3)如果上述條件均不滿足,則m'=m
4)返回m'
假設算法1在每一輪循環里的梯度下降的迭代輪數為k,最壞情況下求得局部最優解后由于局部最優解不滿足約束條件要不斷調整直到mmax,因此算法在最壞情況下的總的復雜度為O(nmmaxk)。假設在每一輪數據發送時使用里德-所羅門編碼進行數據的冗余編碼,由于里德-所羅門編碼的編碼時間與數據塊的數目有關,編碼次數與數據塊的大小有關,因此在使用某一冗余比例進行編碼的時間復雜度為O((m+n) ×算法2 在每次計算過程中,只需要少量的過去信息以及固定次數的運算,因此算法的復雜度為O(1)。同理,算法3的復雜度也為O(1),使用某一冗余比例進行編碼的時間復雜度同樣為O((m+n) ×
由于本文降低了優化問題的求解頻率,一組數據段發送時大多數情況下通過算法2與算法3來確定最優冗余段比例,兩個算法的時間復雜度為O(1),因此在大部分情況下,自適應機制的時間復雜度是O((m+n) ×
本章通過實驗來驗證本文設計的自適應網絡傳輸機制的性能。
實驗通過兩臺服務器實現,服務器的硬件參數是64 GB內存,24 個Intel Xeon CPU,每個CPU 2.1 GHz。服務器的操作系統是Linux。兩臺服務器進行網絡通信,使用網絡測試工具iperf3 產生網絡流量,網絡狀況模擬使用Linux 自帶的流量控制功能模塊以及防火墻實現。為了模擬無線網絡中的網絡能力,特將網絡帶寬限制不超過10 MB/s。實驗數據均是100次求平均所得。
為驗證本文提出的AdaptiveFEC 的性能,將在不同的情況下測試TCP 連接傳輸效率。首先,通過仿真實驗模擬網絡流量和狀況的變化,來測試機制性能。再通過真實網絡通信設置來測試實際效果。同時,為驗證動態調整策略的優越性,將本文機制與現有的靜態前向糾錯機制進行比較,包括三種算法。在仿真實驗中限制每個數據段的長度為512,以防止不切分數據段的前向糾錯加上前向糾錯信息后由于數據段長度過長而在IP層發生分段。
1)None:即不使用前向糾錯的機制;
2)StaticA(n,m):即使用不切分數據段的靜態前向糾錯機制且冗余參數為(n,m),這種機制每n個數據段生成m個冗余數據段;
3)StaticB(n,m):使用切分數據段的靜態前向糾錯機制且冗余參數為(n,m),這種機制每過0.25 個往返時延(Round-Trip Time,RTT)將待發送的數據段平分為n個數據段,并生成m個冗余數據段。
實驗時,首先在兩端啟用自適應傳輸機制,并在其中一端啟動iperf3 服務端程序,再在另一端使用iperf3 向服務端程序進行120 s 的TCP 數據發送。數據發送時平均數據段長度設為512 B,每過120 s就對端到端的丟包概率進行調整,用以測試自適應丟包恢復機制在網絡環境變差時能否保持速率穩定。在發送過程中使用Linux 的流量控制模塊和防火墻對于網絡狀況進行模擬,每次實驗記錄下數據傳輸速率、冗余比例等數據。
首先將AdaptiveFEC 與None 比較。圖3 展示的是在20 ms的網絡延遲環境中,不同丟包率的情況下兩種機制的平均傳輸速率的比較。圖3 中可以看到,當網絡情況較好,即丟包率較低時,TCP 連接的數據傳輸速率能夠達到平均6 MB/s左右,沒有達到10 MB/s的限制速度。主要是因為網絡傳輸時需要傳輸包括TCP 以及IP 協議頭部等信息,同時接收方的接收窗口大小也是有限的,這些都對TCP的傳輸速率造成影響。當丟包率上升時,相較None,AdaptiveFEC 能有效提升傳輸速率,最高能夠達到40 倍的速率提升。對None 機制而言,在發生丟包時,TCP 的傳輸性能急劇下降,即使只有1%的丟包概率,TCP 的平均傳輸速率也降低了接近80%。這主要是由于TCP自身的慢啟動擁塞機制導致的。

圖3 不同丟包率情況下AdaptiveFEC與None的比較Fig.3 Comparison between AdaptiveFEC and None under different packet loss rates
圖4 和圖5 是在網絡時延為20 ms 的情況下AdaptiveFEC分別與StaticA(n,m)和StaticB(n,m)的比較。比較時設置不同的丟包率和冗余段比例。可以看出(圖5(a)),靜態的前向糾錯技術對于傳輸速率的改善效果有限,在丟包概率低于5%時還能保持相對較好的傳輸速率,但當丟包概率高于5%時,連接的傳輸速率發生快速的下降,而AdaptiveFEC 卻能始終保持較好的傳輸速率,性能提升平均達42%。主要原因是,隨著丟包率的增大,AdaptiveFEC 能根據網絡狀況動態調整冗余段比例,傳輸性能能保持相對穩定,而靜態的前向糾錯機制的冗余段比例一直不變,丟包率大的情況下冗余恢復有限,使數據重傳概率增大,傳輸性能也就受影響。
同時可以看出(圖5(b)),AdaptiveFEC 能根據網絡狀況動態調整冗余段比例,而靜態的前向糾錯機制的冗余段比例一直處于穩定狀態。在丟包率較高時,AdaptiveFEC 的動態調整冗余段比例可有效提升傳輸性能,這驗證了本文設計AdaptiveFEC的初衷。
圖6是在網絡時延設為10 ms的情況下的實驗結果,也再一次驗證了上述結論。

圖4 不同丟包率情況下AdaptiveFEC與StaticA(n,m)的比較Fig.4 Comparison between AdaptiveFEC and StaticA(n,m)under different packet loss rates

圖5 不同丟包率情況下AdaptiveFEC與StaticB(n,m)的比較(網絡時延為20 ms)Fig.5 Comparison between AdaptiveFEC and StaticB(n,m)under different packet loss rates(network delay=20 ms)

圖6 不同丟包率情況下AdaptiveFEC與StaticB(n,m)的比較(網絡時延為10 ms)Fig.6 Comparison between AdaptiveFEC and StaticB(n,m)under different packet loss rates(network delay=10 ms)
在兩臺服務器中的一臺搭建文件服務器,從另一臺通過無線接入網絡的筆記本電腦上使用wget進行文件下載來構建無線網絡中的通信,筆記本電腦和無線路由器之間相隔一面墻,通過文件下載時間評測機制性能。使用wget 在5%的丟包率、20 ms 時延的網絡環境下進行文件下載,并在兩臺服務器之間通過Linux 的防火墻命令設置隨機丟包以及數據包接收延遲,下載的文件為普通的應用程序安裝包,文件大小總共46 MB。將四種機制進行比較,實驗結果如表1所示。

表1 不同機制的文件下載性能對比Tab.1 File downloading performance comparison of different mechanisms
從表1 中可以看出,不使用前向糾錯技術時,傳輸速度由于5%的丟包率影響,傳輸速率低下,平均速度只有254 KB/s。一旦引入前向糾錯技術時,傳輸速度就有了很大提升,其中采用StaticB(n,m) 機制的平均速度為630 KB/s,采用StaticA(n,m)機制的平均速度為1.36 MB/s,相較None 而言,兩者下載速度分別提升了140%和440%。其中StaticB(n,m)機制與StaticA(n,m)機制相比速度有所下降的原因是wget 下載過程中發送的數據段大小是相對固定的,因此不重新切分數據段的靜態前向糾錯有更小的網絡延遲。另外,從表1 中可以看出,本文提出的自適應傳輸機制的傳輸速度有了最大幅度的提升,平均傳輸速度達到了2.67 MB/s,相較于不使用前向糾錯技術的TCP 傳輸速度提升了9.7 倍,相較靜態前向糾錯方案的速度也至少提升了1 倍以上,再次驗證了AdaptiveFEC性能穩定,傳輸速率高。
相較于仿真實驗,真實通信實驗的性能提升更高的原因是真實通信實驗過程中,除了本文手動設置的丟包率,無線網絡本身也會存在一定的丟包率,實際的丟包率高于本文設置的丟包率,導致靜態策略設置的冗余段比例偏低,而AdaptiveFEC 能夠自適應估計丟包率,因此真實通信實驗中AdaptiveFEC的性能提升更高。
無線網絡中,受各種因素影響數據傳輸易發生丟包,此時TCP 連接的傳輸性能因丟包重傳機制而大幅下降。因此,如何在不穩定網絡環境下增強TCP 傳輸性能一直是難點問題。針對這一問題,本文首先對前向糾錯中的冗余段確定問題進行建模,并提出了一種基于自適應的前向糾錯機制AdaptiveFEC,可針對不同的網絡狀況動態調整冗余段比例,以優化傳輸效率。AdaptiveFEC 采用梯度下降以及局部搜索來為傳輸連接上的前向糾錯尋找最佳冗余段比例,并通過實時監控網絡狀況對冗余數據比例進行動態調整,保持傳輸效率的穩定。通過大量實驗證明,與靜態的前向糾錯機制相比,本文提出的動態的前向糾錯能大幅提升TCP 傳輸的性能,同時能保持傳輸的穩定性。本文設計的算法中最優冗余段比例確定算法執行的時間間隔是固定的,如何根據實際情況靈活調整最優冗余段比例確定算法執行的時間間隔,是下一步將繼續研究的問題。