摘 ?要: 網(wǎng)絡(luò)傳輸廣泛應(yīng)用在IT領(lǐng)域的各個領(lǐng)域,為保證數(shù)據(jù)通信網(wǎng)中通信雙方能有效、可靠通信而規(guī)定的一系列約定。在實(shí)際應(yīng)用中會接觸到對于通信協(xié)議的解析的需求,解析的方法更是根據(jù)實(shí)際情況種類繁多。本文主要依據(jù)衛(wèi)星地面數(shù)據(jù)的解析問題,對實(shí)際應(yīng)用中可能遇到的實(shí)時傳輸、誤碼、循環(huán)重傳等不同的數(shù)據(jù)情況進(jìn)行了分析和處理。針對去重復(fù)、容錯等要求對不同解析方法的應(yīng)對進(jìn)行了分析、比較和實(shí)驗(yàn);針對數(shù)據(jù)解析時效性的要求,對數(shù)據(jù)進(jìn)行分配并調(diào)度到線程池中進(jìn)行處理,從而達(dá)到時效性的目的。
關(guān)鍵詞: 通信協(xié)議;預(yù)處理;包處理
中圖分類號: TP311.52 ? ?文獻(xiàn)標(biāo)識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2019.06.037
本文著錄格式:閆超. 基于通信協(xié)議的數(shù)據(jù)解析研究與實(shí)現(xiàn)[J]. 軟件,2019,40(6):160163
【Abstract】: Network transport is widely used in various domain of IT, network both sides data communication effective and reliable guaranteed by series of agreements. In real application, it needs to parse communication protocol and there are various parsing methods base on actual situations. This article is mainly based on analysis of satellite and ground data, it analyzed and processed different data situation may occur in reality, like real-time transmission, error, retransmission cycle and etc. According to requirements of de-duplication, fault tolerance and etc, it analyzed, compared and experimented different parsing methods. According to data parsing timeliness requirements, it distributed data and scheduled to a thread pool for processing.
【Key words】: Communication protocol; Preprocessing; Packet processing
0 ?引言
數(shù)據(jù)的通信協(xié)議[1]亦稱數(shù)據(jù)通信控制協(xié)議。是為保證數(shù)據(jù)通信網(wǎng)絡(luò)中通信雙方能有效、可靠通信而規(guī)定的一系列協(xié)議。這些協(xié)議包括數(shù)據(jù)的格式、順序、速率、數(shù)據(jù)傳輸?shù)拇_認(rèn)或拒收、差錯檢測、重傳控制和詢問等操作。最廣泛的通信協(xié)議為TCP[2]/IP[3]協(xié)議和UDP協(xié)議,本文討論的衛(wèi)星的通信[4]協(xié)議就是在此協(xié)議的基礎(chǔ)上進(jìn)行裁剪、修改和擴(kuò)充得到的。
數(shù)據(jù)解析是指根據(jù)已知的數(shù)據(jù)通信協(xié)議,按照協(xié)議去掉冗余信息并進(jìn)行計算獲得用戶需要的數(shù)據(jù)信息,在很多處理系統(tǒng)中通常為第一個或者前面環(huán)節(jié)用于數(shù)據(jù)的接收的初步處理,大量的操作與運(yùn)算都在后臺服務(wù)器端進(jìn)行。
1 ?功能與建模
1.1 ?功能
根據(jù)幀數(shù)據(jù)格式和幀同步頭獲取幀數(shù)據(jù),去掉幀的冗余信息獲得包數(shù)據(jù),再從包數(shù)據(jù)[5]解出所需要的數(shù)據(jù)信息并通過參數(shù)解算、格式轉(zhuǎn)化等操作獲得需要的接口數(shù)據(jù)。
由于衛(wèi)星重復(fù)下傳數(shù)據(jù)造成了重復(fù)數(shù)據(jù),需要進(jìn)行去重處理。因?yàn)榈孛娼邮蘸托巧舷聜鲿r間不同步,所以無法判斷數(shù)據(jù)重復(fù)的起始位置,所以只能通過解析數(shù)據(jù)獲得包時間,根據(jù)包時間是否重復(fù)判斷數(shù)據(jù)的重復(fù)性并去重復(fù)。
1.2 ?數(shù)據(jù)建模
本文參照數(shù)據(jù)傳輸?shù)幕緮?shù)據(jù)格式,設(shè)計了幀數(shù)據(jù)和包數(shù)據(jù)的格式。
幀數(shù)據(jù)格式:1F2F3F4F為幀頭,幀長度固定為1024B;
包數(shù)據(jù)格式:AAAABBBB為包頭,長度由所加載的脈沖數(shù)聯(lián)合確定,具體如下表所示。
2 ?數(shù)據(jù)解析算法設(shè)計與實(shí)現(xiàn)
2.1 ?解析算法介紹
數(shù)據(jù)解析過程按照固定步進(jìn)和回溯對數(shù)據(jù)進(jìn)行解析。一般的數(shù)據(jù)幀和數(shù)據(jù)包都有一定的規(guī)律,數(shù)據(jù)幀往往都是固定長度固定節(jié)拍,數(shù)據(jù)包的長度根據(jù)信息源、采樣率和采樣時間有所不同,但是根據(jù)包信息一般可計算出包的具體長度,所以根據(jù)固定節(jié)拍查找速度較快,但是對于糾錯能力比較弱,當(dāng)固定步進(jìn)無法找到合適匹配頭時,需要重新從搜索位置逐字節(jié)尋找。當(dāng)獲得一包數(shù)據(jù)后,由于包內(nèi)數(shù)據(jù)的運(yùn)算量可能很高,需要創(chuàng)建線程池,將每包數(shù)據(jù)作為獨(dú)立的數(shù)據(jù)片段分配到不同的線程中進(jìn)行處理。
2.2 ?數(shù)據(jù)解析
逐字節(jié)遞增進(jìn)行幀和包同步頭的匹配,當(dāng)匹配到合適的幀和包同步頭后進(jìn)行有效性驗(yàn)證,對于正確的數(shù)據(jù)進(jìn)行后續(xù)處理;
固定步長查找方法是由于我們在組幀的時候也是按照固定節(jié)拍進(jìn)行組幀,反過來一般的數(shù)據(jù)幀和數(shù)據(jù)包都有一定的規(guī)律,數(shù)據(jù)幀往往都是固定長度固定節(jié)拍,數(shù)據(jù)包的長度根據(jù)信息源、采樣率和采樣時間有所不同,但是根據(jù)包信息一般可計算出包的具體長度,所以根據(jù)固定節(jié)拍查找速度較快;
混合查找就是以固定步長為引導(dǎo),當(dāng)固定步長無法查找到有效的同步頭,在回溯到當(dāng)前的查找位置用逐字節(jié)進(jìn)行遍歷查找。
第一種方法是適應(yīng)性最強(qiáng),但是帶來的代價就是效率[6-7]也是最低的,對于數(shù)據(jù)完整性差、錯誤較多情況適用,適用于數(shù)據(jù)傳輸信號不穩(wěn)定、單幀/包的數(shù)據(jù)長度不固定或者無法計算的情況。
第二種方式對于接收、數(shù)傳信道正確、穩(wěn)定的數(shù)據(jù),或者經(jīng)過初步預(yù)處理的數(shù)據(jù),效率最高,同時適應(yīng)性也是最差的。本次模擬[8]的數(shù)據(jù)樣本有非常完整的數(shù)據(jù),省掉了搜索匹配的地址位移和同步頭匹配的操作,可以較大提高執(zhí)行效率。
第三種方法是結(jié)合前兩種方法,對數(shù)傳中會出現(xiàn)誤碼,數(shù)據(jù)完整性相對較好的情況,既需要步進(jìn)查找,而且在出現(xiàn)誤碼時進(jìn)行回溯查找。
2.3 ?數(shù)據(jù)去重復(fù)
因?yàn)榈孛娼邮照驹诮邮招l(wèi)星下傳數(shù)據(jù)時,衛(wèi)星采用循環(huán)播放下傳方式,地面站接收時間較長,接收幾個周期的衛(wèi)星下傳,所以會造成數(shù)據(jù)重復(fù)的現(xiàn)象,由于數(shù)據(jù)時間根據(jù)計劃可以獲得,根據(jù)時間制定哈希表去重復(fù)。
遍歷搜索方法是大家應(yīng)用的比較多的方法,利用類似于STL中l(wèi)ist的存儲,對新獲得的包時間與已存儲的數(shù)據(jù)的包時間進(jìn)行比較去重復(fù)。
哈希表去重復(fù)是在數(shù)據(jù)有一定的連貫性,例如時間數(shù)據(jù),以整秒進(jìn)行遞增,可以建立有限的空間的哈希表,初始化為0,對于獲得的數(shù)據(jù)標(biāo)記為1,對于已經(jīng)標(biāo)記過為1的數(shù)據(jù)判為重復(fù)數(shù)據(jù),不再進(jìn)行后續(xù)處理。如果幀計數(shù)為連續(xù)并且計數(shù)的最大值和最小值的差相對較小,也可根據(jù)幀計數(shù)制訂哈希表去重復(fù)。
第一種方法是使用第三方庫中現(xiàn)有方法或者依靠循環(huán)遍歷使用不同查找的方法,每次遍歷都不能直接找到重復(fù)數(shù)據(jù),如果數(shù)據(jù)不重復(fù)則需要從前到后比對一遍,遍歷和比對造成時間消耗較大,可比較的數(shù)據(jù)元素的個數(shù)越多消耗越大。
第二種方法使用的創(chuàng)建哈希對照表的方法,通過計算時間差來獲得相對步進(jìn),從而支持了隨機(jī)訪問,存儲空間消耗相同,但是在時間性能上有較大提高,對于數(shù)據(jù)的時間跨度越大越明顯。哈希表的創(chuàng)建有局限性,對于連續(xù)的跨度在可接受范圍內(nèi)的數(shù)據(jù)可以創(chuàng)建,如果創(chuàng)建哈希表代價過大需要根據(jù)實(shí)際情況進(jìn)行分析。
2.4 ?數(shù)據(jù)并行處理
在解析數(shù)據(jù)時,幀和包數(shù)據(jù)的解析可以并行[9-10]處理,同時也可以在數(shù)據(jù)包內(nèi)部進(jìn)行并行。
(1)數(shù)據(jù)幀和數(shù)據(jù)包分兩個線程進(jìn)行處理。
(2)數(shù)據(jù)幀和數(shù)據(jù)包分兩個線程進(jìn)行處理,同時在數(shù)據(jù)包解析后,由于包與包之間在數(shù)據(jù)解析過程中不存在關(guān)聯(lián)關(guān)系,將每包數(shù)據(jù)視為獨(dú)立的數(shù)據(jù)片段??紤]到尋找下一包的時間消耗遠(yuǎn)小于對一包數(shù)據(jù)的運(yùn)算,可以使用一個線程進(jìn)行解析獲得每包的數(shù)據(jù)片段,把獲得的數(shù)據(jù)包放入包處理的線程池中進(jìn)行后續(xù)處理,包搜索線程同時搜尋下一包。
第一種方法是創(chuàng)建幀和包處理的的雙線程/進(jìn)程通過文件/內(nèi)存方式進(jìn)行交互處理,同時處理幀和包數(shù)據(jù)。
第二種方法使用在幀和包并行處理的同時,由于單包的數(shù)據(jù)運(yùn)算量較大,所以通過線程池/進(jìn)程池等方法實(shí)現(xiàn)數(shù)據(jù)包的并行處理,處理方式如所示。
3 ?仿真及算法過程
3.1 ?仿真環(huán)境
實(shí)驗(yàn)在64位Linux環(huán)境下進(jìn)行,計算機(jī)處理器Inter(R) Core(TM) i5-4200 CPU @ 1.60GHZ 2.30,內(nèi)存4.00GB,實(shí)驗(yàn)執(zhí)行采用Windows客戶端遠(yuǎn)程調(diào)用方式。編寫簡單的創(chuàng)建數(shù)據(jù)源的軟件,模擬創(chuàng)建了六批數(shù)據(jù)樣本,用于比較解幀、去重復(fù)和并行處理各兩批數(shù)據(jù)樣本。
3.2 ?實(shí)驗(yàn)驗(yàn)證
3.2.1 ?實(shí)驗(yàn)過程
第一組實(shí)驗(yàn)針對數(shù)據(jù)解析算法的比較,數(shù)據(jù)樣本的兩組數(shù)據(jù)特點(diǎn):
(1)原始數(shù)據(jù)完整,幀按照1024步進(jìn)完整,包數(shù)據(jù)長度隨機(jī)為1M左右;
(2)在完整的原始數(shù)據(jù)基礎(chǔ)上添加錯誤幀長、丟幀和錯誤包長的情況。
第二組實(shí)驗(yàn)比較兩種排序算法的效率問題:
(1)按照時間2018-01-01 00:00:00~2018-01-01 01:00:00,一秒一個節(jié)拍,一共1小時:3600個數(shù)據(jù)時間點(diǎn)用于去重復(fù),五倍的重復(fù)數(shù)據(jù);
(2)按照時間2018-01-01 00:00:00~2018-01-01 10:00:00,一秒一個節(jié)拍,一共10小時:36000個數(shù)據(jù)時間點(diǎn)用于去重復(fù),五倍的重復(fù)數(shù)據(jù)。
第三組實(shí)驗(yàn)比較單線程和線程池處理包的效率問題:
(1)原始數(shù)據(jù)完整,幀按照1024步進(jìn)完整,包數(shù)據(jù)長度隨機(jī)為1M左右,數(shù)據(jù)類型分為全脈沖和中頻兩種,總數(shù)據(jù)量1GB;
(2)原始數(shù)據(jù)完整,幀按照1024步進(jìn)完整,包數(shù)據(jù)長度隨機(jī)為10M左右,數(shù)據(jù)類型分為全脈沖和中頻兩種,總數(shù)據(jù)量1GB。
3.2.2 ?實(shí)驗(yàn)結(jié)果
部分實(shí)驗(yàn)運(yùn)行結(jié)果如下圖所示。
第一組實(shí)驗(yàn),具體結(jié)果參見表。
第一種逐字節(jié)查詢算法通過逐個字節(jié)的累加把每個位置的數(shù)據(jù)都與同步頭進(jìn)行匹配,由于每個位置的數(shù)據(jù)都進(jìn)行了匹配,所以容錯能力強(qiáng),但是自身執(zhí)行效率低。
第二種通過固定步進(jìn)查找,匹配到一個同步頭后,當(dāng)前位置加上步進(jìn)直接獲得下一個同步頭,算法執(zhí)行效率高,如果中間數(shù)據(jù)有錯誤或丟失將無法繼續(xù)匹配查找,沒有容錯能力,所以第二組數(shù)據(jù)無法通過測試[11]。當(dāng)數(shù)據(jù)經(jīng)過去除錯誤數(shù)據(jù)的初步處理,可以選擇這種方法,執(zhí)行效率高,程序?qū)崿F(xiàn)簡單。
第三種算法結(jié)合了前兩種方法的方式,具備了容錯能力和速度處理能力,由于需要結(jié)合兩種方法做程序設(shè)計,所以在編程實(shí)現(xiàn)過程中相對復(fù)雜。
第二組實(shí)驗(yàn),具體結(jié)果參見表。
使用STL中的list對數(shù)據(jù)進(jìn)行去重復(fù),第一組數(shù)據(jù)有3600個點(diǎn),獲得一個時間點(diǎn)后需要與已經(jīng)記錄的時間點(diǎn)作比較,比較次數(shù)為1到3600。使用哈希表方法每次需要計算當(dāng)前包系統(tǒng)時間與數(shù)據(jù)起始時間的差值,獲得差值后可以直接訪問哈希表中對應(yīng)的數(shù)據(jù),比較一次可以就可以判斷是否重復(fù)。哈希表多一個計算時間差過程,極大的減少了查詢比較次數(shù)。
從第二組數(shù)據(jù)的實(shí)驗(yàn)結(jié)果可看出,時間點(diǎn)個數(shù)增加,包時間數(shù)據(jù)的維度增加,第一種方法需要比較的次數(shù)也增加,比較次數(shù)從1到3600變成1到36000,需要消耗更多時間。使用哈希表的方法時間消耗只與總共需要比較的包時間個數(shù)有關(guān),所以時間數(shù)據(jù)維度的增加在時間消耗上線性增長,但是遠(yuǎn)小于第一種方法。
第三組實(shí)驗(yàn),具體結(jié)果參見表。
使用單線程對包數(shù)據(jù)進(jìn)行參數(shù)解算,線程搜索匹配包同步頭后進(jìn)行參數(shù)解算,一直到所有數(shù)據(jù)處理結(jié)束,整個過程是順序的過程,總的時間消耗為每一步時間消耗的總和。使用線程池進(jìn)行計算,主線程搜索匹配包同步頭,獲得一包數(shù)據(jù)后交給線程池中的子線程進(jìn)行計算,直到所有數(shù)據(jù)搜索匹配結(jié)束并且包解算子線程都完成計算,整個過程是并行交互的過程,處理同時進(jìn)行降低了總時間的消耗。
第二組數(shù)據(jù)的包數(shù)據(jù)長度增加,包內(nèi)解算的運(yùn)算量隨之增加。由于更多的時間消耗的處理在線程池中進(jìn)行,所以線程池并行處理的效果更明顯。
3.3 ?實(shí)驗(yàn)結(jié)果分析
通過分析和實(shí)驗(yàn)驗(yàn)證,得出如下結(jié)論:
第一組實(shí)驗(yàn):
(1)第一種逐字節(jié)查詢算法容錯能力強(qiáng),錯誤數(shù)據(jù)影響小,但是自身執(zhí)行效率低;
(2)第二種算法執(zhí)行效率高,沒有容錯能力;
(3)第三種算法效率高,具有容錯能力,錯誤數(shù)據(jù)影響較小。
第二組實(shí)驗(yàn):
(1)建立哈希表去重復(fù)算法,效率高;
(2)兩種方法對于時間點(diǎn)的增長,時間消耗都保持線性增長。
第三組實(shí)驗(yàn):
(1)利用線程池比單線程效率高;
(2)單包內(nèi)運(yùn)算量越大、處理耗時越長,效果越明顯。
4 ?結(jié)論
本文首先概述了通信協(xié)議的數(shù)據(jù)解析的關(guān)鍵技術(shù)和算法。根據(jù)衛(wèi)星通訊需求,構(gòu)建了一種數(shù)據(jù)解析的節(jié)本框架。在一定的通訊協(xié)議下,針對不同場景的數(shù)據(jù)樣本,給出了不同的解析算法。通過實(shí)驗(yàn)分析對各種解析算法的處理能力、容錯性、效率進(jìn)行了分析和比較。依據(jù)并行設(shè)計的原理,增加了線程池在數(shù)據(jù)解析過程中的使用,通過合理利用計算資源,較大的提高執(zhí)行效率。在優(yōu)化通信協(xié)議的數(shù)據(jù)解析算法的研究方面做了有意義的嘗試與實(shí)踐,并做了相應(yīng)的實(shí)驗(yàn),對學(xué)習(xí)和工作有一定的指導(dǎo)作用。
參考文獻(xiàn)
[1] 蔡治軍. 基于因特網(wǎng)IPv6協(xié)議的數(shù)字視頻傳輸系統(tǒng)的應(yīng)用與研究[D]. 暨南大學(xué), 2003年.
[2] 陳金超, 謝東亮. 無線網(wǎng)絡(luò)TCP 擁塞控制算法研究綜述[J]. 軟件, 2015, 36(1): 82-87.
[3] 李峰, 陳向益. TCP\IP協(xié)議分析與應(yīng)用編程. 人民郵電出版社, 2006.8.
[4] 龐之浩. 英國新一代軍用通信衛(wèi)星亮相太空. 中國航天, 2007(7)-28-31.
[5] 翁子凡, 鄧偉. 互聯(lián)網(wǎng)絡(luò)TCP 單向時延被動測量方案[J]. 軟件, 2015, 36(1): 47-50.
[6] 岳鋼, 王楠. 網(wǎng)絡(luò)學(xué)習(xí)中知識可視化效率研究[J]. 軟件, 2015, 36(2): 92-96.
[7] 王梓斌. 線性非再生雙向中繼協(xié)同無線通信關(guān)鍵技術(shù)研究. 國防科學(xué)技術(shù)大學(xué), 2012.
[8] 曹龍江, 張勖, 王錕, 等. 網(wǎng)絡(luò)應(yīng)用流量模擬技術(shù)[J]. 軟件, 2015, 36(2): 14-19.
[9] 劉皓. 分布式環(huán)境下可靠數(shù)據(jù)同步及通訊的協(xié)議分析[J].軟件, 2015, 36(9): 113-116.
[10] 王歡. 分布式移動性管理協(xié)議研究[J]. 軟件, 2015, 36(2): 80-85.
[11] 王云. 《軟件測試》課程教學(xué)探索與思考[J]. 軟件, 2015, 36(7): 129-131.