羅佳偉,張紹鳳,姜勝明
(上海海事大學信息工程學院,上海 201306)
可靠的數據傳輸是保證目的節點可以成功接收發送給它的內容,它是許多水下應用的基礎,例如監視海岸線防御、海上生產、生態監測和科學探索以及災難救援等。水聲網絡的環境復雜且惡劣,水聲通信的質量存在巨大的挑戰,水聲通信的可靠性亟待提高,所以水聲通信的可靠性研究成為各海洋國家最關注的問題之一。
之前有研究人員提出采用ARQ進行檢錯重發,但是水聲信道狀態太差,ARQ進行差錯控制的效果也很差,然后提出改進方法將物理層FEC和數據鏈路層ARQ相結合。也有人提出在網絡層采用包級FEC進行檢錯。這些差錯控制的方案對水聲通信的質量都有一定的改善,但是單層進行差錯控制的方案都有一定的局限性,總體效果都差強人意,實際上數據傳輸的可靠性控制涉及到物理層到傳輸層,如果采用各層相互協作進行差錯控制,這樣就能更好地提高通信的質量,改善水聲通信的可靠性[1]??鐚拥牟铄e控制方式將在第1節進行闡述。
目前為止,水聲網絡的可靠性傳輸仍在研究階段,解決方案大多還是單層的差錯控制方式。不同的單層差錯控制方案主要包括物理層比特級前向糾錯,數據鏈路層的自動重傳請求,網絡層包級前向糾錯,還有在傳輸層TCP端到端的重發[2]。
FEC是利用數據進行傳輸冗余信息的方法,在數據包傳輸之前,先對數據包進行編碼,然后在接收端進行檢測和糾正,當傳輸中出現錯誤,允許接收器再建數據[3]。
比特級FEC以比特為基本單元進行編碼,通常用于物理層的差錯控制,其中使用冗余位來檢測和糾正接收到的信號,冗余位越多,其糾錯能力越強,但是冗余傳輸消耗更多帶寬和更多能量[1]。比特級FEC常用的線性編碼方式有多種,例如常用的線性分組碼漢明碼,Bose-Ray-Chaudhuri-Hocquenghem(BCH),Reed-Solomon(RS)和低密度奇偶校驗碼(LDPC)等。
包級FEC以數據包作為基本的編碼單元進行編碼,通常用于網絡層的差錯控制,通常將噴泉碼作為包級FEC編碼[3]。
噴泉碼是一種新型無碼率編碼方式。噴泉碼是指發送端中由k個原始分組生成任意數量的編碼分組,向接收端不間斷地發送編碼分組,要接收端收到其中任意n>k個編碼分組,能夠以較高的概率恢復信源分組信號[4]。噴泉碼優點:適應多種變化的信道狀況,具有自適應鏈路信道狀態的特性,噴泉碼能夠充分利用信道容量,擁有很小的譯碼開銷ε,編譯碼簡單。
其中Raptor碼是目前最有效的噴泉碼[5],Raptor編碼流程示意圖如圖1所示。

圖1 Raptor編碼流程示意圖
自動重傳請求是在發送端加入冗余校驗碼,由接收器用來檢測錯誤。如果一個數據包差錯檢測找到錯誤,就會被考慮錯誤。確認(ACK)和計時方案用于實現。ACK是由接收者向相應的發送者發送的短消息指示它已成功收到發件人發送的數據包,如果發件人無法收到預期的ACK或者超時,它將重新發送相同的數據包直到它收到ACK或者重試的次數超過預定義的數字。否定確認(NACK)也可能由接收方發送,告訴發送方有什么未成功收到[1]。
ARQ通常包括用于數據鏈路層的差錯控制和傳輸層TCP端到端的ARQ。
ARQ不需要復雜的編碼或用于錯誤控制的大冗余。但是,在水聲通信中重傳的延遲會很長。
以上各層的不同差錯控制方式都可以提高傳輸的可靠性,但是不能在所有的狀態下保持較好的吞吐量。
本文提出跨層協作的差錯控制方式,FEC可以在ARQ可以保證的情況下進行優化傳輸可靠性。它們可能共存于一個系統中,因為FEC可以減少重傳次數從而控制ARQ重傳的延時通常在物理層上實現比特級FEC而ARQ則在數據鏈路層上提供鏈路層可靠傳輸,防止殘留誤碼和碰撞。此外,還有網絡層包級的FEC協議以及傳輸層的TCP實現以提供端到端可靠的數據包傳輸。如圖2所示。

