本申請是原案的分案申請,原案的申請?zhí)?01310533289.9,申請日2013年11月4日,發(fā)明創(chuàng)造名稱“數(shù)據(jù)包的封裝方法及校驗方法”。
本發(fā)明涉及數(shù)字電視廣播領域,特別涉及數(shù)據(jù)包的封裝方法及校驗方法。
背景技術:
新一代數(shù)字電視廣播系統(tǒng)能夠支持包括音頻、視頻在內(nèi)的各類數(shù)據(jù)傳輸,其具體方法是將待傳輸?shù)臄?shù)據(jù)包依次填入基帶幀數(shù)據(jù)域中,組成可以通過數(shù)字電視廣播系統(tǒng)在廣播信道進行傳輸?shù)幕鶐Y構。
在對數(shù)據(jù)包進行封裝過程中,當一個數(shù)據(jù)包的長度較大且超過當前數(shù)據(jù)域的可用空間時,可以將數(shù)據(jù)包分割成若干個片段,每一個片段使用一個基帶幀進行傳輸。接收端在接收到屬于該數(shù)據(jù)包的所有片段后,再重新將這些片段進行拼接以獲得原始的數(shù)據(jù)包。
但是,由于信道干擾等原因,基帶幀在從發(fā)送端到接收端的傳輸過程中,可能會造成畸變并產(chǎn)生誤碼,這樣接收端在接收到基帶幀并對其解碼后得到的數(shù)據(jù)包將不是原始的數(shù)據(jù)包。而在信道干擾嚴重的情況下,接收端可能會丟失整個基帶幀甚至連續(xù)丟失多個基帶幀。
對于一個基帶幀內(nèi)出現(xiàn)誤碼,通過在數(shù)據(jù)包后附加校驗字段可以很大程度上解決這一問題。但是,在一個數(shù)據(jù)包被分塊次數(shù)成幾個數(shù)據(jù)塊并且這些數(shù)據(jù)塊承載于不同的基帶幀的情況下,若接收端丟失了其中一個基帶幀而造成數(shù)據(jù)塊漏收,僅通過在數(shù)據(jù)包后附加校驗字段的方式將不能很好地解決這一問題。
技術實現(xiàn)要素:
本發(fā)明解決的是當該數(shù)據(jù)包被分塊次數(shù)成幾個數(shù)據(jù)塊并且這些數(shù)據(jù)塊承載于不同的基帶幀進行傳輸過程中,接收端可能會漏收數(shù)據(jù)塊的問題。
為解決上述問題,本發(fā)明實施例提供了一種數(shù)據(jù)包的封裝方法,包括:在將當前待傳輸?shù)臄?shù)據(jù)包依次填充至一個或多個基帶幀數(shù)據(jù)域的過程中,記錄該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息;基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段;將該校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
可選的,所述將當前待傳輸?shù)臄?shù)據(jù)依次填充至一個或多個基帶幀數(shù)據(jù)域,記錄該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息包括:
步驟1):判斷當前的基帶幀數(shù)據(jù)域的可用空間是否足以承載當前待傳輸?shù)臄?shù)據(jù)包,該數(shù)據(jù)包包括信息碼和預留校驗字段長度;
步驟2):若該判斷結果為否,則將該數(shù)據(jù)包進行分割以形成前半部分數(shù)據(jù)塊和后半部分數(shù)據(jù)塊,其中所述前半部分數(shù)據(jù)塊適于填滿該可用空間,所述后半部分數(shù)據(jù)塊將填充至下一個基帶幀數(shù)據(jù)域;
循環(huán)執(zhí)行上述步驟1)和步驟2),直至當前的基帶幀數(shù)據(jù)域的可用空間足以承載當前待傳輸?shù)臄?shù)據(jù)包;
基于上述步驟1)和步驟2)的循環(huán)執(zhí)行次數(shù)確定當前待傳輸?shù)臄?shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。
可選的,所述基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段的步驟包括:將該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息附加至該數(shù)據(jù)包的信息碼的末尾以形成待校驗數(shù)據(jù)包;采用第一預設校驗字段生成方式對所述待校驗數(shù)據(jù)包進行處理以生成第一校驗字段,其中該第一預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
可選的,所述基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段的步驟包括:采用第一預設校驗字段生成方式對該數(shù)據(jù)包進行處理以生成中間數(shù)據(jù);將該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息附加至該中間數(shù)據(jù)的末尾,再采用第一預設校驗字段生成方式對前述數(shù)據(jù)進行處理以生成第二校驗字段;其中,該第一預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
可選的,所述基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段的步驟包括:采用第一預設校驗字段生成方式對該數(shù)據(jù)包進行處理以生成中間數(shù)據(jù);采用第二預設校驗字段生成方式對該中間數(shù)據(jù)和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行處理以生成第三校驗字段;其中,該第一預設校驗字段生成方式和第二預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
可選的,所述第一預設校驗字段生成方式為循環(huán)冗余校驗。
可選的,所述第二預設校驗字段生成方式包括異或運算、加法運算、減法運算和乘法運算中的任一種運算方式。
本發(fā)明實施例還提供了一種數(shù)據(jù)包的校驗方法,其中該數(shù)據(jù)包是根據(jù)上述數(shù)據(jù)包的封裝方法封裝后填充至基帶幀在信道中傳輸后于接收端恢復得到,所述校驗方法包括:
從一個或多個基帶幀數(shù)據(jù)域中獲取完整的數(shù)據(jù)包,該完整的數(shù)據(jù)包包括信息碼和校驗字段;
根據(jù)基帶幀幀頭中的校驗算法標志位中標志的預設校驗字段生成方式與校驗字段長度,從該數(shù)據(jù)包的末尾截取校驗字段,數(shù)據(jù)包的剩余內(nèi)容作為信息碼;
對接收到的數(shù)據(jù)包的信息碼以及數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行校驗計算以得到待比較校驗字段;
比較該待比較校驗字段與獲取到的校驗字段是否一致;
若兩者一致,則確定該數(shù)據(jù)包接收正確。
可選的,所述從一個或多個基帶幀數(shù)據(jù)域中獲取完整的數(shù)據(jù)包包括如下步驟:
從當前的基帶幀數(shù)據(jù)域的起始位置開始依次讀取數(shù)據(jù)包,其中所述起始位置由基帶幀幀頭中的起始位置字段來確定;
通過位于數(shù)據(jù)包頭部的包長字段是否為零來判斷該數(shù)據(jù)包是否完整地承載于當前的基帶幀數(shù)據(jù)域;
若該數(shù)據(jù)包未完整地承載于當前的基帶幀數(shù)據(jù),則將當前基帶幀起始位置開始至數(shù)據(jù)域末尾的所有數(shù)據(jù)作為該數(shù)據(jù)包的第一塊,并繼續(xù)從后續(xù)的若干個基帶幀數(shù)據(jù)域中讀取該數(shù)據(jù)包的剩余分塊并依順序與該數(shù)據(jù)包的第一塊進行拼接以得到該數(shù)據(jù)包的信息碼及校驗字段,其中該數(shù)據(jù)包的剩余分塊是根據(jù)基帶幀幀頭中的起始位置字段和數(shù)據(jù)域長度字段之間的關系來確定的;
若該數(shù)據(jù)包完整地承載于當前的基帶幀數(shù)據(jù),則從當前的基帶幀數(shù)據(jù)域的起始位置開始并根據(jù)該數(shù)據(jù)包頭部的包長獲取該數(shù)據(jù)包的信息碼及校驗字段;
記錄組裝該數(shù)據(jù)包的信息碼及校驗字段的基帶幀的個數(shù)以確定該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息;
可選的,所述該數(shù)據(jù)包的剩余分塊根據(jù)基帶幀幀頭中的起始位置字段和數(shù)據(jù)域長度字段之間的關系來確定包括如下情形:
1)若某個基帶幀幀頭中的起始位置字段大于數(shù)據(jù)域長度字段,則確定該基帶幀數(shù)據(jù)域全部用于承載數(shù)據(jù)包的剩余分塊中的一個數(shù)據(jù)塊,且該數(shù)據(jù)包的傳輸未完成;
2)若某個基帶幀幀頭中的起始位置字段等于數(shù)據(jù)域長度字段,則確定該基帶幀數(shù)據(jù)域全部用于承載該數(shù)據(jù)包,且該數(shù)據(jù)包的傳輸已經(jīng)完成;
3)若某個基帶幀幀頭中的起始位置字段小于數(shù)據(jù)域長度字段,則該基帶基數(shù)據(jù)域頭部至起始位置之間的數(shù)據(jù)為該數(shù)據(jù)包的剩余分塊中的最后一個數(shù)據(jù)塊。
本發(fā)明實施例還提供了一種數(shù)據(jù)包的傳輸方法,包括:將當前待傳輸?shù)臄?shù)據(jù)包依次填充至一個或多個基帶幀數(shù)據(jù)域;生成該數(shù)據(jù)包的校驗字段,其中所述校驗字段根據(jù)該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包在填充至基帶幀數(shù)據(jù)域的過程中被分塊次數(shù)的數(shù)據(jù)信息來確定;將該校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝;將承載于該數(shù)據(jù)包的一個或多個基帶幀經(jīng)由信道傳輸至接收端。
與現(xiàn)有技術相比,本發(fā)明技術方案具有以下有益效果:
根據(jù)本發(fā)明實施例提供的數(shù)據(jù)包的封裝方法,在生成數(shù)據(jù)包的校驗字段時,考慮了數(shù)據(jù)包填充至基帶幀數(shù)據(jù)域過程中被分塊次數(shù)的數(shù)據(jù)信息,這樣在接收端對接收到的數(shù)據(jù)包進行解析過程中,也將結合數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息來對數(shù)據(jù)包是否正確接收進行校驗,從而提高了數(shù)據(jù)包(尤其是數(shù)據(jù)包被分成幾個數(shù)據(jù)塊承載于不同的基帶幀中的情況下)在廣播通信信道傳輸時的可靠性。
根據(jù)本發(fā)明實施例提供的數(shù)據(jù)包的校驗方法,接收端在從接收到的基帶幀數(shù)據(jù)域中讀取數(shù)據(jù)包的過程中,通過位于數(shù)據(jù)包頭部的包長字段來判斷該數(shù)據(jù)包是否完整地承載于當前的基帶幀數(shù)據(jù)域,并針對不同的情形采用不同的方式獲取完整的數(shù)據(jù)包及校驗字段,并且在對接收到的數(shù)據(jù)包進行校驗時,考慮了該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,從而提高了數(shù)據(jù)包在廣播通信信道傳輸時的可靠性。
附圖說明
圖1是本發(fā)明的一種數(shù)據(jù)包的封裝方法的具體實施方式的流程示意圖;
圖2是將數(shù)據(jù)包封裝后形成的基帶幀的基本結構示意圖;
圖3a是數(shù)據(jù)包未經(jīng)分割封裝成的基帶幀結構示意圖;
圖3b是數(shù)據(jù)包經(jīng)分割后各個數(shù)據(jù)塊分別承載于不同基帶幀的情況下封裝成的基帶幀結構示意圖;
圖4是本發(fā)明的一種數(shù)據(jù)包的校驗方法的具體實施方式的流程示意圖。
具體實施方式
發(fā)明人發(fā)現(xiàn)現(xiàn)有技術中,當該數(shù)據(jù)包被分成幾個數(shù)據(jù)塊并且這些數(shù)據(jù)塊承載于不同的基帶幀進行傳輸過程中,若接收端丟失了其中一個基帶幀將造成數(shù)據(jù)塊漏收的問題。
針對上述問題,發(fā)明人經(jīng)過研究,提供了一種數(shù)據(jù)包的封裝方法和校驗方法,通過在對數(shù)據(jù)包進行封裝過程中考慮數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,從而提高了數(shù)據(jù)包(尤其是數(shù)據(jù)包被分成幾個數(shù)據(jù)塊承載于不同的基帶幀中)在廣播通信信道傳輸時的可靠性。
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結合附圖對本發(fā)明的具體實施方式做詳細的說明。
如圖1所示的是本發(fā)明的一種數(shù)據(jù)包的封裝方法的具體實施方式的流程示意圖。參考圖1,所述數(shù)據(jù)包的封裝方法包括如下步驟:
步驟s11:在將當前待傳輸?shù)臄?shù)據(jù)包依次填充至一個或多個基帶幀數(shù)據(jù)域的過程中,記錄該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息;
步驟s12:基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段;
步驟s13:將該校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
與現(xiàn)有技術不同,在生成數(shù)據(jù)包的校驗字段時,不僅針對數(shù)據(jù)包的信息碼本身,進一步考慮了數(shù)據(jù)包在填充至一個或多個基帶幀數(shù)據(jù)域過程中被分塊次數(shù)的數(shù)據(jù)信息。例如,一個數(shù)據(jù)包在填充至基帶幀數(shù)據(jù)域過程中被分塊次數(shù)成了三個數(shù)據(jù)塊,那么被分塊次數(shù)的數(shù)據(jù)信息為兩次。
在具體實施例中,如步驟s11所述,在將當前待傳輸?shù)臄?shù)據(jù)包依次填充至一個或多個基帶幀數(shù)據(jù)域的過程中,記錄該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,具體包括如下步驟:
步驟1):判斷當前的基帶幀數(shù)據(jù)域的可用空間是否足以承載當前待傳輸?shù)臄?shù)據(jù)包,該數(shù)據(jù)包包括信息碼和預留校驗字段長度;
步驟2):若該判斷結果為否,則將該數(shù)據(jù)包進行分割以形成前半部分數(shù)據(jù)塊和后半部分數(shù)據(jù)塊,其中所述前半部分數(shù)據(jù)塊適于填滿該可用空間,所述后半部分數(shù)據(jù)塊將填充至下一個基帶幀數(shù)據(jù)域。
在上述步驟1)中,通過比較當前的基帶幀數(shù)據(jù)域的可用空間所占的數(shù)據(jù)域長度與當前待傳輸?shù)臄?shù)據(jù)包的長度之間的大小關系可以確定該可用空間是否足以承載該數(shù)據(jù)包。需要說明的是,在本步驟中,需要在數(shù)據(jù)包的信息碼之后預留校驗字段的位置,例如預留2個字節(jié)長度,用零填充該預留位置,因此該數(shù)據(jù)包的長度包括信息碼和預留校驗字段長度。
如步驟2)所述,若該數(shù)據(jù)包的包長大于當前的基帶幀數(shù)據(jù)域的可用空間所占的數(shù)據(jù)域長度,則確定當前的基帶幀數(shù)據(jù)域不足以承載整個數(shù)據(jù)包,需要對數(shù)據(jù)包進行分割。分割后的數(shù)據(jù)包分為前半部分數(shù)據(jù)塊和后半部分數(shù)據(jù)塊,其中前半部分數(shù)據(jù)塊能夠填滿該可用空間,剩余的后半部分數(shù)據(jù)塊將填充至下一個基帶幀數(shù)據(jù)域中。
對于該后半部分數(shù)據(jù)塊,將繼續(xù)依照上述步驟1)進行判斷,即繼續(xù)判斷該后半部分數(shù)據(jù)塊是否足以承載于當前的基帶幀數(shù)據(jù)域(相對于之前那一個基帶幀的下一個基帶幀)。而當判斷結果為否時,則依照上述步驟2)所述,繼續(xù)將該后半部分數(shù)據(jù)塊再次分割成兩部分數(shù)據(jù)塊,這兩部分數(shù)據(jù)塊中的前半部分數(shù)據(jù)塊能夠填滿基帶幀數(shù)據(jù)域的可用空間,后半部分數(shù)據(jù)塊將填充至下一個基帶幀數(shù)據(jù)域中。
如此循環(huán)執(zhí)行上述步驟1)和步驟2),直至當前的基帶幀數(shù)據(jù)域的可用空間足以承載最后剩余的數(shù)據(jù)塊。
進一步地,根據(jù)整個過程中的循環(huán)執(zhí)行次數(shù)可以確定當前待傳輸?shù)臄?shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。例如,若上述步驟1)和步驟2)循環(huán)執(zhí)行了兩次,則可以確定當前待傳輸?shù)臄?shù)據(jù)包被切分了兩次,該數(shù)據(jù)包分成了三個數(shù)據(jù)塊分別承載于連續(xù)的三個基帶幀數(shù)據(jù)域中。
若上述步驟1)的判斷結果為是,即當前的基帶幀數(shù)據(jù)域的可用空間足以承載當前待傳輸?shù)臄?shù)據(jù)包,則不需要對該數(shù)據(jù)包進行分割(即被分塊次數(shù)的數(shù)據(jù)信息為0),該數(shù)據(jù)包將完整地承載于當前的基帶幀數(shù)據(jù)域中。
然后,如步驟s12所述,基于該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息以生成該數(shù)據(jù)包的校驗字段。如步驟s13所述,將該校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
現(xiàn)有技術中,生成一個數(shù)據(jù)包的校驗字段時,只將數(shù)據(jù)包的信息碼參與到生成校驗字段的運算中,而在本實施例中,則進一步考慮了數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。具體來說,本實施例包括如下三個具體實例:
1)在一個具體實施方式中,所述步驟s12包括如下步驟:
將該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息附加至該數(shù)據(jù)包的信息碼的末尾以形成待校驗數(shù)據(jù)包;
采用第一預設校驗字段生成方式對所述待校驗數(shù)據(jù)包進行處理以生成校驗字段,其中該第一預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
例如,chk=f(data,seg)=h([data,seg]),其中chk為計算得到的校驗字段;data為數(shù)據(jù)包的信息碼;seg為數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,h(x)為所述第一預設校驗字段生成方式。
相應地,所述步驟s13包括如下步驟:將所述第一校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
2)在本步驟的另一個具體實施方式中,所述步驟s12包括如下步驟:
采用第一預設校驗字段生成方式對該數(shù)據(jù)包進行處理以生成中間數(shù)據(jù);
將該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息附加至該中間數(shù)據(jù)的末尾,再采用第一預設校驗字段生成方式對前述數(shù)據(jù)進行處理以生成第二校驗字段;
其中,該第一預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
例如,chk=f(data,seg)=h([h(data),seg]),其中chk為計算得到的校驗字段;data為數(shù)據(jù)包的信息碼,h(data)為中間數(shù)據(jù);seg為數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,h(x)為所述第一預設校驗字段生成方式。
相應地,所述步驟s13包括如下步驟:將所述第二校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
3)在本步驟的另一個具體實施方式中,所述步驟s12包括如下步驟:
采用第一預設校驗字段生成方式對所述數(shù)據(jù)包的信息碼進行處理以生成中間數(shù)據(jù);
采用第二預設校驗字段生成方式對該中間數(shù)據(jù)和該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行處理以生成第三校驗字段;
其中,該第一預設校驗字段生成方式和第二預設校驗字段生成方式由發(fā)送端和接收端來共同確定。
例如,chk=f(data,seg)=g(h(data),seg),其中chk為計算得到的校驗字段;data為數(shù)據(jù)包的信息碼;seg為數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息,h(x)為所述第一預設校驗字段生成方式。
g(x,y)為第二預設校驗字段生成方式,在實際應用中,g(x,y)可以是常用的可以接收兩個輸入數(shù)據(jù)的函數(shù),例如異或運算的函數(shù)g(x,y)=xxory、加法運算的函數(shù)g(x,y)=x+y、減法運算的函數(shù)g(x,y)=x–y或者是乘法運算的函數(shù)g(x,y)=x*y。
相應地,所述步驟s13包括如下步驟:將所述第三校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝。
在上述三個具體實施方式中,所述第一預設校驗字段生成方式為循環(huán)冗余校驗,即crc校驗。
如圖2所示的是將數(shù)據(jù)包封裝后形成的基帶幀的基本結構示意圖。參考圖2,基帶幀包括基帶幀幀頭、數(shù)據(jù)域以及用于填零和帶內(nèi)信令的區(qū)域。
其中,基帶幀幀頭具體包括matype字段(2bytes)、dfl字段(2bytes)、syncd字段(2bytes)、indicators字段(1byte)以及crc-8字段(1byte)。indicators字段還包括crci字段(2bits)和others字段(6bits)。數(shù)據(jù)域用于填充各個數(shù)據(jù)包,數(shù)據(jù)包可以是ip數(shù)據(jù)包或者是ts數(shù)據(jù)流包等。
如圖3a所示的是數(shù)據(jù)包未經(jīng)分割封裝成的基帶幀結構示意圖。參考圖3a,基帶幀包括基帶幀幀頭和數(shù)據(jù)域。在數(shù)據(jù)域中承載有多個數(shù)據(jù)包(例如數(shù)據(jù)包n、數(shù)據(jù)包n+1),依照本技術方案提供的數(shù)據(jù)包的封裝方法對數(shù)據(jù)包經(jīng)過封裝后,在各個數(shù)據(jù)包的信息碼(未示出)的末尾拼接了各自的校驗字段,例如,數(shù)據(jù)包n和校驗字段n、數(shù)據(jù)包n+1和校驗字段n+1。這些數(shù)據(jù)包承載于一個基帶幀數(shù)據(jù)域中。
如圖3b所示的是數(shù)據(jù)包經(jīng)分割后各個數(shù)據(jù)塊分別承載于不同基帶幀的情況下封裝成的基帶幀結構示意圖。參考圖3b,數(shù)據(jù)包n被分成3個數(shù)據(jù)塊,即數(shù)據(jù)塊1、數(shù)據(jù)塊2以及數(shù)據(jù)塊3,這三個數(shù)據(jù)塊分別承載于連續(xù)的三個基帶幀數(shù)據(jù)域中。每個基帶幀包括基帶幀幀頭和數(shù)據(jù)域。在數(shù)據(jù)塊3的信息碼的末尾拼接了該數(shù)據(jù)包(即數(shù)據(jù)包n)的校驗字段n。
發(fā)送端將采用本技術方案提供的數(shù)據(jù)包的封裝方法將數(shù)據(jù)包封裝成基帶幀后,將各個基帶幀經(jīng)由廣播通信信道傳輸至接收端,接收端將從接收到的基帶幀中解析出各個數(shù)據(jù),并對各個數(shù)據(jù)包的接收是否正確進行校驗。
本發(fā)明實施例提供的一種數(shù)據(jù)包的校驗方法,該數(shù)據(jù)包是由上述實施例提供的數(shù)據(jù)包封裝方法封裝后填充至基帶幀在信道中傳輸后于接收端恢復得到。如圖4所述的是本發(fā)明的一種數(shù)據(jù)包的校驗方法的具體實施方式的流程示意圖。
參考圖4,數(shù)據(jù)包的校驗方法包括如下步驟:
步驟s21:從當前的基帶幀數(shù)據(jù)域的起始位置開始依次讀取數(shù)據(jù)包,其中所述起始位置由基帶幀幀頭中的起始位置字段來確定;
步驟s22:通過位于數(shù)據(jù)包頭部的包長字段是否為零來判斷該數(shù)據(jù)包是否完整地承載于當前的基帶幀數(shù)據(jù)域;
步驟s23:若該數(shù)據(jù)包未完整地承載于當前的基帶幀數(shù)據(jù),則將當前基帶幀起始位置開始至數(shù)據(jù)域末尾的所有數(shù)據(jù)作為該數(shù)據(jù)包的第一塊,并繼續(xù)從后續(xù)的若干個基帶幀數(shù)據(jù)域中讀取該數(shù)據(jù)包的剩余分塊并依順序與該數(shù)據(jù)包的第一塊進行拼接以得到該數(shù)據(jù)包的信息碼及校驗字段,其中該數(shù)據(jù)包的剩余分塊是根據(jù)基帶幀幀頭中的起始位置字段和數(shù)據(jù)域長度字段之間的關系來確定的;
步驟s24:若該數(shù)據(jù)包完整地承載于當前的基帶幀數(shù)據(jù),則從當前的基帶幀數(shù)據(jù)域的起始位置開始并根據(jù)該數(shù)據(jù)包頭部的包長獲取該數(shù)據(jù)包的信息碼及校驗字段;
步驟s25:記錄組裝該數(shù)據(jù)包的信息碼及校驗字段的基帶幀的個數(shù)以確定該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息;
步驟s26:根據(jù)基帶幀幀頭中的校驗算法標志位中標志的預設校驗字段生成方式與校驗字段長度,從該數(shù)據(jù)包的末尾截取校驗字段,數(shù)據(jù)包的剩余內(nèi)容作為信息碼;
步驟s27:對接收到的數(shù)據(jù)包信息碼以及數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行校驗計算以得到待比較校驗字段;
步驟s28:比較該待比較校驗字段與獲取到的校驗字段是否一致
步驟s29:若兩者一致,則確定該數(shù)據(jù)包接收正確。
在本實施例中,如步驟s21所述,從當前的基帶幀數(shù)據(jù)域的起始位置開始依次讀取數(shù)據(jù)包。
在實際應用中,接收端接收到一系列連續(xù)的基帶幀后,將依照接收的先后順序從第一個基帶幀數(shù)據(jù)域的起始位置開始讀取第一個完整的數(shù)據(jù)包。所述起始位置由基帶幀幀頭中的起始位置字段(如圖2中的syncd字段)來確定,接收端根據(jù)syncd字段中記錄的信息可以確定數(shù)據(jù)域中存儲該數(shù)據(jù)包的起始位置。
如步驟s22所述,通過位于數(shù)據(jù)包頭部的包長字段是否為零來判斷該數(shù)據(jù)包是否完整地承載于當前的基帶幀數(shù)據(jù)域。
在本實施例中,在數(shù)據(jù)包包頭部設置有包長字段,用于記錄該數(shù)據(jù)包的包長。在該數(shù)據(jù)包完整地承載于一個基帶幀數(shù)據(jù)域的情況下,該包長字段記錄整個數(shù)據(jù)包的包長;而當該數(shù)據(jù)包未完整地承載于一個基帶幀數(shù)據(jù)域的情況下,該包長字段默認設置為零。因此,接收端可以通過讀取位于數(shù)據(jù)包頭部的包長字段,根據(jù)其記錄的數(shù)值是否為零來判斷該數(shù)據(jù)包是否完整地承載于當前的基帶幀數(shù)據(jù)域。
如步驟s23所述,若該數(shù)據(jù)包未完整地承載于當前的基帶幀數(shù)據(jù),則將當前基帶幀起始位置開始至數(shù)據(jù)域末尾的所有數(shù)據(jù)作為該數(shù)據(jù)包的第一塊,并繼續(xù)從后續(xù)的若干個基帶幀數(shù)據(jù)域中讀取該數(shù)據(jù)包的剩余分塊并依順序與該數(shù)據(jù)包的第一塊進行拼接以得到該數(shù)據(jù)包的信息碼及校驗字段。
在數(shù)據(jù)包較長,未完整地承載于一個基帶幀數(shù)據(jù)域的情況下,接收端需要從若干個基帶幀中提取屬于該數(shù)據(jù)包的各個數(shù)據(jù)塊,而屬于同一個數(shù)據(jù)包的各個數(shù)據(jù)塊將承載于連續(xù)的若干個基帶幀中。因此,接收端在從當前的基帶幀起始位置至數(shù)據(jù)域末尾獲取了該數(shù)據(jù)包的第一個數(shù)據(jù)塊后,將繼續(xù)從后續(xù)的基帶幀數(shù)據(jù)域中讀取該數(shù)據(jù)包的剩余分塊。
進一步地,該數(shù)據(jù)包的剩余分塊是根據(jù)基帶幀幀頭中的起始位置字段和數(shù)據(jù)域長度字段之間的關系來確定的。具體來說,接收端通過判斷基帶幀幀頭中的起始位置字段中記錄的基帶幀數(shù)據(jù)域的起始位置和數(shù)據(jù)域長度字段記錄的數(shù)據(jù)域的總長度之間的大小關系來確定是否已獲取到該數(shù)據(jù)包的最后一個數(shù)據(jù)塊。
具體包括如下情形:
1)若某個基帶幀幀頭中的起始位置字段大于數(shù)據(jù)域長度字段,則確定該基帶幀數(shù)據(jù)域全部用于承載數(shù)據(jù)包的剩余分塊中的一個數(shù)據(jù)塊,且該數(shù)據(jù)包的傳輸未完成。接收端將繼續(xù)從后續(xù)的基帶幀數(shù)據(jù)域中獲取剩余的數(shù)據(jù)塊。
2)若某個基帶幀幀頭中的起始位置字段等于數(shù)據(jù)域長度字段,則確定該基帶幀數(shù)據(jù)域全部用于承載該數(shù)據(jù)包,且該數(shù)據(jù)包的傳輸已經(jīng)完成。
3)若某個基帶幀幀頭中的起始位置字段小于數(shù)據(jù)域長度字段,則該基帶基數(shù)據(jù)域頭部至起始位置之間的數(shù)據(jù)為該數(shù)據(jù)包的剩余分塊中的最后一個數(shù)據(jù)塊。
如步驟s24所述,若該數(shù)據(jù)包完整地承載于當前的基帶幀數(shù)據(jù),則從當前的基帶幀數(shù)據(jù)域的起始位置開始并根據(jù)該數(shù)據(jù)包頭部的包長獲取該數(shù)據(jù)包的信息碼及校驗字段。
其中,數(shù)據(jù)包的信息碼的長度信息可以通過位于數(shù)據(jù)包頭部長度字段直接或通過簡單計算間接得到,而校驗字段的長度則是根據(jù)發(fā)送端和接收端對校驗字段計算算法的約定得到。
如步驟s25所述,記錄組裝該數(shù)據(jù)包的信息碼及校驗字段的基帶幀的個數(shù)以確定該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。
在本實施例中,接收端后續(xù)對接收到的數(shù)據(jù)包進行校驗時,需要考慮數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。因此,在獲取到完整的數(shù)據(jù)包之后,接收端還需要記錄下組裝該數(shù)據(jù)包的信息碼及校驗字段的基帶幀的個數(shù)。
對于數(shù)據(jù)包未完整地承載于當前的基帶幀數(shù)據(jù)域的情形,接收端可以記錄下獲取整個數(shù)據(jù)包的過程中共跨度了幾個基帶幀,從而可以確定該數(shù)據(jù)包被分成了幾個數(shù)據(jù)塊,并由此確定該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息。而對于數(shù)據(jù)包完整地承載于當前的基帶幀數(shù)據(jù)域的情形,所述被分塊次數(shù)的數(shù)據(jù)信息即為被分塊次數(shù)為零。
如步驟s26所述,根據(jù)基帶幀幀頭中的校驗算法標志位中標志的預設校驗字段生成方式與校驗字段長度,從該數(shù)據(jù)包的末尾截取校驗字段,數(shù)據(jù)包的剩余內(nèi)容作為信息碼。
具體地,接收端在獲取到的整個數(shù)據(jù)包包括信息碼和校驗字段,兩者是合并在一起的。因此,接收端需要從中分別獲取信息碼和校驗字段。其中,校驗字段的長度可以根據(jù)基帶幀幀頭中的校驗算法標志位中標志的預設校驗字段生成方式與校驗字段長度來確定。而數(shù)據(jù)包的信息碼則是在截取了校驗字段之后數(shù)據(jù)包的剩余內(nèi)容。
如步驟s27所述,對接收到的數(shù)據(jù)包信息碼以及數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行校驗計算以得到待比較校驗字段。
具體地,接收端將結合接收到的數(shù)據(jù)包的信息碼與根據(jù)上述步驟s25所確定的該數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息進行校驗運算,以得到待比較校驗字段。其中,所述校驗運算的具體實施過程是根據(jù)基帶幀幀頭中的校驗算法標志位中標志的預設校驗字段生成方式來確定。并且對于同一個數(shù)據(jù)包,發(fā)送端和接收端采用的是相同的預設校驗字段生成方式對該數(shù)據(jù)包的信息碼進行處理以分別獲取校驗字段。
針對不同的預設校驗字段生成方式,對數(shù)據(jù)包的信息碼的處理方式可以參照上文圖1描述的實施例中所述步驟s12的實施例,在此不再贅述。
如步驟s28所述,比較該待比較校驗字段與獲取到的校驗字段是否一致。
如步驟s29所述,若兩者一致,則確定該數(shù)據(jù)包接收正確。反之,若兩者不一致,則確定該數(shù)據(jù)包接收錯誤。
本發(fā)明實施例還提供了一種數(shù)據(jù)包的傳輸方法,具體包括如下步驟:
步驟s31:將當前待傳輸?shù)臄?shù)據(jù)包依次填充至一個或多個基帶幀數(shù)據(jù)域;
步驟s32:生成該數(shù)據(jù)包的校驗字段,其中所述校驗字段根據(jù)該數(shù)據(jù)包的信息碼和該數(shù)據(jù)包在填充至基帶幀數(shù)據(jù)域的過程中被分塊次數(shù)的數(shù)據(jù)信息來確定;
步驟s33:將該校驗字段拼接至該數(shù)據(jù)包的信息碼的末尾以完成該數(shù)據(jù)包的封裝;
步驟s34:將承載于該數(shù)據(jù)包的一個或多個基帶幀經(jīng)由信道傳輸至接收端。
綜上所述,采用本技術方案提供的數(shù)據(jù)包封裝方法和校驗方法,發(fā)送端在生成數(shù)據(jù)包的校驗字段時,考慮了數(shù)據(jù)包填充至基帶幀數(shù)據(jù)域過程中被分塊次數(shù)的數(shù)據(jù)信息,這樣在接收端對接收到的數(shù)據(jù)包進行解析過程中,也將結合數(shù)據(jù)包被分塊次數(shù)的數(shù)據(jù)信息來對數(shù)據(jù)包是否正確接收進行校驗,從而提高了數(shù)據(jù)包(尤其是數(shù)據(jù)包被分成幾個數(shù)據(jù)塊承載于不同的基帶幀中的情況下)在廣播通信信道傳輸時的可靠性。
本發(fā)明雖然已以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領域技術人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以利用上述揭示的方法和技術內(nèi)容對本發(fā)明技術方案做出可能的變動和修改,因此,凡是未脫離本發(fā)明技術方案的內(nèi)容,依據(jù)本發(fā)明的技術實質對以上實施例所作的任何簡單修改、等同變化及修飾,均屬于本發(fā)明技術方案的保護范圍。