劉曉鋒,崔宗星,米喬,馬隆,鄭婷
(中國(guó)電子科技集團(tuán)公司第20研究所,西安 710068)
隨著天基信息技術(shù)的迅猛發(fā)展,天基網(wǎng)絡(luò)復(fù)雜度呈快速增長(zhǎng)趨勢(shì),迫切需要提升天基網(wǎng)絡(luò)監(jiān)視能力,能夠?qū)Τ笠?guī)模網(wǎng)絡(luò)節(jié)點(diǎn)和信息要素的全狀態(tài)綜合監(jiān)視,為用戶快速做出干預(yù)決策提供信息支持。天基網(wǎng)絡(luò)監(jiān)視是集信息獲取、存儲(chǔ)與處理等功能為一體,在其內(nèi)部有大容量網(wǎng)絡(luò)信息實(shí)時(shí)交互,因此需設(shè)計(jì)高效、輕量化的傳輸協(xié)議。MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)是一種輕量級(jí)基于代理的發(fā)布/訂閱的消息傳輸協(xié)議,其設(shè)計(jì)思想是開(kāi)放、簡(jiǎn)單、易于實(shí)現(xiàn)、適合在計(jì)算和處理能力受限的環(huán)境下工作[1]。本文在研究分析MQTT協(xié)議的基礎(chǔ)上,結(jié)合天基網(wǎng)絡(luò)監(jiān)視系統(tǒng)的部署需求,完成天基網(wǎng)絡(luò)監(jiān)視服務(wù)系統(tǒng)的設(shè)計(jì)與工程研制,總結(jié)并提出完整的設(shè)計(jì)方案,具有一定的學(xué)習(xí)參考意義。
天基網(wǎng)絡(luò)監(jiān)視系統(tǒng)結(jié)構(gòu)示意圖如圖1所示。系統(tǒng)采用C/S技術(shù)架構(gòu),實(shí)現(xiàn)應(yīng)用與數(shù)據(jù)服務(wù)的分類(lèi),提高系統(tǒng)的維護(hù)性和安全性,同時(shí)具備兼容多種通信協(xié)議的能力。全網(wǎng)數(shù)據(jù)服務(wù)中心服務(wù)器是搜集、匯總、分析存儲(chǔ)整個(gè)天基網(wǎng)絡(luò)數(shù)據(jù)的中樞,可以保證數(shù)據(jù)的安全可靠運(yùn)行。天基網(wǎng)絡(luò)監(jiān)視服務(wù)設(shè)備實(shí)現(xiàn)數(shù)據(jù)的訂閱/發(fā)布、協(xié)議轉(zhuǎn)換、數(shù)據(jù)處理及服務(wù)質(zhì)量控制等功能,能夠?yàn)樘旎W(wǎng)絡(luò)監(jiān)視席位提供應(yīng)用支撐服務(wù)。天基網(wǎng)絡(luò)監(jiān)視席位或應(yīng)用實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)、鏈路狀態(tài)、拓?fù)潢P(guān)系等信息可視化展示。天基網(wǎng)絡(luò)監(jiān)視服務(wù)與數(shù)據(jù)中心服務(wù)器采用發(fā)布/訂閱的MQTT(遙測(cè)遠(yuǎn)程)協(xié)議。利用UDP協(xié)議實(shí)現(xiàn)天基網(wǎng)絡(luò)監(jiān)視席位與服務(wù)之間通信。天基網(wǎng)絡(luò)服務(wù)與本地監(jiān)視應(yīng)用構(gòu)成服務(wù)監(jiān)視系統(tǒng),具備本地化監(jiān)視的能力,兩者信息交互依靠線程任務(wù)通信的方式。本文主要介紹天基網(wǎng)絡(luò)監(jiān)視服務(wù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。
圖1 天基網(wǎng)絡(luò)監(jiān)視系統(tǒng)結(jié)構(gòu)框圖
MQTT是基于TCP上的應(yīng)用層協(xié)議,采用發(fā)布/訂閱模式對(duì)消息進(jìn)行傳輸,本節(jié)將從MQTT消息格式、消息訂閱及具體實(shí)現(xiàn)三方面展開(kāi)設(shè)計(jì)。
MQTT消息體主要由消息報(bào)頭和消息內(nèi)容兩部分組成,固定報(bào)頭是每個(gè)命令消息都必須包含的部分,其中長(zhǎng)度為兩個(gè)字節(jié),固定格式如表1所述。其中Mes?sage Type為報(bào)文類(lèi)型,共計(jì)14種。QoS Level服務(wù)質(zhì)量等級(jí)分為三個(gè)等級(jí),等級(jí)越高,需要的系統(tǒng)開(kāi)銷(xiāo)越多,通信效率受影響越大[2]。Remaining Length剩余長(zhǎng)度指可變頭部和有效信息的總長(zhǎng)度,最大能夠擴(kuò)展到4字節(jié),可表示長(zhǎng)度為256MB。
表1 MQTT消息固定頭格式
在本文所設(shè)計(jì)的天基網(wǎng)絡(luò)監(jiān)視系統(tǒng)中,天基網(wǎng)絡(luò)監(jiān)視服務(wù)從全網(wǎng)數(shù)據(jù)中心服務(wù)器訂閱消息的主要過(guò)程包括以下三個(gè)步驟:
(1)天基網(wǎng)絡(luò)監(jiān)視服務(wù)與數(shù)據(jù)中心建立TCP連接,并向數(shù)據(jù)中心發(fā)送CONNECT消息;
(2)天基網(wǎng)絡(luò)監(jiān)視服務(wù)接收到數(shù)據(jù)中心發(fā)送的CONNACK消息后,發(fā)送訂閱有關(guān)Topic主題;
(3)天基網(wǎng)絡(luò)監(jiān)視服務(wù)接收到數(shù)據(jù)中心向其發(fā)送SUBACK消息,表明訂閱成功。
結(jié)合MQTT消息訂閱主要步驟中,總結(jié)出MQTT消息訂閱處理流程,見(jiàn)圖2所示。
以天基網(wǎng)絡(luò)監(jiān)視服務(wù)MQTT消息訂閱機(jī)制設(shè)計(jì)實(shí)現(xiàn)為例程,介紹基于Vxworks的具體開(kāi)發(fā)過(guò)程。首先,將IBM提供的MQTT-3.1.1開(kāi)源代碼封裝成lib庫(kù),從而可以提供MQTT發(fā)布/訂閱的API接口函數(shù)。其次,創(chuàng)建接收MQTT訂閱消息的應(yīng)用線程,開(kāi)發(fā)應(yīng)用功能程序,具體實(shí)現(xiàn)步驟如下:
(1)訂閱主題初始化
MQTT連接參數(shù)MQTTPacket_connectData中心跳包間隔設(shè)置為500,重新連接清除標(biāo)志置為1;訂閱主題為“SATNET”;可根據(jù)不同的Topic主題,設(shè)置差異化的服務(wù)質(zhì)量[3]。
最多一次:消息可能丟失或重復(fù);
至少一次:確保消息可達(dá),但消息可能會(huì)重復(fù);
僅一次:消息到達(dá)一次,消息重復(fù)或丟失導(dǎo)致不正確的結(jié)果。
圖2 MQTT消息訂閱流程
(2)建立連接
首先初始化網(wǎng)絡(luò)配置調(diào)用transport_open()函數(shù),然后調(diào)用接口函數(shù)MQTTSerialize_Connect()及發(fā)送函數(shù)transport_sendPackBuff()。
(3)接收連接應(yīng)答消息并發(fā)送訂閱主題
執(zhí)行MQTTPacket_read()函數(shù),查看返回值是否等于2(CONACK),若返回值為2表示建立連接成功,調(diào)用函數(shù)transport_sendPackBuff()發(fā)送訂閱主題“SAT?NET”。
(4)接收訂閱主題應(yīng)答消息
當(dāng)函數(shù) MQTTPacket_read()返回值等于 9(SUB?ACK)時(shí),表明訂閱成功;否則表示訂閱不成功。
(5)訂閱主題消息
運(yùn)行MQTT消息接收線程,若消息讀取函數(shù)MQTT?Packet_read()返回值為 3(PUBLISH)時(shí),表明為消息類(lèi)型為主題消息,接著調(diào)用MQTT訂閱消息獲取函數(shù)MQTTDeserialize_publish(),完成消息內(nèi)容的讀取。
天基網(wǎng)絡(luò)監(jiān)視服務(wù)與數(shù)據(jù)中心交換的數(shù)據(jù)格式采用 JSON(JavaScript Object Notation)格式。JSON作為一種輕量級(jí)的數(shù)據(jù)傳輸格式,可以在多種語(yǔ)言之間進(jìn)行數(shù)據(jù)交換[4]。采用這種數(shù)據(jù)格式有利于提高封裝傳輸效率,減少通信帶寬,有利于多個(gè)監(jiān)控席位接入訪問(wèn)。
在Json數(shù)據(jù)格式中,一個(gè)對(duì)象用JSON數(shù)據(jù)格式表示如下:
{屬性名1:屬性值,屬性名2:屬性值2...}
作者簡(jiǎn)介:馮榮惠,男,漢族,福建省南靖縣山城鎮(zhèn)文技校,一級(jí)教師,南靖縣優(yōu)秀教師,專(zhuān)科學(xué)歷,研究方向:小學(xué)語(yǔ)文教育。
說(shuō)明:屬性名必須有引號(hào)(單引號(hào),或者雙引號(hào))引起來(lái)。屬性值如果是字符串,則必須使用引號(hào)引起來(lái)。屬性值的類(lèi)型可以是string,number,Boolean等類(lèi)型。
例如在天基網(wǎng)絡(luò)監(jiān)視某個(gè)網(wǎng)絡(luò)狀態(tài)數(shù)據(jù)用Json格式表示如下:
{"PlatformID":1000,"SubnetID",1,"NetStatues",1,"CommMode",2,"CurTime","2018-1-1 10:10:40"}。上述數(shù)據(jù)內(nèi)容表示在2018年1月1日10點(diǎn)10分40秒時(shí),編識(shí)號(hào)為1000的成員為在網(wǎng)狀態(tài)(用1表示),其所在的子網(wǎng)號(hào)為1,物理通信體制為T(mén)DMA的方式。
采用JSON數(shù)據(jù)解析的第三庫(kù)完成服務(wù)器推送的數(shù)據(jù)內(nèi)容解析,即將JSON格式數(shù)據(jù)內(nèi)容轉(zhuǎn)換為結(jié)構(gòu)體。數(shù)據(jù)類(lèi)型主要包括整型和字符型。主要實(shí)現(xiàn)步驟如下:
(1)JSON數(shù)據(jù)格式解析
運(yùn)行函數(shù) cJSON_Parse(strData),strData為字符指針,指向MQTT訂閱的主題消息存儲(chǔ)區(qū),返回值為cJson類(lèi)型的指針pJsonData。
(2)數(shù)據(jù)格式轉(zhuǎn)換為結(jié)構(gòu)體
依據(jù)網(wǎng)絡(luò)狀態(tài)的信息內(nèi)容定義數(shù)據(jù)結(jié)構(gòu)體NetSat?usInfo,具體內(nèi)容見(jiàn)表2。
表2 網(wǎng)絡(luò)狀態(tài)數(shù)據(jù)結(jié)構(gòu)體格式
調(diào)用 GetObjectItem(strData,"PlatformID")函數(shù),返回cJson數(shù)據(jù)類(lèi)型的指針pJsonPlatformID,接著依據(jù)結(jié)構(gòu)體中的數(shù)據(jù)類(lèi)型調(diào)用轉(zhuǎn)換函數(shù)valueint可得到Net?SatusInfo中編識(shí)號(hào)數(shù)據(jù)項(xiàng)值,其他數(shù)據(jù)內(nèi)容轉(zhuǎn)換方式如上所述。
考慮本地和遠(yuǎn)端服務(wù)一體化設(shè)計(jì),需對(duì)監(jiān)視服務(wù)與應(yīng)用之間進(jìn)行統(tǒng)一數(shù)據(jù)格式接口設(shè)計(jì)。具體接口協(xié)議見(jiàn)表3。
表3 網(wǎng)絡(luò)監(jiān)視服務(wù)與應(yīng)用之間接口
在表3中,消息內(nèi)容是指網(wǎng)絡(luò)狀態(tài)信息編碼后的字節(jié),采用大端編碼方式。
在Qt軟件開(kāi)發(fā)環(huán)境下對(duì)本地天基網(wǎng)絡(luò)監(jiān)視應(yīng)用功能開(kāi)發(fā),并利用WindRiver交叉編譯環(huán)境生成可執(zhí)行程序,加載在信息處理板上。系統(tǒng)運(yùn)行時(shí)調(diào)用網(wǎng)絡(luò)監(jiān)視應(yīng)用進(jìn)程,把它作為整個(gè)監(jiān)視服務(wù)的一個(gè)任務(wù)。界面設(shè)計(jì)原則是基于圖標(biāo)方式顯示網(wǎng)絡(luò)監(jiān)視信息。
本地天基網(wǎng)絡(luò)監(jiān)視應(yīng)用與服務(wù)運(yùn)行在同一塊信息處理板卡上,兩者之間采用基于消息隊(duì)列的任務(wù)通信的方式。通過(guò)調(diào)用msgQReceive函數(shù)實(shí)現(xiàn)任務(wù)間數(shù)據(jù)的接收;執(zhí)行msgQSend函數(shù)能夠完成任務(wù)間消息的發(fā)送。
本文所提出的系統(tǒng)架構(gòu)及設(shè)計(jì)方法已應(yīng)用在某型系統(tǒng)中,解決了分布式網(wǎng)絡(luò)監(jiān)視系統(tǒng)通信機(jī)制的問(wèn)題,采用發(fā)布/訂閱MQTT協(xié)議、基于消息隊(duì)列的任務(wù)通信等技術(shù)手段,按照服務(wù)接口統(tǒng)一的設(shè)計(jì)原則,完成天基網(wǎng)絡(luò)監(jiān)視服務(wù)的設(shè)計(jì),能夠?yàn)樘旎W(wǎng)絡(luò)監(jiān)視席位提供應(yīng)用服務(wù),滿足多維度信息監(jiān)視的需求。此外,天基網(wǎng)絡(luò)監(jiān)視服務(wù)的系統(tǒng)架構(gòu)具有穩(wěn)定性和可擴(kuò)展性等特點(diǎn),有利于加裝推廣應(yīng)用。
[1]IBM.MQTelemetryTransport[2013-06-05].http://msqq.org.
[2]關(guān)慶余,李鴻彬,于波.MQTT協(xié)議在Android平臺(tái)上的研究與應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(4):197-200.
[3]任亨.基于 MQTT 協(xié)議的消息推送服務(wù)器[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2014,23(3):77-82.
[4]高靜,段會(huì)川.JSON 數(shù)據(jù)傳輸效率研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):2267-2270.