為了進(jìn)一步提升弱網(wǎng)場景下的遠(yuǎn)程控制體驗(yàn),提高解碼成功率,貝銳旗下“國民遠(yuǎn)控”向日葵使用了一種自研的混合FEC算法:Oray-Raptor,這一算法可以大幅優(yōu)化遠(yuǎn)程控制技術(shù)在傳輸層的效能。本文將為大家詳細(xì)介紹Oray-Raptor算法及其優(yōu)勢。
深空通信與遠(yuǎn)程控制,Oray-Raptor的誕生
眾所周知,TCP協(xié)議是如今最為常用的網(wǎng)絡(luò)協(xié)議之一,如果接收者發(fā)現(xiàn)報(bào)文錯(cuò)誤或者丟包會(huì)要求發(fā)送者重傳,它會(huì)通過一種“傳輸-確認(rèn)”的反饋機(jī)制來實(shí)現(xiàn)。這是一種糾錯(cuò)機(jī)制,被稱為自動(dòng)重傳(Automatic Repeat-reQuest,ARQ),它對通信損傷具有很強(qiáng)的修復(fù)能力,是一種可靠傳輸。
但它有一個(gè)缺點(diǎn),在高丟包率和大延時(shí)的弱網(wǎng)環(huán)境中,大量的重傳包會(huì)占用有限的資源,使本已糟糕的網(wǎng)絡(luò)進(jìn)一步惡化。ARQ本質(zhì)是以時(shí)間換取可靠性,它會(huì)顯著增加時(shí)延。
在地球上,構(gòu)建于TCP/IP的互聯(lián)網(wǎng)通信,兩端計(jì)算延時(shí)使用的是毫秒(ms)。如果增加傳輸距離,放在深空通信場景,地球與火星探測器之間,延時(shí)將以分鐘計(jì),地火距離隨著各自的公轉(zhuǎn)有遠(yuǎn)有近,一次交互大約需要8~20分鐘。與此同時(shí),遙遠(yuǎn)的距離導(dǎo)致接收者的SNR(信噪比)極低,宇宙中復(fù)雜的電磁輻射使通信環(huán)境更加惡化。
遙遠(yuǎn)的距離對通信的編碼增益提出了極高的要求,此時(shí)傳統(tǒng)的TCP/IP基于反饋重傳的機(jī)制就顯得非常低效。設(shè)想一下,接收者發(fā)現(xiàn)報(bào)文有誤或者丟失(考慮到宇宙空間環(huán)境的不可預(yù)測,這會(huì)經(jīng)常發(fā)生),要求火星探測器再發(fā)一份,這一次交互大約需要多花16~40分鐘,這還只是一個(gè)報(bào)文的重傳。
因此,出于效率的考慮,深空通信一般會(huì)使用高增益的信道編碼。目前,噴泉碼是一種被廣泛使用的編碼方案,它是前向糾錯(cuò)編碼(FEC,Forward Error Correction)中的一種。
事實(shí)上,深空通信和遠(yuǎn)程控制場景中的一些需求非常類似,如它們對延時(shí)非常敏感。遠(yuǎn)控時(shí),如果有較大的延遲,用戶很容易感知到操作存在的滯后性。例如:用戶點(diǎn)擊鼠標(biāo)畫面卻沒有立刻反饋,而是需要等待1~2秒,不僅嚴(yán)重影響了體感,而且無法及時(shí)反饋,也容易引起用戶重復(fù)操作,導(dǎo)致誤操作的問題。顯然,弱網(wǎng)環(huán)境下的遠(yuǎn)控,延時(shí)非常重要。
為了進(jìn)一步提升遠(yuǎn)程控制體驗(yàn),貝銳參考了深空通信的一些技術(shù),綜合使用了Raptor噴泉碼技術(shù)和ARQ優(yōu)化了弱網(wǎng)環(huán)境下的通信效率問題,并研發(fā)了Oray-Raptor混合編碼。
Oray-Raptor傳輸算法
在網(wǎng)絡(luò)環(huán)境允許時(shí),Oray-Raptor采用Raptor噴泉碼技術(shù),優(yōu)先獲得更小的數(shù)據(jù)傳輸延時(shí)。如果遇到丟包率>10%的弱網(wǎng)環(huán)境,超過Raptor噴泉碼的糾錯(cuò)能力后,將使用ARQ進(jìn)行少量數(shù)據(jù)重傳,提高傳輸可靠性,從而滿足基本解碼需求,使得接收方可以重建所有數(shù)據(jù)。
Oray-Raptor算法詳解,融合ARQ與FEC技術(shù)的優(yōu)勢
Oray-Raptor混合編碼使用的Raptor噴泉碼,是和里所碼(RS碼, Reed–Solomon Code)一樣的FEC編碼方式,也是經(jīng)常被討論的兩種編碼。
FEC與ARQ完全不同,它徹底拋棄了TCP的ACK反饋模型,通過冗余編碼技術(shù)對待發(fā)送的數(shù)據(jù)進(jìn)行編碼,即使在傳輸時(shí)出現(xiàn)丟包,接收者也可以通過冗余的編碼對缺失的數(shù)據(jù)進(jìn)行恢復(fù),做到與ARQ的可靠傳輸。它是單向的不需要雙向連接,也沒有反饋機(jī)制,在弱網(wǎng)環(huán)境中,在大規(guī)模丟包和超時(shí)的情況下,FEC相對于傳統(tǒng)的通信模型可以大大提高傳輸效率。由于它的單向傳輸特性,它一般與UDP協(xié)議配合使用。
FEC編碼中的里所碼(RS碼, Reed–Solomon Code)是1960年由麻省理工的Irving S. Reed和 Gustave Solomon提出的編碼方法。但在后來的很長一段時(shí)間,由于沒有實(shí)用的解碼方法一直沒有商用,直到1975年才出現(xiàn)使用歐幾里德算法解碼的關(guān)鍵方法。1982年RS碼首度商用,被廣泛用于CD、DVD、藍(lán)光光盤、RAID6磁盤陣列和某些加密技術(shù)中。
RS碼由于出現(xiàn)時(shí)間較早,已被大量應(yīng)用于視頻通信業(yè)務(wù)中。以DVB-T標(biāo)準(zhǔn)的RS(204,188)為例,該示例設(shè)定了一個(gè)恒定的丟包率,然后計(jì)算該丟包率下解碼成功率,RS(204,188)是指每一組信源信號為188 Bytes,編碼后為204 Bytes,增加了16Bytes的冗余 。
在UDP傳輸中最大糾錯(cuò)能力為16個(gè)信號。只要在連續(xù)發(fā)送的204個(gè)UDP數(shù)據(jù)包中丟包的數(shù)量小于16,即可正確的恢復(fù)數(shù)據(jù)。根據(jù)下圖所示的實(shí)驗(yàn)結(jié)果,我們很容易發(fā)現(xiàn)在丟包率低于3%時(shí),RS(204,188)碼能夠保持較高的解碼成功率(>90%),當(dāng)丟包率5%-10%的區(qū)間中,RS碼解碼成功率急劇降低。6%左右的丟包率下,RS碼已不能有效的重構(gòu)丟包數(shù)據(jù)(60%),需要更大譯碼開銷的RS碼。
此時(shí),RS碼最大的缺點(diǎn)便顯現(xiàn)出來:它不具備自適應(yīng)信道變化的能力,而這在遠(yuǎn)程控制場景跨地域,尤其是跨國的端到端的連接中,是非常常見的。
噴泉碼(Digital Fountain)可以完美的解決RS碼的缺點(diǎn),它包含LT碼(Luby Transform)和Raptor碼兩種,后者是前者的擴(kuò)展。
噴泉碼的定義中,K個(gè)原始數(shù)據(jù)分組可以任意數(shù)量的編碼分組,接收者只要收到其中的M個(gè)分組就可以以較高的概率恢復(fù)全部原始數(shù)據(jù)分組,一般情況下,M略大于K。這個(gè)過程猶如噴泉(編碼器)源源不斷的產(chǎn)生水滴(編碼分組),只要用杯子(解碼器)接收足夠數(shù)量的水滴就可以使用(成功解碼)。它因此被形象的稱為噴泉碼。
噴泉碼的最大特性是無碼率,能完美的自適應(yīng)信道變化,充分利用信道容量。同時(shí)它還具有幾乎完美的線性復(fù)雜度,有利于編碼器和解碼器的簡化。相比而言,RS碼的復(fù)雜度較高,必須將數(shù)據(jù)先分成較小的單元才能降低編碼復(fù)雜度,這一方面會(huì)降低算法對突發(fā)網(wǎng)絡(luò)抖動(dòng)的適應(yīng)能力,另一方面也會(huì)產(chǎn)生較大的包頭比例,降低信道利用率。
下圖是在相同的DVB-T標(biāo)準(zhǔn)的RS(204,188)仿真試驗(yàn)中,RS碼和Raptor碼的解碼成功率表現(xiàn)。數(shù)據(jù)顯示,即使在10%的丟包率下,20%冗余的Raptor碼仍然可以保證可靠的傳輸。
RS碼和Raptor碼在UDP傳輸中的解碼性能
總體來說,Oray-Raptor混合編碼在充分利用于噴泉碼無碼率的特征之余,引入的少量的重傳機(jī)制,以較低的延時(shí)代價(jià),將解碼成功率控制在可接受的范圍內(nèi),進(jìn)一步提高傳輸性能,達(dá)到更高的數(shù)據(jù)凈荷率和帶寬利用率,成功解決了“魚和熊掌不可兼得”的難題。