摘 要:在高安全域的網(wǎng)絡(luò)中需要用單向隔離系統(tǒng)進(jìn)行數(shù)據(jù)傳輸,該類系統(tǒng)具有無(wú)反饋的特性。本文提出FEC丟包恢復(fù)技術(shù)來(lái)解決單向隔離系統(tǒng)可靠傳輸?shù)膯?wèn)題。其分為兩級(jí):第一級(jí)是基于RS碼通過(guò)在信息包后添加冗余數(shù)據(jù)包;第二級(jí)是在包組間進(jìn)行交織編碼。測(cè)試結(jié)果證明方案能夠很好地恢復(fù)出單向數(shù)據(jù)傳輸中丟失的數(shù)據(jù)包。
關(guān)鍵詞:?jiǎn)蜗蚋綦x系統(tǒng);FEC丟包恢復(fù);RS碼;交織編碼
中圖分類號(hào):TN915.02
隨著電子政務(wù)不斷的深入發(fā)展,各行業(yè)對(duì)“物理隔離”加“數(shù)據(jù)遷移”的需求越來(lái)越強(qiáng)烈,政府、公安、稅務(wù)、海關(guān)、電力、鐵道等眾多行業(yè)用戶在將行業(yè)應(yīng)用成果通過(guò)互聯(lián)網(wǎng)向社會(huì)公眾提供電子政務(wù)服務(wù)、或者從互聯(lián)網(wǎng)收集的數(shù)據(jù)遷移到行業(yè)內(nèi)部網(wǎng)絡(luò)時(shí),都需要采用安全可靠、穩(wěn)定高效的網(wǎng)絡(luò)安全隔離與數(shù)據(jù)遷移技術(shù)。
為達(dá)到國(guó)家保密局提出的高安全域網(wǎng)絡(luò)需要實(shí)行“物理隔離”的要求,同時(shí)又能夠解決將低密級(jí)網(wǎng)絡(luò)中的數(shù)據(jù)傳輸?shù)礁呙芗?jí)網(wǎng)絡(luò)的問(wèn)題,目前信息安全領(lǐng)域的研究熱點(diǎn)放在了一種利用光纖單向傳輸特性的單向隔離系統(tǒng)上。由于單向無(wú)反饋傳輸,F(xiàn)EC前向丟包恢復(fù)為解決該類系統(tǒng)的可靠傳輸提供了一種方法。
1 單向隔離系統(tǒng)傳輸架構(gòu)
1.1 硬件傳輸架構(gòu)
由于單向隔離系統(tǒng)應(yīng)用于不同安全域之間的傳輸,必須對(duì)內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)進(jìn)行有效的隔離。本文所述系統(tǒng)采用“2+1”硬件模型設(shè)計(jì),即內(nèi)外主機(jī)加上光導(dǎo)入模塊。內(nèi)外主機(jī)均采用專用的工控主板,憑借高性能的硬件平臺(tái)以保證系統(tǒng)性能的穩(wěn)定性。
1.2 軟件傳輸架構(gòu)
單向傳輸系統(tǒng)的傳輸模塊采用點(diǎn)對(duì)點(diǎn)模式,分為發(fā)送程序和接收程序。發(fā)送程序置于外部主機(jī),接收程序置于內(nèi)部主機(jī)。它是外網(wǎng)到內(nèi)網(wǎng)進(jìn)行數(shù)據(jù)遷移的唯一接口,其他任何功能模塊都建立在基本的傳輸功能模塊之上。如圖1所示:
圖1 FEC包編碼流圖
根據(jù)單向隔離系統(tǒng)本身的特性,考慮需要保證數(shù)據(jù)傳輸過(guò)程中的安全可靠,該系統(tǒng)采用自定義的私有傳輸協(xié)議。為與經(jīng)典的TCP/IP協(xié)議作對(duì)比,筆者將傳輸過(guò)程分為應(yīng)用層,數(shù)據(jù)傳輸層以及物理層的三層結(jié)構(gòu)。物理層指的是光纖信道,數(shù)據(jù)傳輸層采用PF_RING技術(shù)實(shí)現(xiàn)數(shù)據(jù)的高效處理[1],在應(yīng)用層中采用FEC前向丟包恢復(fù)技術(shù)解決可靠性問(wèn)題。
在發(fā)送端,數(shù)據(jù)流中的數(shù)據(jù)被分割成若干個(gè)信息包,組成一個(gè)編碼包組。這些信息包具有相等的長(zhǎng)度,不足用零填充。經(jīng)過(guò)兩級(jí)FEC編碼后,形成含有冗余信息包的數(shù)據(jù)包組。第一級(jí)FEC編碼采用數(shù)據(jù)包級(jí)的RS碼作為糾錯(cuò)編碼,第二級(jí)FEC編碼采用交織技術(shù)以克服連續(xù)丟包錯(cuò)誤。在包頭信息中含有包序號(hào),數(shù)據(jù)包類型以及數(shù)據(jù)包的CRC校驗(yàn)等信息。最后經(jīng)由光纖信道將數(shù)據(jù)傳輸?shù)絻?nèi)網(wǎng)中。
在接收端,通過(guò)數(shù)據(jù)包頭中的CRC判斷數(shù)據(jù)包是否出錯(cuò),以及通過(guò)包序號(hào)判斷數(shù)據(jù)包的是否丟失。保留發(fā)生比特錯(cuò)誤的數(shù)據(jù)包,若丟失則確定丟包位置,再通過(guò)FEC包解碼器在丟包恢復(fù)能力范圍內(nèi)將丟失的數(shù)據(jù)恢復(fù)。由于對(duì)信息包進(jìn)行編碼產(chǎn)生冗余包采用的是系統(tǒng)碼,當(dāng)沒(méi)有比特錯(cuò)誤或者丟包錯(cuò)誤時(shí),接收端可以直接提取出原始數(shù)據(jù)信息,一定程度上提高了接收端的數(shù)據(jù)接收速度。
2 FEC丟包恢復(fù)的原理及實(shí)現(xiàn)
2.1 第一級(jí)FEC
(1)RS碼簡(jiǎn)介。RS碼具有很強(qiáng)的糾錯(cuò)性能,其定義為在GF(q)上(q≠2m),碼長(zhǎng)n=q-1的本原BCH碼稱為RS碼[2]。RS(n,k)碼表示有效信息符號(hào)個(gè)數(shù)為k,碼長(zhǎng)為n個(gè)符號(hào),其中每個(gè)符號(hào)由m比特組成。在糾刪碼原理中,只需要就收到任意k個(gè)符號(hào)就可以恢復(fù)出原來(lái)的k個(gè)源數(shù)據(jù)[3]。
假設(shè)RS碼能夠糾正t個(gè)符號(hào)錯(cuò)誤與e個(gè)符號(hào)刪除,則相關(guān)參數(shù)有如下關(guān)系:碼長(zhǎng)n=2m-1個(gè)符號(hào),信息段長(zhǎng)k個(gè)符號(hào),冗余段長(zhǎng)n-k=2t+e個(gè)符號(hào),最小碼距d=2t+e+1個(gè)符號(hào)。本文研究基于Linux系統(tǒng),以字節(jié)為單位,每個(gè)字節(jié)含有8比特,所以采用RS(255,223)編碼。當(dāng)沒(méi)有符號(hào)錯(cuò)誤時(shí),可以恢復(fù)32個(gè)被刪除的符號(hào)。
(2)RS包編碼及解碼。將一段數(shù)據(jù)流分為k個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包的長(zhǎng)度為固定h個(gè)字節(jié),不足用零填充。依次取每個(gè)數(shù)據(jù)包相同位置上的數(shù)據(jù),分別對(duì)每次得到的k個(gè)字節(jié)進(jìn)行RS編碼得到n-k個(gè)冗余包中的對(duì)應(yīng)字節(jié)。這些數(shù)據(jù)包與冗余包組成一個(gè)數(shù)據(jù)包組,如圖2所示。
圖2 FEC數(shù)據(jù)包組
冗余包R與信息包I的關(guān)系可以用R=I*G表示,其中G為RS編碼的生成矩陣。每個(gè)數(shù)據(jù)包是Pi,i∈(1,k+r)的集合。所以不難看出包編碼是對(duì)包內(nèi)對(duì)應(yīng)字節(jié)的運(yùn)算。
在接收端進(jìn)行解碼時(shí)經(jīng)過(guò)包序號(hào)判斷以及CRC校驗(yàn)等機(jī)制確定錯(cuò)誤包和丟失包,并統(tǒng)一定義為丟包事件。沒(méi)有發(fā)生丟包事件時(shí)直接從數(shù)據(jù)包中提取有效數(shù)據(jù)內(nèi)容,若發(fā)生了丟包事件,則制作該數(shù)據(jù)包組的丟包矢量圖。接著提取出數(shù)據(jù)包組中的對(duì)應(yīng)位,結(jié)合丟包矢量圖通過(guò)RS解碼器恢復(fù)出丟失字節(jié),用這些丟失字節(jié)重構(gòu)出丟失包,完成丟包恢復(fù)。丟包恢復(fù)的能力并不是無(wú)限制,它取決于監(jiān)督位的個(gè)數(shù)。在應(yīng)用中需要綜合考慮實(shí)際的環(huán)境以及編碼效率得到高效可靠的解決方案。
2.2 第二級(jí)FEC
在一個(gè)數(shù)據(jù)包組內(nèi)出現(xiàn)任意位置的n-k個(gè)丟包時(shí)都可以通過(guò)第一級(jí)FEC恢復(fù)出來(lái)。但是當(dāng)出現(xiàn)連續(xù)丟包且超過(guò)上訴丟包容錯(cuò)上限時(shí),其效果就不太理想,為此可有選擇性的采用第二級(jí)FEC。該級(jí)FEC采用交織技術(shù)[4],其本身并不能恢復(fù)已經(jīng)丟失包,而是把一個(gè)發(fā)生連續(xù)丟包錯(cuò)誤離散成隨機(jī)丟包錯(cuò)誤。其編碼與解碼過(guò)程如圖3所示。
圖3 數(shù)據(jù)包間交織恢復(fù)丟包示意圖
圖中演示了兩個(gè)數(shù)據(jù)包組之間的交織恢復(fù)過(guò)程。a,b分別代表一個(gè)數(shù)據(jù)包組,將包組內(nèi)的數(shù)據(jù)包交叉重排組成新的發(fā)送隊(duì)列,當(dāng)發(fā)生連續(xù)丟包時(shí),丟失包被分散到各個(gè)包組中,以此來(lái)降低丟包的影響。在交織時(shí)并沒(méi)有產(chǎn)生額外的信息,所以并不會(huì)降低編碼效率。但是由于需要對(duì)數(shù)據(jù)包進(jìn)行重新排序,不可避免地會(huì)增加系統(tǒng)延時(shí)。交織深度越大,抗連續(xù)丟包能力越大,同時(shí)延時(shí)也越大。所以在軟件開(kāi)發(fā)中使用交織技術(shù)時(shí),可考慮設(shè)置發(fā)送與接收緩存區(qū),將編解碼操作與收發(fā)操作采取異步方式,提高傳輸速率。
3 丟包恢復(fù)測(cè)試
筆者在CentOS6.3系統(tǒng)下使用C++語(yǔ)言完成FEC模塊的開(kāi)發(fā),測(cè)試時(shí)采用的硬件主要有Intel i3-2120處理器,4G內(nèi)存,光卡適配器與多模單窗口光分路器。每次測(cè)試使用不少于1.2千萬(wàn)個(gè)數(shù)據(jù)包,在發(fā)送端進(jìn)行FEC編碼,然后設(shè)置不同的丟包率發(fā)送到接收端,最后進(jìn)行解碼,再與原始數(shù)據(jù)進(jìn)行對(duì)比得到譯碼后錯(cuò)誤率。在測(cè)試中當(dāng)丟包率低于某一個(gè)數(shù)值后,譯碼后錯(cuò)誤率趨于0%,為得到更加精確的測(cè)試結(jié)果,不同程度地增加了測(cè)試包個(gè)數(shù)。按上訴步驟反復(fù)測(cè)試10次取平均值,得到的測(cè)試結(jié)果如表1所示。
從上表可以看出隨著丟包率的增大,譯碼后出現(xiàn)錯(cuò)誤包的個(gè)數(shù)也在增大,即丟包恢復(fù)性能逐漸降低。當(dāng)傳輸時(shí)的丟包率超過(guò)約9.4%時(shí),丟包恢復(fù)性能出現(xiàn)快速惡化的情況;丟包率小于約6.2%時(shí),幾乎能夠恢復(fù)出所有的丟失包,滿足文件傳輸對(duì)可靠性的要求。
4 總結(jié)
本文對(duì)單向隔離系統(tǒng)產(chǎn)品進(jìn)行了簡(jiǎn)要的介紹,考慮到其中存在的可靠性問(wèn)題,提出了兩級(jí)FEC前向丟包恢復(fù)方案。第一級(jí)FEC基于RS編碼方法在發(fā)送端對(duì)數(shù)據(jù)包進(jìn)行包編碼,使接收端在發(fā)現(xiàn)丟包的時(shí)候從一定程度上能夠恢復(fù)出丟失包,減少或消除丟包損失;第二級(jí)FEC使用交織包編碼可將連續(xù)丟包分散到不同的數(shù)據(jù)包組中,旨在提高其在發(fā)生連續(xù)丟包時(shí)的丟包恢復(fù)性能。在單向隔離系統(tǒng)中使用專用Linux作為操作系統(tǒng),筆者用C++實(shí)現(xiàn)FEC丟包恢復(fù)方案,并且對(duì)其進(jìn)行測(cè)試,得出了改方案在不同丟包率下的恢復(fù)情況,證明其在該系統(tǒng)下實(shí)施的可行性。
參考文獻(xiàn):
[1]Du J,Liu P. Design and Implementation of Efficient One-way Isolation System Based on PF_RING[C].2012 Fourth International Conference on Multimedia Information Networking and Security,2012:106-108.
[2]趙曉群.現(xiàn)代編碼理論[M].武漢:華中科技大學(xué)出版社,2008:131.
[3]慕建君,路成業(yè),王新梅.關(guān)于糾刪碼的研究與進(jìn)展[J].電子與信息學(xué)報(bào),2002,24(9):1276-1281.
[4]李如瑋.VolP丟包處理技術(shù)的研究進(jìn)展[J].通信學(xué)報(bào),2007,28(6):103-110.