圖2 可靠性傳輸的跨層設計
信道的丟包率然后使用ARQ保證傳輸可靠性,然后用包級的FEC來避免ARQ大量重傳導致的時延過大,這樣的傳輸可靠性優于FEC/ARQ共存結構[6],最后在傳輸層使用TCP的重傳來保證最后端到端的可靠性,這樣就構成了一個較為完善的提高可靠性的跨層差錯控制方案,其差錯控制的性能更優。
物理層的比特級FEC采用BCH碼,數據鏈路層ARQ采用CRC碼,網絡層的包級FEC采用Raptor碼。
本文是通過EXata平臺進行仿真實驗,對在不同的差錯控制方式場景下的接收端吞吐量進行分析,接收端吞吐量是指接收端單位時間內接收到的數據的比特數,同時對各個差錯控制方式的性能進行分析對比。仿真的場景是在靜態網絡拓撲結構中,將發送節點和接收節點分布在1000m×1000m的范圍內,節點的傳輸范圍是500m,衰減模型采用瑞利衰減模型。節點的發包率服從λ的泊松分布,水聲傳播速度為1500m/s,可用帶寬設置為20kHz,信號頻率為50kHz。
首先利用EXata進行單層的差錯控制進行仿真實驗。將物理層基于BCH碼的比特級FEC、數據鏈路層基于CRC碼的ARQ、網絡層基于Raptor碼的包級FEC差錯控制方式分別進行仿真,從而得到不同差錯控制方式場景下的誤碼率和接收端吞吐量之間的關系,并與采用物理層數據鏈路層和網絡層三層跨層的差錯控制方式得到的結果進行對比,如圖3所示。
由圖3可以看到,物理層的FEC和數據鏈路層的ARQ這兩種方式的接收端吞吐量都隨著信道的誤碼率的增大而減小,但是兩者會在誤碼率減小到一定值的時候有個交叉,也就是它們的吞吐量的大小關系會發生變化,即信道誤碼率小于該誤碼率的時候,物理層的FEC接收端吞吐量會高于ARQ的接收端吞吐量,而誤碼率大于該值的時候就會反過來。在相同的誤碼率的情況下,網絡層的包級FEC的接收端吞吐量比數據鏈路層的ARQ和比特級的FEC的都要高,且基本隨著誤碼率的變大呈線性減小,原因在于基于噴泉碼的FEC能夠連續發送數據包,并且接收端接收到稍大于原始數據包數據的編碼即可解碼整個數據段,這樣就只需要對每個數據段而不是數據包進行反饋,其反饋次數和傳輸時間會遠遠小于基于數據包進行反饋的差錯控制方案[7]。
圖3的仿真結果表明,在信道狀態改變時,也就是誤碼率由小變大的過程中,采用物理層數據鏈路層網絡層三層相結合的跨層差錯控制方式明顯比單層的差錯控制方式得到的接收端吞吐量要好,也就是更能提高水聲網絡通信的可靠性。原因在于,在物理層和數據鏈路層加入差錯控制后,當誤碼率增加時,比特級的FEC和ARQ已經一定程度上減小了丟包率,這時噴泉碼不需要發送過多的編碼包就可以成功解碼[8]。

圖3 單層與跨層差錯控制比較CRC(127,111),BHC(127,85)
圖4是將在不同層的跨層的差錯控制方式進行仿真比較。首先在物理層采用基于BCH碼的比特級FEC、數據鏈路層基于CRC碼的ARQ、網絡層基于Raptor碼的包級FEC跨層的差錯控制方式進行仿真,然后將網絡層的差錯控制方式更換成傳輸層的TCP重發,再進行仿真,最后將物理層到傳輸層四層的差錯控制方式結合進行聯合的差錯控制仿真,此時比特級的FEC 采用的編碼效率是 CRC(127,111),BCH(127,85)。
由圖4可以得到,在相同的誤碼率的條件下,采用物理層數據鏈路層網絡層跨層的差錯控制方案會比物理層數據鏈路層傳輸層跨層的差錯控制方案好,原因在于網絡層的包級FEC差錯控制效果是比較好的,當去掉網絡層的差錯控制而直接在傳輸層進行TCP的重發時,由于水聲網絡的傳輸延遲大的問題,會嚴重影響其性能。
而由圖5同樣可以得到,當采用從物理層到傳輸層聯合進行差錯控制的時候,在誤碼率不是太差的時候其差錯控制的效果是優于任何跨三層的差錯控制方案的。但是在誤碼率太高的時候,可能會由于TCP的重傳導致其吞吐量低于沒有傳輸層參與差錯控制的方案,所以在仿真結果中出現了交叉的情況。
圖4與圖5是在相同的場景,不過是采用不同的編碼效率進行仿真,圖5的編碼效率是采用CRC(127,95),BCH(127,64)。由仿真結果可以得出,當改變編碼效率以后,物理層數據鏈路層網絡層三層結合的差錯控制方式仍然比物理層數據鏈路層傳輸層相結合的方式要好,而且從物理層到傳輸層都有差錯控制的方式性能也是好于前兩種的。結論與圖4的基本一致,說明在不同的編碼效率下之前的結論也成立,但是同時也說明了接收端吞吐量與編碼效率也是有關系的。

圖4 單層與跨層差錯控制比較CRC(127,111),BHC(127,85)

圖5 單層與跨層差錯控制比較圖CRC(127,95),BHC(127,64)
通過分析單層差錯控制方案的不足,提出從物理層到傳輸層多層結合的跨層差錯控制方案,充分利用多層協作,通過平衡冗余和時延的差錯控制方案,提升了水聲通信接收端的吞吐量,從而保證水聲通信的可靠性。并且分析對比了幾種不同層的差錯控制相結合的方案,仿真實驗的結果表明,與傳統的單層的差錯控制方案相比本文提出的跨層差錯控制方案在提高水聲通信的可靠性上有更優的性能,并且對比的幾種跨層差錯控制方案表明,從物理層到傳輸層聯合的差錯控制方案性能最優。
同時,通過不同編碼效率的差錯控制方案的對比,實驗結果表明,不同的編碼效率實際上對接收端吞吐量也會有影響,也會影響水聲通信可靠性的提高,因此如何根據當前信道狀態選擇合適的編碼效率以達到接收端吞吐量的最優是本文的后續工作。