王 亮 徐開來 馬良荔
北斗是我國自行研制的衛(wèi)星導(dǎo)航系統(tǒng),具有定位、授時(shí)、短報(bào)文功能,且成本低、體積小,非常適合廣域物聯(lián)網(wǎng)網(wǎng)絡(luò)層的解決方案,其中短報(bào)文功能為解決遠(yuǎn)海和偏遠(yuǎn)地區(qū)通信提供了雙向信道。北斗衛(wèi)星導(dǎo)航系統(tǒng)的短報(bào)文功能在設(shè)計(jì)之初并未考慮到大于單條報(bào)文長度以及多對多的應(yīng)用,在數(shù)據(jù)大于短報(bào)文的情況下無法實(shí)現(xiàn)有效的傳輸,且目前尚無同等價(jià)格、同等體積的通信設(shè)備替代北斗衛(wèi)星的功能。從具體應(yīng)用方面來看,北斗的短報(bào)文通信在傳輸中還存在限制,具體如下:
1)單次通信容量有限,每次進(jìn)行短報(bào)文通信所能傳輸?shù)臄?shù)據(jù)量是有限的,普通用戶最高傳輸速度為120字節(jié)/分鐘,數(shù)據(jù)如果超過最大報(bào)文長度,必須進(jìn)行分包傳送;
2)通信頻度有限,北斗系統(tǒng)每發(fā)送完一條報(bào)文后需等待很長的時(shí)間才能進(jìn)行下一次傳輸;
3)北斗衛(wèi)星通信是不可靠的通信鏈路,在連續(xù)傳輸中丟包率較高。
文獻(xiàn)[1~5]均對常規(guī)短報(bào)文協(xié)議進(jìn)行擴(kuò)展,一定程度增加了傳輸性能,但其定義的分包傳輸協(xié)議僅解決了點(diǎn)對點(diǎn)的傳輸方案,實(shí)際應(yīng)用中不可能有如此理想的傳輸環(huán)境,尤其是在多對多的物聯(lián)網(wǎng)環(huán)境中,某點(diǎn)在長時(shí)間接收分包數(shù)據(jù)的同時(shí)還有可能接收到其他點(diǎn)數(shù)據(jù)或同一點(diǎn)的第二份數(shù)據(jù)(加裝復(fù)數(shù)北斗卡的發(fā)送端),由于沒有標(biāo)識符,接收端無法分辨數(shù)據(jù)來源,這就造成了數(shù)據(jù)混淆,使得分包數(shù)據(jù)無法還原,得不到最終數(shù)據(jù)。本文將傳統(tǒng)的短報(bào)文分包傳輸協(xié)議進(jìn)行改進(jìn),加入WEB服務(wù)器中的“會話控制”和“隊(duì)列控制”方法,融合重傳和確認(rèn)機(jī)制保證數(shù)據(jù)可靠傳輸,以滿足物聯(lián)網(wǎng)中多對多傳輸?shù)膶?shí)際需求,使北斗通信在物聯(lián)網(wǎng)平臺能發(fā)揮更好的功效。
物聯(lián)網(wǎng)應(yīng)用架構(gòu)下,其采集端的數(shù)據(jù)種類包括控制指令、文字信息、圖像信息等,且數(shù)據(jù)交互頻繁,對于數(shù)據(jù)長度大于單次報(bào)文最大度120字節(jié)的數(shù)據(jù),通常利用分包傳輸,但傳輸?shù)却龝r(shí)間長,在等待時(shí)間內(nèi)為避免多份數(shù)據(jù)之間混淆,設(shè)定一個(gè)全網(wǎng)唯一標(biāo)識符進(jìn)行區(qū)別。
接受端向發(fā)送端請求數(shù)據(jù)后,結(jié)合發(fā)送端和接收端的用戶ID生成的全網(wǎng)唯一標(biāo)識符“會話ID”(具體生成算法不在本文研究范圍中),之后發(fā)送確認(rèn)包,包含本次傳輸?shù)臅扞D、是否分包且分包數(shù)量等信息,之后開始數(shù)據(jù)包傳輸。與此同時(shí),接收端仍可以實(shí)時(shí)接收其他或同一發(fā)送端的數(shù)據(jù)包,區(qū)分規(guī)則即為會話ID。這樣,當(dāng)接收端收到另一發(fā)送端的數(shù)據(jù)時(shí),為不同會話ID開辟獨(dú)立內(nèi)存空間進(jìn)行接收存儲,直至數(shù)據(jù)傳輸完畢,從內(nèi)存中銷毀會話ID,將數(shù)據(jù)寫入硬盤。
發(fā)送端在進(jìn)行數(shù)據(jù)傳輸時(shí),會遇到上一會話還沒有完成,又接收新的發(fā)送指令,此時(shí)應(yīng)根據(jù)請求創(chuàng)建會話隊(duì)列,檢測是否有空閑的信道,有則分配信道開始傳輸,否則掛起傳輸請求,等待前次傳輸完成。在等待期間若接收到接收端的“取消請求數(shù)據(jù)”的請求包,根據(jù)其攜帶的會話ID,查詢相應(yīng)的傳輸進(jìn)程,若傳輸未完成則終止傳輸,否則取消請求數(shù)據(jù)失敗,兩種情況均插隊(duì)向接收端發(fā)送一條確認(rèn)包,并銷毀會話ID,記入日志。
接收端只有在收到確認(rèn)包,識別到會話ID后才可知本次傳輸是否在隊(duì)列、預(yù)計(jì)排隊(duì)時(shí)間、預(yù)計(jì)完全接收完畢的時(shí)間,告知用戶,由用戶決定是否取消本次傳輸。若取消,則發(fā)送帶有“取消請求數(shù)據(jù)”和本次傳輸“會話ID”的請求包,之后收到取消成功的確認(rèn)包即完成取消請求操作;不取消,則等待傳輸完畢。
在發(fā)送端接收到接收端請求數(shù)據(jù)的請求包后,創(chuàng)建“會話ID”作為本次傳輸?shù)奈ㄒ粯?biāo)識符,根據(jù)“數(shù)據(jù)標(biāo)識符”找到要傳輸?shù)臄?shù)據(jù),分析所請求的數(shù)據(jù)體積,若超出單次報(bào)文最大長度則拆分為子數(shù)據(jù)包,并對每個(gè)小數(shù)據(jù)包添加包含“會話ID”和“數(shù)據(jù)包ID”的包頭,依次發(fā)送,直至全部發(fā)送完畢。若發(fā)送期間再次接收到請求數(shù)據(jù)的請求包,則依然創(chuàng)建“會話ID”,開啟隊(duì)列模式,暫時(shí)掛起本次會話ID傳輸,等待信道空閑,并插隊(duì)發(fā)送一條確認(rèn)包,告知接收端會話ID。接收端可依照會話ID,發(fā)送“取消請求數(shù)據(jù)”的請求包,發(fā)送端會根據(jù)會話ID取消在隊(duì)列中的傳輸,并插隊(duì)發(fā)送一條確認(rèn)包,告知接收端該會話ID的傳輸取消成功。
數(shù)據(jù)發(fā)送完畢后,等待接收端回執(zhí)包,識別回執(zhí)包中“類型”若為1(完成)則,將本次會話相關(guān)信息存入硬盤后,銷毀會話ID,清空緩存;若為2(補(bǔ)發(fā))則識別“回執(zhí)包總條數(shù)”,確認(rèn)要接收的回執(zhí)包個(gè)數(shù),等待全部回執(zhí)包接收完畢,統(tǒng)計(jì)“缺失數(shù)據(jù)包序號”,重新發(fā)送相應(yīng)的子數(shù)據(jù)包,重復(fù)此過程直至回執(zhí)包“類型”為1。若為3(超時(shí))或等待超過一定時(shí)間,則判定為超時(shí),將本次“會話”相關(guān)數(shù)據(jù)掛起存入硬盤,寫入日志,等待人工操作,之后銷毀“會話ID”,清空緩存。
向發(fā)送端發(fā)送請求包后,等待“確認(rèn)包”,收到后識別“本次傳輸數(shù)據(jù)包總量”,查詢“會話ID”,若無則創(chuàng)建,之后持續(xù)接收數(shù)據(jù)包,分析包頭,并將數(shù)據(jù)包按照“會話ID”存儲于緩存中,直至接收完畢,比對緩存中數(shù)據(jù)包,記錄丟包編號,向發(fā)送端發(fā)送回執(zhí)包,標(biāo)注“類型2(補(bǔ)包)”,同時(shí)繼續(xù)接收數(shù)據(jù)包,重復(fù)此過程直至數(shù)據(jù)包完整,向發(fā)送端發(fā)送回執(zhí)包“類型1(完成)”,重新組合數(shù)據(jù)包。接收過程中,一定時(shí)間未收到數(shù)據(jù)包或確認(rèn)包則判定為超時(shí),將本次“會話”相關(guān)數(shù)據(jù)掛起存入硬盤,寫入日志,等待人工操作,之后銷毀“會話ID”,清空緩存。發(fā)送端、接收端整體流程圖如圖1所示。
本文設(shè)計(jì)的各種擴(kuò)展協(xié)議,均是在標(biāo)準(zhǔn)報(bào)文的數(shù)據(jù)段建立新的擴(kuò)展字段頭,并將整條報(bào)文重新定義為“XX包”,以實(shí)現(xiàn)相應(yīng)功能,具體定義如下:
1)請求包
圖1 發(fā)送、接收流程圖
接收端向發(fā)送端請求獲取某項(xiàng)數(shù)據(jù),數(shù)據(jù)標(biāo)識符定義需要獲取的數(shù)據(jù)類型便于發(fā)送端查找,還可以攜帶時(shí)間、經(jīng)緯度、用戶資料等附加信息;接收端在收到確認(rèn)包后,得到本次傳輸?shù)臅扞D,可以向發(fā)送端取消該會話ID的數(shù)據(jù)請求。
表1 請求包包頭字段定義
2)確認(rèn)包
發(fā)送端接收到請求包之后,向接收端發(fā)送一個(gè)確認(rèn)包,包含本次傳輸數(shù)據(jù)包數(shù)量與“會話ID”,接收端查詢相應(yīng)的“會話ID”,對數(shù)據(jù)包進(jìn)行存儲。附加信息中會攜帶本次會話ID是否在隊(duì)列,預(yù)計(jì)排隊(duì)時(shí)間,預(yù)計(jì)傳輸完成時(shí)間等信息。
表2 確認(rèn)包包頭字段定義
3)數(shù)據(jù)包
未超過單次短報(bào)文傳輸最大字節(jié)數(shù)的數(shù)據(jù)直接傳輸即可,超過的則拆分為多個(gè)子數(shù)據(jù)包,并自定義數(shù)據(jù)包編號,賦予會話ID,接收端接收到數(shù)據(jù)包后,依據(jù)包頭里的“數(shù)據(jù)包ID”暫存于緩存中,等本次傳輸全部數(shù)據(jù)包到齊后,重新組包。數(shù)據(jù)包的格式如表3所示。
表3 數(shù)據(jù)包包頭字段定義
4)回執(zhí)包
接收端收到本次傳輸?shù)淖詈笠粋€(gè)數(shù)據(jù)包后,進(jìn)行數(shù)據(jù)包序號校驗(yàn),若缺失某些數(shù)據(jù)包,則判定為丟包,并將缺失數(shù)據(jù)包ID計(jì)入回執(zhí)包中,統(tǒng)計(jì)完成后發(fā)送給發(fā)送端。實(shí)際應(yīng)用中回執(zhí)包可能出現(xiàn)多個(gè),因此添加“回執(zhí)包總數(shù)”,以便系統(tǒng)識別所有回執(zhí)包后進(jìn)行補(bǔ)包處理。各字段頭含義如表4所示。
1)實(shí)驗(yàn)?zāi)康?/p>
對本文設(shè)計(jì)的會話控制與隊(duì)列控制協(xié)議進(jìn)行測試,相對成熟的分包傳輸協(xié)議不作為實(shí)驗(yàn)重點(diǎn)。
2)實(shí)驗(yàn)環(huán)境
民用北斗通信模塊2套(含SIM卡160044、160048兩張)、PC機(jī)2臺、基于Windows環(huán)境的傳輸控制軟件。
3)實(shí)驗(yàn)數(shù)據(jù)
以傳輸1KB長文本為例,總計(jì)傳輸時(shí)間約12分鐘,期間進(jìn)行多次請求數(shù)據(jù)與取消請求數(shù)據(jù),觀察會話ID的創(chuàng)建與隊(duì)列模式情況。其中會話ID代碼以最簡單算法生成,實(shí)際運(yùn)用中可根據(jù)需求改進(jìn)。
表4 回執(zhí)包包頭字段定義
表5 實(shí)驗(yàn)數(shù)據(jù)
4)實(shí)驗(yàn)分析
會話、隊(duì)列創(chuàng)建功能測試:接收端端連續(xù)發(fā)送4次“請求數(shù)據(jù)”,發(fā)送端開始傳輸,并將之后3次請求添加至隊(duì)列;
會話取消功能測試:接收端主動取消,排隊(duì)中的某個(gè)會話,反饋成功,之后主動取消正在傳輸?shù)臅?,反饋成功?/p>
隊(duì)列傳輸功能測試:接收端無任何用戶指令,發(fā)送端連續(xù)完成2個(gè)會話的傳輸任務(wù)。
結(jié)論:發(fā)送端同時(shí)創(chuàng)建4個(gè)傳輸會話成功,且互不干擾;取消正在傳輸?shù)臅挸晒?,取消排?duì)中的會話成功;連續(xù)傳輸兩組會話成功。
本文設(shè)計(jì)的傳輸協(xié)議不局限于北斗通信,也適用于其他低速信道,客觀上北斗短報(bào)文并不是數(shù)據(jù)傳輸?shù)淖罴逊桨?,也不是北斗衛(wèi)星的發(fā)展方向,但目前北斗通信模塊覆蓋廣、成本低、體積小在遠(yuǎn)海和山區(qū)依舊有應(yīng)用價(jià)值,本文是基于低速信道提供一種物聯(lián)網(wǎng)網(wǎng)絡(luò)層通用解決方案。
[1]顏曉星,車明,高小娟.基于北斗衛(wèi)星的可靠遠(yuǎn)程通信系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,2017,43(3):62-68.
[2]戴勝,曹菁菁,方芳.一種基于北斗短報(bào)文的遠(yuǎn)程終端監(jiān)控方法[J].數(shù)字通信世界,2016(12):10-13.
[3]任娜.北斗衛(wèi)星導(dǎo)航系統(tǒng)在AIS中的應(yīng)用研究[D].廈門:集美大學(xué),2016.
[4]郭丹.北斗衛(wèi)星短報(bào)文通信控制系統(tǒng)研究[D].西安:西北大學(xué),2015.
[5]沈華飛.北斗衛(wèi)星一代短報(bào)文通信技術(shù)及應(yīng)用[J].電子制作,2014(23):106-106.
[6]于龍洋,王鑫,李署堅(jiān),等.基于北斗短報(bào)文的定位數(shù)據(jù)壓縮和可靠傳輸[J].電子技術(shù)應(yīng)用,2012,38(11):108-111.
[7]李文金,蘇凱雄.基于存儲管理的北斗報(bào)文傳輸協(xié)議設(shè)計(jì)與應(yīng)用[J].微型機(jī)與應(yīng)用,2015,34(24):63-65.
[8]吳海樂,馮濤,沈兵,等.基于北斗的海事長報(bào)文傳輸解決方案[J].全球定位系統(tǒng),2015(4):37-40.
[9]史向陽.北斗系統(tǒng)在海上多媒體數(shù)據(jù)傳輸中的應(yīng)用研究[D].大連:大連海事大學(xué),2014.
[10]鄒李兵.基于北斗報(bào)文的動態(tài)影像傳輸關(guān)鍵技術(shù)研究[D].成都:成都理工大學(xué),2009.
[11]成方林,張翼飛,劉佳佳.基于“北斗”衛(wèi)星導(dǎo)航系統(tǒng)的長報(bào)文通信協(xié)議[J].海洋技術(shù)學(xué)報(bào),2008,27(1):26-28.
[12]趙娜,呂成興.基于北斗通信的海洋監(jiān)測數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)設(shè)計(jì)[J]. 中國水運(yùn)月刊,2015,15(11):143-144.
[13]彭偉,徐俊臣,杜玉杰,等.基于北斗系統(tǒng)的海洋環(huán)境監(jiān)測數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J].海洋技術(shù)學(xué)報(bào),2009,28(3):13-15.
[14]鄧玉芬,張博,沈明,等.基于北斗衛(wèi)星的海洋測量數(shù)據(jù)傳輸系統(tǒng)[J].海洋測繪,2009,29(4):67-69.