專利名稱:一種基于數(shù)據(jù)包的單向可靠傳輸方法及收發(fā)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到數(shù)據(jù)的單向可靠傳輸技術(shù),可以有效的解決數(shù)據(jù)包在單向傳輸過程中出現(xiàn)包內(nèi)比特差錯(cuò)和數(shù)據(jù)包丟失的自校驗(yàn)、自恢復(fù),屬計(jì)算機(jī)網(wǎng)絡(luò)通信領(lǐng)域。
背景技術(shù):
單向信道主要應(yīng)用場(chǎng)景隔離網(wǎng)閘的信息安全傳輸系統(tǒng)、深空通信、廣播電視通信 系統(tǒng)等。單向信道下傳輸信息不可靠性包括數(shù)據(jù)包內(nèi)比特的錯(cuò)誤和數(shù)據(jù)包的丟失兩個(gè)方 面。為了保證數(shù)據(jù)的可靠傳輸,目前較常用的技術(shù)自動(dòng)重傳請(qǐng)求(ARQ)技術(shù)和前向 糾錯(cuò)(FEC)技術(shù)。ARQ技術(shù)通過反饋信道,將丟失的數(shù)據(jù)段信息反饋給發(fā)送方,發(fā)送方重 新發(fā)送丟失的數(shù)據(jù)段;FEC技術(shù)通過對(duì)數(shù)據(jù)包分組添加冗余包,使得發(fā)送的數(shù)據(jù)包組具有 一定的丟包恢復(fù)能力。FEC技術(shù)包括基于糾錯(cuò)碼和基于糾刪碼的。糾錯(cuò)碼是不知道差錯(cuò)的 位置,需要足夠多的冗余信息,以便能在接收端能自動(dòng)糾正傳輸差錯(cuò),如漢明碼、里德-所 羅門碼(RS碼)、卷積碼、LDPC碼等。糾刪碼應(yīng)用于刪除信道,如在網(wǎng)絡(luò)中傳輸數(shù)據(jù),可以通 過包號(hào)信息判斷出差錯(cuò)的位置,發(fā)送端可以少發(fā)一些冗余包,提高數(shù)據(jù)傳輸效率。目前常用 RS糾刪碼,奇偶校驗(yàn)碼等碼型,但是現(xiàn)有的糾刪碼方案對(duì)于連續(xù)丟包的恢復(fù)性能很差。單向信道的典型特點(diǎn)是發(fā)送端和接收端的信息傳輸時(shí)只能單向傳遞,發(fā)送端和接 收端沒有任何的信息交互,當(dāng)接收端的接收到的數(shù)據(jù)包出現(xiàn)比特錯(cuò)誤或包丟失的情況下, 發(fā)送端不能將差錯(cuò)信息反饋給發(fā)送端。所以不能通過自動(dòng)重傳來解決傳輸?shù)倪^程中數(shù)據(jù)包 的丟失和出錯(cuò)。只能采用FEC的方法,在發(fā)送端添加一些冗余信息,利用數(shù)據(jù)的相關(guān)性,在 接收端自動(dòng)糾正在傳輸中包內(nèi)的錯(cuò)誤和數(shù)據(jù)包丟失。由于單向信道的特殊性,目前國際國內(nèi)都沒有一個(gè)十分完美的解決方案來完善解 決單向信道下的數(shù)據(jù)包可靠傳輸問題?,F(xiàn)有技術(shù)中雖然可以通過糾錯(cuò)碼的技術(shù)恢復(fù)出數(shù) 據(jù),但對(duì)數(shù)據(jù)包的丟失恢復(fù)能力差,特別是連續(xù)丟包的恢復(fù)能力比較差,而且現(xiàn)有的技術(shù)沒 有很好的兼顧單向信道下數(shù)據(jù)包內(nèi)信息的糾錯(cuò)和丟包恢復(fù)。
發(fā)明內(nèi)容
鑒于上述種種原因,本發(fā)明的目的之一是提供一種基于數(shù)據(jù)包的單向可靠傳輸?shù)?方法,解決數(shù)據(jù)單向傳輸時(shí)不能很好的兼顧包內(nèi)糾錯(cuò)和丟包恢復(fù)的技術(shù)問題。為了達(dá)到上述的目的,本發(fā)明的技術(shù)方案這樣實(shí)現(xiàn)的一種基于數(shù)據(jù)包的單向可靠傳輸方法,其特征在于,包括以下步驟(1)、發(fā)送端將信息數(shù)據(jù)塊分成相等大小的信息數(shù)據(jù)包序列,作為一個(gè)編碼包組;(2)、將一個(gè)編碼包組劃分成幾個(gè)子編碼包組的聯(lián)合,再按照糾刪碼的編碼規(guī)則生 成每個(gè)子編碼包組的冗余包,每個(gè)子編碼包組加上生成的冗余包構(gòu)成一個(gè)子包組;(3)、對(duì)每個(gè)數(shù)據(jù)包進(jìn)行CRC碼(循環(huán)冗余碼)編碼,得到校驗(yàn)信息;(4)、對(duì)各組數(shù)據(jù)包和該組的冗余包進(jìn)行編號(hào),使每個(gè)數(shù)據(jù)包有唯一的ID號(hào),包括兩級(jí)編號(hào)包組號(hào)和子包組號(hào);(5)、對(duì)所有數(shù)據(jù)包包內(nèi)進(jìn)行FEC(前向糾錯(cuò))編碼;(6)、將所述的編碼包組發(fā)送到接收端,發(fā)送時(shí)傳輸協(xié)議選擇UDP協(xié)
議(用戶數(shù)據(jù) 報(bào)協(xié)議);(7)、接收端緩存下接收到的數(shù)據(jù),再對(duì)接收到的所有數(shù)據(jù)包進(jìn)行包內(nèi)FEC解碼, 選用的碼型與發(fā)送端的對(duì)應(yīng);(8)、將數(shù)據(jù)包進(jìn)行排序,對(duì)每個(gè)數(shù)據(jù)包進(jìn)行CRC校驗(yàn);(9)、通過每個(gè)數(shù)據(jù)包的ID號(hào)信息判斷是否丟包,如果子包組內(nèi)沒有數(shù)據(jù)包丟失 或丟失的數(shù)據(jù)包為冗余包,進(jìn)入步驟(10);如果發(fā)現(xiàn)非冗余包丟失,則在子包組內(nèi)利用編 碼時(shí)建立的數(shù)據(jù)包相關(guān)性恢復(fù)出丟失的信息數(shù)據(jù)包;(10)、提取每個(gè)子包組的信息數(shù)據(jù)包,去除冗余包,還原出一個(gè)編碼包組,將信息 數(shù)據(jù)包傳遞給上層應(yīng)用?;谏鲜龇桨福襟E(2)中的子編碼包組的聯(lián)合是指設(shè)定要對(duì)M個(gè)子編碼包組進(jìn) 行包組聯(lián)合,則將信息數(shù)據(jù)包的序列編號(hào)每相差為M的數(shù)據(jù)包組成包含N-I個(gè)數(shù)據(jù)包的子 編碼包組;所述包層糾刪碼選用的為(N-1,N)的奇偶校驗(yàn)碼,數(shù)據(jù)包相同位進(jìn)行模2加生成 冗余包?;谏鲜龇桨?,步驟(5)中,選用線性分組碼、卷積碼、turbo碼、LDPC碼等碼型對(duì) 數(shù)據(jù)包內(nèi)數(shù)據(jù)進(jìn)行編碼,用來對(duì)抗傳輸過程中數(shù)據(jù)包內(nèi)比特層錯(cuò)誤?;谏鲜龇桨?,步驟(6)中,首先將這些信息包發(fā)送出去,再發(fā)送冗余包。一般采 用UDP協(xié)議,在一些特定場(chǎng)合如隔離網(wǎng)閘傳輸系統(tǒng)中,使用自定義的無反饋傳輸協(xié)議?;谏鲜龇桨福襟E(8)中,將接收端的每個(gè)數(shù)據(jù)包的信息/CRC生成多項(xiàng)式(二 進(jìn)制除法),如果能除盡說明在完成包內(nèi)FEC解碼后數(shù)據(jù)包內(nèi)數(shù)據(jù)沒有錯(cuò)誤,否則說明數(shù)據(jù) 包內(nèi)信息仍然有錯(cuò),將其看成是丟包。基于上述方案,步驟(9)中,有信息數(shù)據(jù)包丟失的子包組完成包層糾刪碼解碼,這 里選用糾刪碼是奇偶校驗(yàn)碼;當(dāng)超過所述的子包組的丟包恢復(fù)能力時(shí),接收端向上層報(bào)告 不能恢復(fù)的數(shù)據(jù)包的包號(hào)。本發(fā)明的另一目的是提供一種基于數(shù)據(jù)包的單向可靠傳輸?shù)难b置。為了達(dá)到上 述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種基于數(shù)據(jù)包的單向可靠傳輸?shù)陌l(fā)送端裝置,包括數(shù)據(jù)包產(chǎn)生模塊,用于將待發(fā)送的信息數(shù)據(jù)包按順序劃分成信息數(shù)據(jù)包序列,作 為一個(gè)編碼包組,將編碼包組進(jìn)行分組,形成多個(gè)子編碼包組的聯(lián)合;包層糾刪碼編碼模塊,用于將每個(gè)子編碼包組按照糾刪碼編碼方式,生成冗余 包;CRC編碼模塊,用于將每個(gè)數(shù)據(jù)包內(nèi)的數(shù)據(jù)進(jìn)行CRC編碼,生成的校驗(yàn)信息;數(shù)據(jù)封裝模塊,用于將CRC校驗(yàn)信息、二級(jí)編號(hào)的信息和數(shù)據(jù)包組大小信息等封 裝在數(shù)據(jù)包的包頭;包內(nèi)FEC編碼模塊用于建立包內(nèi)比特之間的相關(guān)性,對(duì)抗傳輸過程中數(shù)據(jù)包內(nèi) 部出現(xiàn)的比特級(jí)錯(cuò)誤,選用線性分組碼、卷積碼、turbo碼、LDPC碼等碼型;傳輸模塊,用于將數(shù)據(jù)包發(fā)送到接收端,可以采用UDP協(xié)議或自定義的無反饋傳輸協(xié)議。基于上述技術(shù)方案,其特征在于數(shù)據(jù)包產(chǎn)生模塊中每個(gè)子編碼包組是將每相差為 M的信息包構(gòu)成,其中M表示設(shè)定的能恢復(fù)的連續(xù)丟包的個(gè)數(shù);所述包層糾刪碼編碼模塊是 指能對(duì)每個(gè)子包組的信息數(shù)據(jù)包按照(N_1,N)的奇偶檢驗(yàn)碼編碼。一種基于數(shù)據(jù)包的單向可靠傳輸?shù)慕邮斩搜b置,包括數(shù)據(jù)緩存模塊接收數(shù)據(jù)包分組,在一段時(shí)間內(nèi)緩存接收到的數(shù)據(jù)包;包內(nèi)FEC解碼模塊,用于糾正數(shù)據(jù)包傳輸過程中的數(shù)據(jù)包內(nèi)出現(xiàn)的比特錯(cuò)誤,恢 復(fù)出每個(gè)數(shù)據(jù)包包內(nèi)FEC編碼前的數(shù)據(jù);CRC校驗(yàn)?zāi)K,用于將接收端的每個(gè)數(shù)據(jù)包的信息除以CRC生成多項(xiàng)式(二進(jìn)制除 法),判斷數(shù)據(jù)包的信息位在包層FEC解碼是否還有錯(cuò)誤;數(shù)據(jù)包檢測(cè)模塊,用于確定在傳輸過程中哪些數(shù)據(jù)包丟失,并將丟失數(shù)據(jù)包的包 號(hào)和丟失數(shù)據(jù)包的總數(shù)保存下來;包層糾刪碼解碼模塊,用于恢復(fù)出每個(gè)子包組的丟失的信息數(shù)據(jù)包;數(shù)據(jù)提取模塊,用于將每個(gè)數(shù)據(jù)包組中的信息包提取出來,去除冗余包,并去除每 個(gè)包頭的CRC校驗(yàn)信息、包號(hào)信息和數(shù)據(jù)包組大小信息。基于上述技術(shù)方案,所述的包層糾刪碼解碼模塊進(jìn)一步包括恢復(fù)判決模塊,用于判斷是否超出了所選碼型的丟包恢復(fù)能力;丟包恢復(fù)模塊,用于利用冗余數(shù)據(jù)包恢復(fù)出每個(gè)子包組中丟失的數(shù)據(jù)包本發(fā)明提供基于數(shù)據(jù)包的單向可靠傳輸方法及收發(fā)裝置,具有以下的優(yōu)點(diǎn)(1)兼顧了包內(nèi)信息糾錯(cuò)和丟包恢復(fù),還對(duì)每個(gè)數(shù)據(jù)包進(jìn)行了自校驗(yàn),為單向信道 下數(shù)據(jù)的可靠傳輸提供了保障;(2)通過信息數(shù)據(jù)包的包組聯(lián)合,使得相鄰的數(shù)據(jù)包在空間上進(jìn)行了分離,在網(wǎng)絡(luò) 傳輸情況變壞的情況下,對(duì)連續(xù)丟包具有很好的抵抗作用;(3)接收端在信息數(shù)據(jù)包沒出錯(cuò)時(shí)直接丟棄冗余包,使得解碼的速度遠(yuǎn)遠(yuǎn)快于發(fā) 送端編碼的速度,這樣避免了因發(fā)送端發(fā)送過快導(dǎo)致接收端緩存溢出而造成數(shù)據(jù)包丟失的 情況;(4)根據(jù)不同的網(wǎng)絡(luò)環(huán)境,不同的性能需求,可以靈活的調(diào)整糾刪碼編碼的效率和 丟包恢復(fù)性能。
圖1為本發(fā)明的系統(tǒng)框架Ia為本發(fā)明接收端的糾刪碼解碼模塊組成2為本發(fā)明的處理流程圖
具體實(shí)施例方式下面通過附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)闡述。圖1示例了本發(fā)明的系統(tǒng)框架,該系統(tǒng)包括發(fā)送端和接收端兩部分,發(fā)送端進(jìn)一 步包括數(shù)據(jù)包產(chǎn)生模塊、包層糾刪碼編碼模塊、CRC編碼模塊、數(shù)據(jù)封裝模塊、包內(nèi)FEC編碼 模塊、傳輸模塊。其中數(shù)據(jù)包產(chǎn)生模塊用于將待發(fā)送的信息數(shù)據(jù)包按順序劃分成信息數(shù)據(jù)包序列,將編號(hào)的數(shù)據(jù)包進(jìn)行分組。包層糾刪碼編碼模塊用于將每個(gè)子編碼包組按照糾刪 碼編碼方式,生成冗余包。CRC校驗(yàn)?zāi)K。用于將每個(gè)數(shù)據(jù)包內(nèi)的數(shù)據(jù)進(jìn)行CRC編碼,生成 的校驗(yàn)信息。數(shù)據(jù)封裝模塊用于將CRC校驗(yàn)信息、二級(jí)編號(hào)的信息和數(shù)據(jù)包組大小信息封 裝在數(shù)據(jù)包的包頭。包內(nèi)FEC編碼模塊選用漢明碼,卷積碼等糾錯(cuò)碼型,用來對(duì)抗傳輸過程 中數(shù)據(jù)包內(nèi)比特錯(cuò)誤。傳輸模塊用于將數(shù)據(jù)包發(fā)送到接收端,可以采用UDP協(xié)議或自定義 的無反饋傳輸協(xié)議。接收端進(jìn)一步包括數(shù)據(jù)緩存模塊、包內(nèi)FEC解碼模塊、CRC校驗(yàn)?zāi)K、數(shù)據(jù)包檢測(cè) 模塊、包層糾刪碼解碼模塊和數(shù)據(jù)提取模塊。其中,數(shù)據(jù)緩存模塊用于接收數(shù)據(jù)包分組,在 一段時(shí)間內(nèi)緩存收到的數(shù)據(jù)包。包內(nèi)FEC解碼模塊用于恢復(fù)出每個(gè)數(shù)據(jù)包包內(nèi)FEC編碼前 的數(shù)據(jù),糾正數(shù)據(jù)包傳輸過程中的數(shù)據(jù)包內(nèi)比特錯(cuò)誤。CRC校驗(yàn)?zāi)K用于用于將接收端的每 個(gè)數(shù)據(jù)包的信息除以CRC生成多項(xiàng)式(二進(jìn)制除法),判斷數(shù)據(jù)包的信息位在包層FEC解碼 是否還有錯(cuò)誤。數(shù)據(jù)包檢測(cè)模塊用于確定在傳輸過程中哪些數(shù)據(jù)包丟失,并將丟失數(shù)據(jù)包 的包號(hào)和丟失數(shù)據(jù)包總數(shù)保存下來。包層糾刪碼解碼模塊用于恢復(fù)出每個(gè)子包組丟失的信 息數(shù)據(jù)包。數(shù)據(jù)提取模塊用于將每個(gè)數(shù)據(jù)包組中的信息包提取出來,去除冗余包,并去除每 個(gè)包頭的CRC校驗(yàn)信息、包號(hào)信息和數(shù)據(jù)包組大小信息。圖Ia包層糾刪碼解碼模塊又包括恢復(fù)判決模塊和丟包恢復(fù)模塊?;謴?fù)判決模塊, 用于判斷是否超出了所選碼型的丟包恢復(fù)能力。丟包恢復(fù)模塊,用于利用冗余數(shù)據(jù)包恢復(fù) 出每個(gè)子包組中丟失的數(shù)據(jù)包,本發(fā)明一最佳實(shí)例是選用奇偶校驗(yàn)碼來解碼。以下結(jié)合圖2,對(duì)本發(fā)明提出的單向信道下數(shù)據(jù)可靠傳輸?shù)姆椒ㄟM(jìn)行詳細(xì)地描述, 該方法包括以下步驟步驟1 當(dāng)發(fā)送端有數(shù)據(jù)需發(fā)送時(shí),首先將數(shù)據(jù)塊劃分成連續(xù)的多個(gè)信息數(shù)據(jù)包。這里的原始數(shù)據(jù)包的大小由上層應(yīng)用決定,如文件大小或視頻圖像的一幀構(gòu)成原 始的數(shù)據(jù)塊,對(duì)于上層應(yīng)用連續(xù)輸出數(shù)據(jù)流的情況,也可自行設(shè)定。步驟2 發(fā)送端對(duì)原始數(shù)據(jù)包序列分成幾個(gè)子編碼包組,然后按包層糾刪碼的規(guī) 則進(jìn)行編碼,生成每個(gè)子編碼包組的冗余包。先將數(shù)據(jù)包組分成幾個(gè)子編碼包組,規(guī)則如果要對(duì)抗M個(gè)連續(xù)的丟包,將數(shù)據(jù)包 分成M組,編號(hào)相差為M的數(shù)據(jù)生成一個(gè)子編碼包組。每個(gè)子編碼包組按照糾刪碼的規(guī)則 進(jìn)行編碼,選用的糾刪碼為奇偶校驗(yàn)碼,生成一個(gè)冗余包。可以根據(jù)網(wǎng)絡(luò)環(huán)境的好壞來調(diào)整 M的大小,進(jìn)而改變對(duì)抗連續(xù)丟包的性能。冗余包的生成方式有多種,本發(fā)明的一最佳實(shí)例 采用奇偶校驗(yàn)碼的包層編碼來獲得冗余包,即每個(gè)子包組內(nèi)的冗余包由該子包組內(nèi)的信息 數(shù)據(jù)包按奇偶校驗(yàn)碼包層編碼規(guī)則來得到。例如一個(gè)原始數(shù)據(jù)塊總共可分為8個(gè)連續(xù)的數(shù)據(jù)包,分別是~、4、^、~、81、82、B3、B4 ;根據(jù)信道的干擾情況,如果希望對(duì)抗連續(xù)丟包的能力為4,即形成4個(gè)編碼包組,每相 差為 4 的數(shù)據(jù)包形成一個(gè)子編碼包組,P1 = (A1, B1),P2 = (A2, B2),P3 = (A3, B3),P4 = (A4, B4)。每一個(gè)子編碼包組按照奇偶校驗(yàn)碼包組編碼規(guī)則進(jìn)行編碼,分別得到冗余數(shù)據(jù)包Cp C2、C3、C4,其中C, = Ai十明<i<4),即數(shù)據(jù)包的對(duì)應(yīng)位取模2加生成冗余包的對(duì)應(yīng)位。編碼 后形成了 四個(gè)子包組,分別是(A1, B1, C1),(A2, B2, C2),(A3, B3, C3),(A4, B4, C4)。根據(jù)網(wǎng)絡(luò) 情況不同可以做到丟包恢復(fù)性能、編碼效率的靈活調(diào)整,如果希望對(duì)抗連續(xù)的10個(gè)數(shù)據(jù)包 丟失,要將原始的數(shù)據(jù)包組分成10個(gè)子編碼包組,即形成了 10個(gè)編碼包組的聯(lián)合;若希望調(diào)整碼率,可以調(diào)整每個(gè)子編碼包組中的信息數(shù)據(jù)包的數(shù)目。步驟3 對(duì)各組數(shù)據(jù)包及冗余包進(jìn)行CRC編碼,得到校驗(yàn)位信息。
此步驟采用的是CRC-16的編碼方案,每個(gè)數(shù)據(jù)包得到兩個(gè)字節(jié)的校驗(yàn)位信息。步驟4 將所得到的CRC校驗(yàn)信息和每個(gè)數(shù)據(jù)包的包號(hào)信息及數(shù)據(jù)包組的大小信 息封裝在數(shù)據(jù)包的包頭。數(shù)據(jù)包的包號(hào)信息包括編碼包組的包號(hào)和子編碼包組的包號(hào)。因?yàn)閱蜗蛐诺老拢?接收端不能判斷什么時(shí)候接收要結(jié)束,只能將數(shù)據(jù)包大小信息封裝在數(shù)據(jù)包的頭部,這樣 方便接收端獲悉何時(shí)停止接收數(shù)據(jù)。步驟5 ;數(shù)據(jù)包內(nèi)信息進(jìn)行包內(nèi)FEC編碼,建立起包內(nèi)信息的比特層的相關(guān)性,使 數(shù)據(jù)包具有比特層的差錯(cuò)恢復(fù)能力。此步驟中包內(nèi)FEC編碼可以采用線性分組碼、卷積碼、Turbo碼、LDPC碼等碼型,在 本發(fā)明中采用(2,1,7)卷積碼或(4,7)漢明碼。步驟6 發(fā)送端通過傳輸信道將信息數(shù)據(jù)包和冗余數(shù)據(jù)包發(fā)送給接收端。不限制發(fā)送數(shù)據(jù)的方式,一種最佳的方式是將將信息數(shù)據(jù)包先發(fā)送,再將冗余包 發(fā)送,這樣方便信息數(shù)據(jù)包的提取。一般采用UDP協(xié)議;在一些特定場(chǎng)合如隔離網(wǎng)閘傳輸系 統(tǒng)中,使用自定義的無反饋傳輸協(xié)議。步驟7 數(shù)據(jù)包內(nèi)信息的FEC解碼,選用的碼型與發(fā)送端FEC編碼碼型對(duì)應(yīng),還原 出FEC編碼前的數(shù)據(jù),糾正在傳輸過程中可能出現(xiàn)的數(shù)據(jù)包內(nèi)比特錯(cuò)誤。步驟8 接收端對(duì)進(jìn)行CRC校驗(yàn),每個(gè)數(shù)據(jù)包的信息除以CRC生成多項(xiàng)式(二進(jìn)制 除法),如果能除盡說明在完成包內(nèi)FEC解碼后數(shù)據(jù)包內(nèi)數(shù)據(jù)沒有錯(cuò)誤,否則說明數(shù)據(jù)包內(nèi) 信息仍然有錯(cuò),將其看成是丟包。步驟9 數(shù)據(jù)包檢測(cè)是指通過讀取包號(hào)信息判斷傳輸過程中是否有數(shù)據(jù)包的丟 失,如果有丟失,將丟失的數(shù)據(jù)包的包號(hào)信息記錄下來。步驟10 將步驟8中數(shù)據(jù)包內(nèi)信息不能被CRC生成多項(xiàng)式整除的數(shù)據(jù)包看作是丟 包,將差錯(cuò)數(shù)據(jù)包的包號(hào)信息傳遞給步驟11。步驟11 接收端判斷是否有信息數(shù)據(jù)包丟失,如果有信息數(shù)據(jù)包丟失,則執(zhí)行步 驟12,否則,執(zhí)行步驟13。在本發(fā)明中,由于每個(gè)數(shù)據(jù)包包頭都有包的二級(jí)編號(hào),接收端對(duì)數(shù)據(jù)包進(jìn)行預(yù)處 理后,可以通過包號(hào)信息來判斷數(shù)據(jù)包是否丟失,數(shù)據(jù)包丟失的另一種情況是,根據(jù)CRC校 驗(yàn)信息判斷的。步驟12 接收端判斷能否恢復(fù)丟失的數(shù)據(jù)包,如果可以恢復(fù)則執(zhí)行步驟13,如果 不能回復(fù)則執(zhí)行步驟13。此步驟中,不可恢復(fù)的情況是指一個(gè)數(shù)據(jù)包組中同時(shí)丟失了兩個(gè)或兩個(gè)以上的 數(shù)據(jù)包的情況。如對(duì)應(yīng)步驟2中的例子,數(shù)據(jù)包 為或 乂同時(shí)丟失,這種情況A1J1都不能被 恢復(fù)出來。步驟13 顯示丟包后不能進(jìn)行恢復(fù)的數(shù)據(jù)包的包號(hào)。步驟14 利用包層糾刪碼解碼,根據(jù)包層糾刪碼的特性恢復(fù)出傳輸過程中可能丟 失的數(shù)據(jù)包。
本發(fā)明的一最佳實(shí)例選用的糾刪碼是奇偶校驗(yàn)碼,恢復(fù)的方法是將每一個(gè)子包 組中未丟失的信息數(shù)據(jù)包與該包組中的冗余數(shù)據(jù)包按照包層奇偶校驗(yàn)碼的解碼規(guī)則,恢復(fù) 出丟失的數(shù)據(jù)包,奇偶校驗(yàn)碼解碼就是完成每個(gè)數(shù)據(jù)包相同位取模2加運(yùn)算。對(duì)應(yīng)步驟2中的例子,如果數(shù)據(jù)包A1在傳輸過程中丟失,可以通過為=C1 錢(即 C1, B1數(shù)據(jù)包對(duì)應(yīng)位進(jìn)行模2加)。如果連續(xù)丟失四個(gè)數(shù)據(jù)包,如^、~、B。B2,則可以分別 用4 = C3 Φ馬等將丟失的數(shù)據(jù)包恢復(fù)。如果是冗余包中丟失一個(gè)或若干個(gè),如c2、C3丟失, 直接將之丟棄,提取出信息包就完成了解碼。
步驟15 提取包組內(nèi)的信息數(shù)據(jù)包,刪除冗余包。將信息數(shù)據(jù)包傳遞給上層,并去 除每個(gè)包頭的CRC校驗(yàn)信息、包號(hào)信息和數(shù)據(jù)包組大小信息,結(jié)束當(dāng)前處理流程。本發(fā)明不限于上述的實(shí)施例,凡依本發(fā)明權(quán)利要求范圍內(nèi)所作的均等變化或修 飾,皆應(yīng)屬于本發(fā)明權(quán)利要求的保護(hù)范圍。
權(quán)利要求
一種基于數(shù)據(jù)包的單向可靠傳輸方法,其特征在于,包括以下步驟(1)、發(fā)送端將信息數(shù)據(jù)塊分成相等大小的信息數(shù)據(jù)包序列,作為一個(gè)編碼包組;(2)、將一個(gè)編碼包組劃分成幾個(gè)子編碼包組的聯(lián)合,再按照糾刪碼的編碼規(guī)則生成每個(gè)子編碼包組的冗余包,每個(gè)子編碼包組加上生成的冗余包構(gòu)成一個(gè)子包組;(3)、對(duì)每個(gè)數(shù)據(jù)包進(jìn)行CRC碼(循環(huán)冗余碼)編碼,得到校驗(yàn)信息;(4)、對(duì)各組數(shù)據(jù)包和該組的冗余包進(jìn)行編號(hào),使每個(gè)數(shù)據(jù)包有唯一的ID號(hào),包括兩級(jí)編號(hào)包組號(hào)和子包組號(hào);(5)、對(duì)所有數(shù)據(jù)包包內(nèi)進(jìn)行FEC(前向糾錯(cuò))編碼;(6)、將所述的編碼后的數(shù)據(jù)包組發(fā)送到接收端,發(fā)送時(shí)傳輸協(xié)議選擇UDP協(xié)議(用戶數(shù)據(jù)報(bào)協(xié)議);(7)、接收端緩存下接收到的數(shù)據(jù),再對(duì)接收到的所有數(shù)據(jù)包進(jìn)行包內(nèi)FEC解碼,選用的碼型與發(fā)送端的對(duì)應(yīng);(8)、將數(shù)據(jù)包進(jìn)行排序,對(duì)每個(gè)數(shù)據(jù)包進(jìn)行CRC校驗(yàn);(9)、通過每個(gè)數(shù)據(jù)包的ID號(hào)信息判斷是否丟包,如果子包組內(nèi)沒有數(shù)據(jù)包丟失或丟失的數(shù)據(jù)包為冗余包,進(jìn)入步驟(10);如果發(fā)現(xiàn)非冗余包丟失,則在子包組內(nèi)利用編碼時(shí)建立的數(shù)據(jù)包相關(guān)性恢復(fù)出丟失的信息數(shù)據(jù)包;(10)、提取每個(gè)子包組的信息數(shù)據(jù)包,去除冗余包,還原出一個(gè)編碼包組,將信息數(shù)據(jù)包傳遞給上層應(yīng)用。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟(2)中的子編碼包組的聯(lián)合是指設(shè) 定要對(duì)M個(gè)子編碼包組進(jìn)行包組聯(lián)合,則將信息數(shù)據(jù)包的序列編號(hào)每相差為M的數(shù)據(jù)包組 成包含N-1個(gè)數(shù)據(jù)包的子編碼包組;所述包層糾刪碼選用的為(N-1,N)的奇偶校驗(yàn)碼,數(shù)據(jù) 包相同位進(jìn)行模2加生成冗余包。
3.根據(jù)權(quán)利1所述的方法,其特征在于,步驟(5)中,選用線性分組碼、卷積碼、turbo 碼、LDPC碼等碼型對(duì)數(shù)據(jù)包內(nèi)數(shù)據(jù)進(jìn)行編碼,用來對(duì)抗傳輸過程中數(shù)據(jù)包內(nèi)比特層錯(cuò)誤。
4.根據(jù)權(quán)利1所述的方法,其特征在于,步驟(6)中,一般采用UDP協(xié)議;在一些特定 場(chǎng)合如隔離網(wǎng)閘傳輸系統(tǒng)中,使用自定義的無反饋傳輸協(xié)議。
5.根據(jù)權(quán)利1所述的方法,其特征在于,步驟(8)中,將接收端的每個(gè)數(shù)據(jù)包的信息除 以CRC生成多項(xiàng)式(二進(jìn)制除法),如果能除盡說明在完成包內(nèi)FEC解碼后數(shù)據(jù)包內(nèi)數(shù)據(jù)沒 有錯(cuò)誤,否則說明數(shù)據(jù)包內(nèi)信息仍然有錯(cuò),將其看成是丟包。
6.根據(jù)權(quán)利1所述的方法,其特征在于,步驟(9)中,有信息數(shù)據(jù)包丟失的子包組完成 包層糾刪碼解碼,這里選用糾刪碼是奇偶校驗(yàn)碼;當(dāng)超過所述的子包組的丟包恢復(fù)能力時(shí), 接收端向上層報(bào)告不能恢復(fù)的數(shù)據(jù)包的包號(hào)。
7.一種基于數(shù)據(jù)包的單向可靠傳輸?shù)陌l(fā)送裝置,其特征在于,包括數(shù)據(jù)包產(chǎn)生模塊,用于將待發(fā)送的信息數(shù)據(jù)包按順序劃分成信息數(shù)據(jù)包序列,作為一 個(gè)編碼包組,將編碼包組進(jìn)行分組,形成多個(gè)子編碼包組的聯(lián)合;包層糾刪碼編碼模塊,用于將每個(gè)子編碼包組按照糾刪碼編碼方式,生成冗余包;CRC編碼模塊,用于將每個(gè)數(shù)據(jù)包內(nèi)的數(shù)據(jù)進(jìn)行CRC編碼,生成的校驗(yàn)信息;數(shù)據(jù)封裝模塊,用于將CRC校驗(yàn)信息、二級(jí)編號(hào)的信息和數(shù)據(jù)包組大小信息等封裝在 數(shù)據(jù)包的包頭;包內(nèi)FEC編碼模塊用于建立包內(nèi)比特之間的相關(guān)性,對(duì)抗傳輸過程中數(shù)據(jù)包內(nèi)部出 現(xiàn)的比特級(jí)錯(cuò)誤,選用線性分組碼、卷積碼、turbo碼、LDPC等碼型;傳輸模塊,用于將數(shù)據(jù)包發(fā)送到接收端,可以采用UDP協(xié)議或自定義的無反饋傳輸協(xié)議。
8.根據(jù)權(quán)利要求7所述的發(fā)送裝置,其特征在于數(shù)據(jù)包產(chǎn)生模塊中每個(gè)子編碼包組是 將每相差為M的信息包構(gòu)成,其中M表示設(shè)定的能恢復(fù)的連續(xù)丟包的個(gè)數(shù);所述包層糾刪碼 編碼模塊是指能對(duì)每個(gè)子包組的信息數(shù)據(jù)包按照(N_1,N)的奇偶檢驗(yàn)碼編碼。
9.一種基于數(shù)據(jù)包的單向可靠傳輸?shù)慕邮昭b置,其特征在于,包括 數(shù)據(jù)緩存模塊接收數(shù)據(jù)包分組,在一段時(shí)間內(nèi)緩存接收到的數(shù)據(jù)包;包內(nèi)FEC解碼模塊,用于糾正數(shù)據(jù)包傳輸過程中的數(shù)據(jù)包內(nèi)出現(xiàn)的比特錯(cuò)誤,恢復(fù)出 每個(gè)數(shù)據(jù)包包內(nèi)FEC編碼前的數(shù)據(jù);CRC校驗(yàn)?zāi)K,用于將接收端的每個(gè)數(shù)據(jù)包的信息除以CRC生成多項(xiàng)式(二進(jìn)制除 法),判斷數(shù)據(jù)包的信息位在包層FEC解碼是否還有錯(cuò)誤;數(shù)據(jù)包檢測(cè)模塊,用于確定在傳輸過程中哪些數(shù)據(jù)包丟失,并將丟失數(shù)據(jù)包的包號(hào)和 丟失數(shù)據(jù)包的總數(shù)保存下來;包層糾刪碼解碼模塊,用于恢復(fù)出每個(gè)子包組的丟失的信息數(shù)據(jù)包; 數(shù)據(jù)提取模塊,用于將每個(gè)數(shù)據(jù)包組中的信息包提取出來,去除冗余包,并去除每個(gè)包 頭的CRC校驗(yàn)信息、包號(hào)信息和數(shù)據(jù)包組大小信息。
10.根據(jù)權(quán)利要求9所述的接收裝置,其特征在于,所述的包層糾刪碼解碼模塊進(jìn)一步 包括恢復(fù)判決模塊,用于判斷是否超出了所選碼型的丟包恢復(fù)能力; 丟包恢復(fù)模塊,用于利用冗余數(shù)據(jù)包恢復(fù)出每個(gè)子包組中丟失的數(shù)據(jù)包,這里采用的 是利用糾刪碼解碼碼型為奇偶校驗(yàn)碼。
全文摘要
一種基于數(shù)據(jù)包的單向可靠傳輸?shù)姆椒笆瞻l(fā)裝置屬計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域。實(shí)現(xiàn)方法是發(fā)送端首先將信息數(shù)據(jù)塊劃分成數(shù)據(jù)包序列,再對(duì)數(shù)據(jù)包分組,包層糾刪碼編碼生成每個(gè)子編碼包組的冗余包,然后對(duì)每個(gè)數(shù)據(jù)包進(jìn)行循環(huán)冗余碼(CRC)編碼,完成數(shù)據(jù)包封裝,對(duì)所有數(shù)據(jù)包進(jìn)行包內(nèi)前向糾錯(cuò)(FEC)編碼,最后將數(shù)據(jù)發(fā)送到接收端;接收端首先進(jìn)行數(shù)據(jù)包緩存,對(duì)所有數(shù)據(jù)進(jìn)行包內(nèi)FEC解碼,再將數(shù)據(jù)包排序,進(jìn)行CRC碼來校驗(yàn),通過檢測(cè)包號(hào)判斷是否有丟包,如果有信息數(shù)據(jù)包丟失,進(jìn)行丟包恢復(fù)。本發(fā)明解決了單向信道下基于數(shù)據(jù)包傳輸時(shí)不能進(jìn)行自校驗(yàn)、自糾錯(cuò)的技術(shù)問題,能糾正包內(nèi)信息錯(cuò)誤和恢復(fù)連續(xù)的丟包。
文檔編號(hào)H04L1/00GK101834700SQ20101016892
公開日2010年9月15日 申請(qǐng)日期2010年5月12日 優(yōu)先權(quán)日2010年5月12日
發(fā)明者于翠屏, 劉元安, 唐碧華, 曹震, 王坤明, 袁東明, 謝剛, 黎淑蘭 申請(qǐng)人:北京郵電大學(xué)