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