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