林映利 李紅輝,2* 張 春,2 閆佳和 王梓博
1(北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院 北京 100044)
2(高速鐵路網(wǎng)絡(luò)管理教育部工程研究中心 北京 100044)
互聯(lián)網(wǎng)+政務(wù)大數(shù)據(jù)來源于多種異構(gòu)信息。一種政務(wù)應(yīng)用場(chǎng)景往往涉及多種不同來源的信息,如在城市外圍或地質(zhì)災(zāi)害多發(fā)地區(qū)布置地質(zhì)災(zāi)害監(jiān)測(cè)傳感器,采集監(jiān)測(cè)數(shù)據(jù)并傳輸?shù)綉?yīng)急指揮中心,從而實(shí)現(xiàn)地質(zhì)災(zāi)害實(shí)時(shí)動(dòng)態(tài)監(jiān)測(cè)和預(yù)警。在信息采集與傳輸?shù)倪^程中,涉及物聯(lián)網(wǎng)多傳感器多協(xié)議間的數(shù)據(jù)傳遞。
信息來源不同,信息傳輸協(xié)議也不同,互聯(lián)網(wǎng)+政務(wù)大數(shù)據(jù)呈現(xiàn)跨領(lǐng)域、多協(xié)議、難融合的特點(diǎn)。在大數(shù)據(jù)采集匯聚過程中,存在多種協(xié)議轉(zhuǎn)換的需求。因此,要求網(wǎng)關(guān)能夠?qū)崿F(xiàn)統(tǒng)一協(xié)議適配轉(zhuǎn)換,為異構(gòu)數(shù)據(jù)關(guān)聯(lián)和數(shù)據(jù)融合提供數(shù)據(jù)支持。
在傳統(tǒng)協(xié)議轉(zhuǎn)換研究方面,宗娜[1]和 Zhou等[2]研究了實(shí)現(xiàn) HTTP 協(xié)議與 CoAP 協(xié)議轉(zhuǎn)換的理論與方法;趙小虎等[3]設(shè)計(jì)了面向煤礦井下的多協(xié)議融合網(wǎng)關(guān),實(shí)現(xiàn)了 CAN、ZigBee 等協(xié)議到以太網(wǎng)協(xié)議的轉(zhuǎn)換。在通用協(xié)議轉(zhuǎn)換研究方面,Saito 等[4]提出一種物聯(lián)網(wǎng)的應(yīng)用協(xié)議轉(zhuǎn)換方法,并制定了轉(zhuǎn)換規(guī)則的語句和語法。
傳統(tǒng)的協(xié)議轉(zhuǎn)換方法通常針對(duì)特定的協(xié)議轉(zhuǎn)換需求設(shè)計(jì)的,對(duì)于新的協(xié)議轉(zhuǎn)換需求,需要重新設(shè)計(jì)新的協(xié)議轉(zhuǎn)換方法。在不同的政務(wù)應(yīng)用場(chǎng)景中,傳統(tǒng)的協(xié)議轉(zhuǎn)換方法并不能靈活滿足多種協(xié)議轉(zhuǎn)換的需求。
知識(shí)圖譜是人工智能領(lǐng)域的重要分支技術(shù),最早由谷歌公司于 2012 年提出。知識(shí)圖譜按應(yīng)用場(chǎng)景可分為通用知識(shí)圖譜和領(lǐng)域知識(shí)圖譜兩大類[5]。其中,領(lǐng)域知識(shí)圖譜以領(lǐng)域?qū)I(yè)知識(shí)為主,不同領(lǐng)域知識(shí)圖譜的構(gòu)建與應(yīng)用已有較多研究成果。在醫(yī)學(xué)領(lǐng)域,張德政等[6]將知識(shí)圖譜應(yīng)用于中醫(yī)知識(shí)領(lǐng)域,構(gòu)建了中醫(yī)核心知識(shí)圖譜;楊帥等[7]針對(duì) COVID-19 構(gòu)建了科學(xué)文獻(xiàn)、中西藥治療等知識(shí)圖譜,實(shí)現(xiàn)了知識(shí)圖譜的融合。在網(wǎng)絡(luò)安全領(lǐng)域,廉龍穎[8]和 Wang 等[9]分別構(gòu)建了網(wǎng)絡(luò)空間安全知識(shí)圖譜和網(wǎng)絡(luò)安全社會(huì)工程領(lǐng)域知識(shí)圖譜,為網(wǎng)絡(luò)安全分析與信息檢索提供了依據(jù)。而在協(xié)議知識(shí)領(lǐng)域,協(xié)議知識(shí)圖譜的相關(guān)研究較少。徐健[10]基于知識(shí)圖譜構(gòu)建了 5G 協(xié)議知識(shí)庫,以解決 5G 協(xié)議知識(shí)面廣、不易高效查詢等問題。以字段為實(shí)體、字段映射關(guān)系為實(shí)體間關(guān)系構(gòu)建知識(shí)圖譜,可以體現(xiàn)協(xié)議轉(zhuǎn)換過程中報(bào)文字段間的映射關(guān)系。但在協(xié)議轉(zhuǎn)換領(lǐng)域,暫無協(xié)議轉(zhuǎn)換相關(guān)知識(shí)圖譜的研究。
本文擬通過研究協(xié)議報(bào)文結(jié)構(gòu)及協(xié)議轉(zhuǎn)換特點(diǎn),提出一種協(xié)議轉(zhuǎn)換知識(shí)圖譜的構(gòu)建方法。通過構(gòu)建圖譜的模式層及數(shù)據(jù)層,建立含有協(xié)議報(bào)文結(jié)構(gòu)和報(bào)文字段映射關(guān)系的協(xié)議轉(zhuǎn)換知識(shí)圖譜。在此基礎(chǔ)上,提出一種基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法,以實(shí)現(xiàn)不同協(xié)議之間的報(bào)文轉(zhuǎn)換,并通過協(xié)議轉(zhuǎn)換應(yīng)用實(shí)例、與已有協(xié)議轉(zhuǎn)換方法的對(duì)比實(shí)驗(yàn),驗(yàn)證本文方法的有效性。
知識(shí)圖譜由知識(shí)及知識(shí)之間的關(guān)系組成[11],其基本組成單位是“實(shí)體-關(guān)系-實(shí)體”三元組及“實(shí)體-屬性-屬性值”實(shí)體與屬性值對(duì)。知識(shí)圖譜能夠?qū)⒉煌N類的信息連接,形成關(guān)系網(wǎng)絡(luò),提供從“關(guān)系”的角度分析問題的條件[12]。
知識(shí)圖譜按應(yīng)用場(chǎng)景可分為通用知識(shí)圖譜(Universal Knowledge Graph,UKG)和領(lǐng)域知識(shí)圖譜(Domain Knowledge Graph,DKG)。UKG 以百科知識(shí)圖譜、常識(shí)知識(shí)圖譜為主。常見的百科知識(shí)圖譜有 DBpedia、YAGO、Freebase、Wikidata 等,常識(shí)知識(shí)圖譜有 Cyc、ConceptNet、NELL 等[13]。DKG 以各領(lǐng)域的專業(yè)知識(shí)為主,典型的應(yīng)用場(chǎng)景有國防、金融、公安、工業(yè)、醫(yī)療等。如在醫(yī)療領(lǐng)域,CPubMed-KG[14]是目前國內(nèi)最大的全開放中文醫(yī)學(xué)知識(shí)圖譜,以疾病為中心的三元組規(guī)模達(dá)到了 390 萬;在網(wǎng)絡(luò)安全分析領(lǐng)域,CyberTwitter[15]是用于發(fā)現(xiàn)和分析 Twitter 的網(wǎng)絡(luò)安全情報(bào),其作為一個(gè)開放情報(bào)來源,以 tweet 的形式分析實(shí)時(shí)信息并進(jìn)行更新,提取關(guān)于各種可能威脅的情報(bào);但在通信協(xié)議領(lǐng)域,協(xié)議相關(guān)知識(shí)圖譜研究和應(yīng)用較少。
知識(shí)圖譜的構(gòu)建技術(shù)包括知識(shí)抽取、知識(shí)融合、知識(shí)加工和知識(shí)更新等。其中,知識(shí)抽取是構(gòu)建知識(shí)圖譜的關(guān)鍵技術(shù)之一,包括實(shí)體識(shí)別、關(guān)系抽取和屬性抽取。目前,在實(shí)體識(shí)別方面,主流方法是基于神經(jīng)網(wǎng)絡(luò)的命名實(shí)體識(shí)別。Li 等[16]提出了基于 BERT-BiLSTM-ATT-CRF 模型的中文命名實(shí)體識(shí)別方法,且性能較好;謝騰等[17]提出了一種基于 BERT-BiLSTM-CRF 模型的中文實(shí)體識(shí)別方法。目前,命名實(shí)體識(shí)別(Named Entity Recognition,NER)常用的模型有BERT-CRF、BiLSTM-CRF 等。
當(dāng)使用不同協(xié)議的設(shè)備進(jìn)行通信和數(shù)據(jù)交換時(shí),需要進(jìn)行協(xié)議轉(zhuǎn)換?,F(xiàn)有的協(xié)議轉(zhuǎn)換方法可分為兩種:具體的協(xié)議轉(zhuǎn)換方法和通用的協(xié)議轉(zhuǎn)換方法。因協(xié)議轉(zhuǎn)換的多樣性與復(fù)雜性,協(xié)議轉(zhuǎn)換研究領(lǐng)域針對(duì)具體的協(xié)議轉(zhuǎn)換方法的研究較多。例如,針對(duì)以太網(wǎng) HTTP/HTTP2 協(xié)議與物聯(lián)網(wǎng) CoAP 協(xié)議間的轉(zhuǎn)換,宗娜[1]與 Zhou 等[2]分別進(jìn)行了相應(yīng)的轉(zhuǎn)換代理和互通特性的研究;為克服物聯(lián)網(wǎng)多協(xié)議領(lǐng)域的差異問題,Zainudin等[18]研究了一種多協(xié)議網(wǎng)關(guān),以實(shí)現(xiàn)物聯(lián)網(wǎng)中CoAP、MQTT 和 Websocket 的多協(xié)議域之間的通信。但上述協(xié)議轉(zhuǎn)換方法都是針對(duì)具體協(xié)議具體轉(zhuǎn)換設(shè)計(jì)的解決方案,適用場(chǎng)景單一,所支持的協(xié)議轉(zhuǎn)換類型和轉(zhuǎn)換方式無法更改[19],程序不可擴(kuò)展、泛化性差,無法滿足政務(wù)大數(shù)據(jù)采集匯聚過程中的靈活需求。
目前,通用的協(xié)議轉(zhuǎn)換方法的研究較少。Saito 等[4]提出一種物聯(lián)網(wǎng)的應(yīng)用協(xié)議轉(zhuǎn)換方法,根據(jù)轉(zhuǎn)換規(guī)則,將協(xié)議報(bào)文轉(zhuǎn)換為 Middle format,從而實(shí)現(xiàn) CoAP、MQTT、XMPP 和SMTP 等物聯(lián)網(wǎng)應(yīng)用層協(xié)議間的互相轉(zhuǎn)換。Saito等提出的基于規(guī)則的協(xié)議轉(zhuǎn)換,將各協(xié)議與Middle format 的映射關(guān)系體現(xiàn)在規(guī)則中,隨著協(xié)議數(shù)量的增加,不同協(xié)議轉(zhuǎn)換為 Middle format的規(guī)則也相應(yīng)增加。
苗力心[19]結(jié)合軟件定義思想,將協(xié)議轉(zhuǎn)換研究重心下移至物理鏈路層,提出了基于通用描述符的協(xié)議轉(zhuǎn)換方法。通過構(gòu)建與所有異構(gòu)協(xié)議存在映射關(guān)系的協(xié)議映射元作為協(xié)議轉(zhuǎn)換的中間級(jí),并存儲(chǔ)協(xié)議關(guān)鍵字段與映射元的映射關(guān)系。該協(xié)議映射元方法需為每個(gè)字段構(gòu)建一個(gè)映射關(guān)系表,當(dāng)系統(tǒng)內(nèi)有n種協(xié)議時(shí),需構(gòu)建k×n個(gè)映射表,其中,k為協(xié)議中關(guān)鍵字段的數(shù)量。
上述通用協(xié)議轉(zhuǎn)換方法將協(xié)議信息轉(zhuǎn)換為中間格式,用規(guī)則文件或映射關(guān)系表存儲(chǔ)不同協(xié)議字段與中間格式的映射關(guān)系,其規(guī)則文件或映射關(guān)系表會(huì)隨著新協(xié)議的加入而增加。而本文提出的基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法,將字段作為實(shí)體,通過實(shí)體間的關(guān)系可直接體現(xiàn)不同協(xié)議字段間的映射關(guān)系,無須將協(xié)議轉(zhuǎn)換為中間格式。協(xié)議間的映射關(guān)系通過知識(shí)圖譜進(jìn)行存儲(chǔ),可在原知識(shí)圖譜的基礎(chǔ)上,增加新的協(xié)議轉(zhuǎn)換映射關(guān)系,從而對(duì)協(xié)議轉(zhuǎn)換知識(shí)圖譜進(jìn)行擴(kuò)展與更新。
本文從 HTTP 與 CoAP 的轉(zhuǎn)換著手,針對(duì)應(yīng)用層協(xié)議的轉(zhuǎn)換進(jìn)行研究。應(yīng)用層協(xié)議報(bào)文一般由頭部字段和可選的數(shù)據(jù)負(fù)載組成。協(xié)議轉(zhuǎn)換是在保證報(bào)文功能不變的情況下,進(jìn)行兩種不同協(xié)議報(bào)文之間字段信息的等價(jià)轉(zhuǎn)換。因此,協(xié)議轉(zhuǎn)換知識(shí)圖譜應(yīng)該以字段為主要實(shí)體,以字段間的關(guān)系體現(xiàn)協(xié)議間的轉(zhuǎn)換映射。
知識(shí)圖譜的邏輯結(jié)構(gòu)由模式層和數(shù)據(jù)層組成。模式層是知識(shí)圖譜的核心層次,其位于數(shù)據(jù)層之上,作為構(gòu)建知識(shí)圖譜的實(shí)體及關(guān)系的知識(shí)框架。數(shù)據(jù)層存儲(chǔ)具體知識(shí),以“實(shí)體-關(guān)系-實(shí)體”三元組及“實(shí)體-屬性-屬性值”實(shí)體與屬性值對(duì)作為知識(shí)的基本表達(dá)方式。
協(xié)議轉(zhuǎn)換所需知識(shí)大多來源于協(xié)議相關(guān)文檔,對(duì)相關(guān)知識(shí)的專業(yè)性和準(zhǔn)確性要求較高。本文采用自頂向下的方式構(gòu)建協(xié)議知識(shí)圖譜。首先,確定協(xié)議本體的設(shè)計(jì)范圍,根據(jù)協(xié)議轉(zhuǎn)換的知識(shí)和經(jīng)驗(yàn)設(shè)計(jì)協(xié)議本體,構(gòu)建知識(shí)圖譜模式層,所構(gòu)建的模式層為知識(shí)圖譜提供了數(shù)據(jù)框架。然后,從數(shù)據(jù)源中提取實(shí)體,根據(jù)數(shù)據(jù)框架確定實(shí)體間關(guān)系,構(gòu)建得到知識(shí)圖譜數(shù)據(jù)層。所構(gòu)建的數(shù)據(jù)層為知識(shí)圖譜的主要組成部分。協(xié)議轉(zhuǎn)換知識(shí)圖譜的構(gòu)建方法如圖 1 所示。
圖1 自頂向下的協(xié)議知識(shí)圖譜構(gòu)建方法Fig. 1 Up-to-down construction method of knowledge graph of protocol
本體側(cè)重于概念及其相互關(guān)系之間的形式化表達(dá),不涉及具體的實(shí)體與屬性。協(xié)議本體架構(gòu)作為協(xié)議知識(shí)圖譜的知識(shí)框架,即協(xié)議知識(shí)圖譜的模式層,規(guī)范了實(shí)體對(duì)象間的關(guān)系。為構(gòu)建知識(shí)圖譜的模式層,需確定協(xié)議本體的設(shè)計(jì)范圍。協(xié)議轉(zhuǎn)換涉及兩個(gè)不同協(xié)議間報(bào)文信息的交換,本體類別層次結(jié)構(gòu)應(yīng)考慮協(xié)議、報(bào)文、字段以及負(fù)載數(shù)據(jù)等概念。
3.2.1 協(xié)議本體類設(shè)計(jì)
基于協(xié)議核心概念,設(shè)計(jì)出 5 個(gè)核心類:Protocol,Message,F(xiàn)ields,Value,Payload Data。核心類還可進(jìn)一步細(xì)化出更多的子類。本體中類的部分層次結(jié)構(gòu)如圖 2 所示。
圖2 本體類別層次Fig. 2 Hierarchy of classes in ontology
Protocol 類用于描述協(xié)議轉(zhuǎn)換知識(shí)圖譜當(dāng)前可支持的協(xié)議;Message 類用于描述協(xié)議擁有的報(bào)文類型,其中報(bào)文類型根據(jù)報(bào)文結(jié)構(gòu)進(jìn)行劃分;Fields 類用于描述報(bào)文中包含的字段,F(xiàn)ields類實(shí)例之間的映射關(guān)系是協(xié)議轉(zhuǎn)換的核心之一;Value 類用于描述字段取值,某些字段可能擁有多個(gè)固定取值。在協(xié)議轉(zhuǎn)換的過程中,Value 類的實(shí)例之間可能存在映射關(guān)系;Payload Data 類用于描述報(bào)文中的負(fù)載數(shù)據(jù)信息。
3.2.2 協(xié)議本體屬性設(shè)計(jì)
本體類的屬性可分為對(duì)象屬性與數(shù)據(jù)屬性。對(duì)象屬性用于描述類與類之間的關(guān)系,本文設(shè)計(jì)了 8 種協(xié)議核心概念之間的關(guān)系,8 種協(xié)議本體的對(duì)象屬性設(shè)計(jì)如表 1 所示。由表 1 可知,協(xié)議本體的對(duì)象屬性需體現(xiàn)兩個(gè)方面:
表1 定義類的對(duì)象屬性Table 1 Defines the object properties of the class
(1)核心概念間的包含關(guān)系。如 Protocol 類與 Message 類之間可建立“has_message”的對(duì)象屬性,表示協(xié)議擁有哪些報(bào)文類型;Message類與 Fields 類之間可建立“has_field”的對(duì)象屬性,表示該報(bào)文與字段的包含關(guān)系。
(2)不同協(xié)議間轉(zhuǎn)換的映射關(guān)系。如 Message類的內(nèi)部可建立“message_mapping” (報(bào)文映射)的對(duì)象屬性,表示不同協(xié)議間報(bào)文的映射關(guān)系;Fields 類的內(nèi)部可建立“direct_mapping”(直接映射)和“indirect_mapping”(間接映射),表示協(xié)議轉(zhuǎn)換時(shí)不同協(xié)議字段間的直接映射、間接映射關(guān)系。
數(shù)據(jù)屬性用于描述類的內(nèi)部屬性,針對(duì) 5個(gè)核心類,本實(shí)驗(yàn)分別設(shè)計(jì)了相應(yīng)的數(shù)據(jù)屬性如表 2 所示。
表2 定義類的數(shù)據(jù)屬性Table 2 Defines the data properties of the class
3.2.3 協(xié)議本體架構(gòu)
通過定義協(xié)議本體類、類的對(duì)象屬性與數(shù)據(jù)屬性,可最終得到協(xié)議本體。協(xié)議本體類與類的對(duì)象屬性組成了協(xié)議本體架構(gòu),如圖 3 所示。將協(xié)議本體架構(gòu)作為協(xié)議知識(shí)圖譜的模式層,規(guī)范了不同類的實(shí)體對(duì)象間的關(guān)系,如Protocol 類的實(shí)例與 Message 類的實(shí)例間可建立“has_message”關(guān)系;Message 類的實(shí)例之間可建立“message_mapping”關(guān)系;Fields 類的實(shí)例之間可建立“direct_mapping”或“indirect_mapping”關(guān)系。
圖3 協(xié)議本體架構(gòu)Fig. 3 Protocol ontology architecture
協(xié)議轉(zhuǎn)換相關(guān)知識(shí)主要來源于協(xié)議標(biāo)準(zhǔn)文檔、協(xié)議轉(zhuǎn)換標(biāo)準(zhǔn)文檔及相關(guān)網(wǎng)頁搜索結(jié)果等。本文構(gòu)建協(xié)議知識(shí)圖譜采用的數(shù)據(jù)屬于半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),部分?jǐn)?shù)據(jù)來源如表 3所示。
表3 數(shù)據(jù)來源Table 3 Data sources
對(duì)于半結(jié)構(gòu)化數(shù)據(jù),采取 Request+Xpath的方式,從 web 頁面中提??;對(duì)于非結(jié)構(gòu)化數(shù)據(jù),利用 label studio 對(duì)數(shù)據(jù)進(jìn)行實(shí)體標(biāo)注,選擇 BiLSTM+CRF 模型進(jìn)行實(shí)體抽取。以 HTTP和 CoAP 協(xié)議為例,實(shí)體抽取的數(shù)據(jù)集如表 4 所示。本文對(duì)相關(guān)數(shù)據(jù)進(jìn)行實(shí)體抽取,最終得到相關(guān)實(shí)體 1 079 個(gè),將提取到的實(shí)體匹配填充到協(xié)議本體中,作為本體實(shí)例。
表4 協(xié)議實(shí)體數(shù)據(jù)集Table 4 The dataset of the protocol entity
由于 Protégé 用于數(shù)據(jù)分析和可視化的功能有限,而 Neo4j 可便捷地檢索、遍歷、導(dǎo)航連接數(shù)據(jù),且 Neo4j CQL 易于閱讀和學(xué)習(xí),因此,本文采用基于圖模型的 Neo4j 數(shù)據(jù)庫作為數(shù)據(jù)存儲(chǔ)層。將提取的實(shí)體及實(shí)體間的關(guān)系等數(shù)據(jù)信息整理成結(jié)構(gòu)化數(shù)據(jù),以三元組的形式存儲(chǔ)在 CSV文件[24]中,并調(diào)用 py2neo 庫將 CSV 文件數(shù)據(jù)存入 Neo4j 數(shù)據(jù)庫中。
以 HTTP 與 CoAP 在協(xié)議轉(zhuǎn)換知識(shí)圖譜中的部分映射關(guān)系為例,圖譜可視化如圖 4 所示,節(jié)點(diǎn)顏色的圖例在圖中左上角。圖 4 展示了HTTP、CoAP 及其部分字段、報(bào)文、值等實(shí)體和實(shí)體間的關(guān)系,如 HTTP 中的“status-code”字段實(shí)體與 CoAP 中的“code”字段實(shí)體存在“indirect_mapping”關(guān)系,“status-code”字段的值“201”與“code”字段的值“2.01”存在“value_mapping”關(guān)系。
圖4 協(xié)議轉(zhuǎn)換知識(shí)圖譜(示例)Fig. 4 Knowledge graph of protocol conversion(example)
如圖 5 所示,基于知識(shí)圖譜的通用協(xié)議轉(zhuǎn)換框架由知識(shí)層和轉(zhuǎn)換層組成。其中,轉(zhuǎn)換層負(fù)責(zé)將接收到的協(xié)議報(bào)文轉(zhuǎn)換成另一種協(xié)議的報(bào)文,包括報(bào)文解析、協(xié)議轉(zhuǎn)換及報(bào)文生成等步驟,該協(xié)議轉(zhuǎn)換過程需要知識(shí)層提供相關(guān)知識(shí),以輔助實(shí)現(xiàn)協(xié)議轉(zhuǎn)換;知識(shí)層由協(xié)議轉(zhuǎn)換知識(shí)圖譜組成,協(xié)議轉(zhuǎn)換知識(shí)圖譜以協(xié)議標(biāo)準(zhǔn)文檔等作為數(shù)據(jù)源,存儲(chǔ)各協(xié)議報(bào)文結(jié)構(gòu)、字段信息和字段間映射規(guī)則等知識(shí),該層負(fù)責(zé)為轉(zhuǎn)換層提供知識(shí)、數(shù)據(jù)支撐。
圖5 基于知識(shí)圖譜的應(yīng)用層協(xié)議轉(zhuǎn)換框架Fig. 5 Application layer protocol conversion model based on knowledge graph
本節(jié)將介紹一種基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法。為方便描述,本文將被轉(zhuǎn)換的報(bào)文稱為原報(bào)文,原報(bào)文對(duì)應(yīng)的協(xié)議稱為原協(xié)議,轉(zhuǎn)換后得到的報(bào)文稱為目標(biāo)報(bào)文,目標(biāo)報(bào)文對(duì)應(yīng)的協(xié)議稱為目標(biāo)協(xié)議。
4.2.1 轉(zhuǎn)換流程設(shè)計(jì)
協(xié)議轉(zhuǎn)換流程如圖 6 所示,接收到原報(bào)文后,首先,通過解析得到含原報(bào)文信息的 JSON數(shù)據(jù);然后,對(duì) JSON 數(shù)據(jù)中的字段進(jìn)行映射,得到對(duì)應(yīng)的目標(biāo)報(bào)文字段以及字段值,對(duì)目標(biāo)報(bào)文剩下的固定字段進(jìn)行缺省值補(bǔ)全,得到含有目標(biāo)報(bào)文信息的 JSON 數(shù)據(jù);最后,根據(jù)含有目標(biāo)報(bào)文信息的 JSON 數(shù)據(jù)生成目標(biāo)報(bào)文并發(fā)送。
圖6 協(xié)議轉(zhuǎn)換流程Fig. 6 Process of protocol conversion
4.2.2 數(shù)據(jù)格式設(shè)計(jì)
在網(wǎng)關(guān)上進(jìn)行協(xié)議轉(zhuǎn)換,網(wǎng)關(guān)接收原報(bào)文后,解析得到原報(bào)文字段值和負(fù)載數(shù)據(jù)(若報(bào)文存在負(fù)載數(shù)據(jù))等原報(bào)文信息,將原報(bào)文信息以JSON 格式進(jìn)行保存。其中,儲(chǔ)存協(xié)議報(bào)文信息的 JSON 數(shù)據(jù)格式由協(xié)議名稱鍵值對(duì)、字段與值的鍵值對(duì)及可選的切分標(biāo)記鍵值對(duì)、負(fù)載數(shù)據(jù)鍵值對(duì)組成,具體內(nèi)容如下:
4.2.3 協(xié)議轉(zhuǎn)換方法設(shè)計(jì)
協(xié)議轉(zhuǎn)換實(shí)現(xiàn)方法的具體步驟如下:
(1)原報(bào)文解析
網(wǎng)關(guān)接收原報(bào)文并對(duì)其進(jìn)行解析,得到原報(bào)文字段值等原報(bào)文信息后,按照規(guī)定的 JSON 格式進(jìn)行保存。
(2)原協(xié)議與目標(biāo)協(xié)議的映射
在協(xié)議轉(zhuǎn)換知識(shí)圖譜中,若原報(bào)文的類型與目標(biāo)報(bào)文的類型存在“message_mapping”關(guān)系,則原報(bào)文與目標(biāo)報(bào)文之間的轉(zhuǎn)換成立,原協(xié)議字段與目標(biāo)協(xié)議字段間可能存在兩種映射:“direct_mapping”與“indirect_mapping”。
對(duì)于原協(xié)議字段與目標(biāo)協(xié)議字段,若存在直接映射關(guān)系,則其原協(xié)議字段值即目標(biāo)協(xié)議字段值,如圖 7 所示;若存在間接映射關(guān)系,則其字段值之間存在“value_mapping”(值映射)關(guān)系,由原協(xié)議字段值可以得到對(duì)應(yīng)的目標(biāo)協(xié)議字段值,如圖 8 所示。
圖7 字段間直接映射關(guān)系Fig. 7 Direct mapping between fields
圖8 字段間間接映射關(guān)系Fig. 8 Indirect mapping between fields
由協(xié)議轉(zhuǎn)換知識(shí)圖譜可知目標(biāo)協(xié)議的最大負(fù)載信息。若原報(bào)文存在負(fù)載,且實(shí)際負(fù)載小于目標(biāo)協(xié)議最大負(fù)載,則原報(bào)文負(fù)載即目標(biāo)協(xié)議報(bào)文負(fù)載。同理,若實(shí)際負(fù)載大于目標(biāo)協(xié)議最大負(fù)載,則按照目標(biāo)協(xié)議最大負(fù)載的大小,將原報(bào)文負(fù)載切割成多段,分別作為目標(biāo)報(bào)文負(fù)載。
從國內(nèi)看,多線多梯級(jí)船閘聯(lián)合調(diào)度管理做得比較好的主要有長江干線和京杭運(yùn)河蘇北段。其中長江干線三峽、葛洲壩船閘(升船機(jī))由長江三峽通航管理局統(tǒng)一管理,按照建立的兩壩通航“統(tǒng)一調(diào)度、聯(lián)合運(yùn)行”調(diào)度體系,采取“一次申報(bào)、統(tǒng)一計(jì)劃、分壩實(shí)施”的調(diào)度程序,對(duì)通過三峽、葛洲壩船閘(升船機(jī))的過往船舶實(shí)現(xiàn)統(tǒng)一的指揮、調(diào)度管理。京杭運(yùn)河蘇北段10個(gè)梯級(jí)、28座船閘是由蘇北航務(wù)管理處統(tǒng)一管理,通過船閘智能運(yùn)行系統(tǒng),實(shí)現(xiàn)智能排檔、優(yōu)化閘次、全線聯(lián)合調(diào)度。水上ETC,“一票通”、“船迅通”APP的運(yùn)用,實(shí)現(xiàn)了船岸信息互通、遠(yuǎn)程報(bào)到、快速繳納過閘費(fèi)、“一次登記、全程服務(wù)、無縫調(diào)度”的過閘服務(wù)。
(3)目標(biāo)報(bào)文生成
根據(jù)協(xié)議轉(zhuǎn)換知識(shí)圖譜中字段間的映射關(guān)系,可以得到目標(biāo)報(bào)文中與原協(xié)議有映射關(guān)系的字段與字段值。但一般情況下,原報(bào)文字段與目標(biāo)報(bào)文字段并非都存在映射關(guān)系,僅通過字段映射得到的目標(biāo)協(xié)議報(bào)文信息并不完整。因此,需在協(xié)議轉(zhuǎn)換知識(shí)圖譜中,查詢?cè)撃繕?biāo)協(xié)議報(bào)文中所有字段屬性為固定字段的字段,檢查目標(biāo)協(xié)議報(bào)文信息中是否包含所有固定字段,若缺少某固定字段,則將其缺省值作為字段值,補(bǔ)充相應(yīng)鍵值對(duì)。由此可以得到含有目標(biāo)報(bào)文信息的 JSON數(shù)據(jù),網(wǎng)關(guān)根據(jù)其攜帶的目標(biāo)協(xié)議報(bào)文信息生成目標(biāo)報(bào)文并發(fā)送。
實(shí)現(xiàn)協(xié)議轉(zhuǎn)換的網(wǎng)關(guān)等同于原協(xié)議服務(wù)器,負(fù)責(zé)接受來自原協(xié)議客戶端的請(qǐng)求,并作為目標(biāo)協(xié)議的客戶端,將請(qǐng)求發(fā)送至目標(biāo)協(xié)議服務(wù)器;或等同于原協(xié)議客戶端,接收原協(xié)議服務(wù)器的響應(yīng),并作為目標(biāo)協(xié)議的服務(wù)器,將響應(yīng)發(fā)送至目標(biāo)協(xié)議客戶端。
以 HTTP 協(xié)議與 CoAP 協(xié)議的轉(zhuǎn)換為例。首先,HTTP 客戶端向網(wǎng)關(guān)發(fā)送 POST 請(qǐng)求,網(wǎng)關(guān)將 HTTP 請(qǐng)求報(bào)文轉(zhuǎn)換為 CoAP 協(xié)議報(bào)文,并發(fā)送給 CoAP 服務(wù)器;然后,CoAP 服務(wù)器向網(wǎng)關(guān)發(fā)送 CoAP 響應(yīng),網(wǎng)關(guān)將 CoAP 協(xié)議報(bào)文轉(zhuǎn)換為HTTP 響應(yīng)報(bào)文,并發(fā)送給 HTTP 客戶端。在上述過程中,CoAP 端均采用 CON 模式進(jìn)行傳輸。HTTP 客戶端通過網(wǎng)關(guān)與 CoAP 服務(wù)器通信的過程如圖 9 所示。
圖9 HTTP 客戶端與 CoAP 服務(wù)器通信過程Fig. 9 Communication between HTTP client and CoAP sever
基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換算法流程圖如圖 10所示。
圖10 基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換算法流程圖Fig. 10 The flow chart of protocol conversion algorithm based on knowledge graph
將 HTTP 請(qǐng)求報(bào)文轉(zhuǎn)換為 CoAP 報(bào)文的過程如下:
(1)HTTP 請(qǐng)求報(bào)文解析
從 HTTP 客戶端接收?qǐng)?bào)文后,解析得到由協(xié)議類型的鍵值對(duì)、字段名與字段值的鍵值對(duì)和負(fù)載鍵值對(duì)組成的 HTTP 請(qǐng)求報(bào)文信息的 src.json。HTTP 請(qǐng)求報(bào)文示例與解析結(jié)果如圖 11 所示。
圖11 HTTP 請(qǐng)求報(bào)文與解析結(jié)果Fig. 11 HTTP request message and parsing result
(2)HTTP 到 CoAP 的映射
分別查詢?cè)?HTTP 請(qǐng)求報(bào)文中的字段與目標(biāo)協(xié)議 CoAP 的字段,是否存在直接映射或者間接映射的關(guān)系。例如,Content-Type 字段與 Content-Format 選項(xiàng)存在間接映射關(guān)系,Content-Type 字段的值為“text/plain”,值映射后得到 Content-Format 選項(xiàng)的值為“text/plain;charset=utf-8”。由協(xié)議轉(zhuǎn)換知識(shí)圖譜可知CoAP 的最大負(fù)載信息,若 HTTP 請(qǐng)求報(bào)文負(fù)載小于 CoAP 的最大負(fù)載,則 HTTP 請(qǐng)求報(bào)文負(fù)載即為 CoAP 報(bào)文負(fù)載;若 HTTP 請(qǐng)求報(bào)文負(fù)載大于 CoAP 的最大負(fù)載,則將原負(fù)載內(nèi)容按 CoAP最大負(fù)載的大小切割成多段,分別作為 CoAP報(bào)文負(fù)載。HTTP 到 CoAP 的映射結(jié)果如圖 12所示。
圖12 HTTP 到 CoAP 的映射結(jié)果Fig. 12 Mapping result of HTTP to CoAP
(3)CoAP 報(bào)文生成
查詢?cè)?CoAP 報(bào)文中所有字段屬性為固定字段的字段。若缺少某固定字段,則將其缺省值作為字段值,補(bǔ)充相應(yīng)鍵值對(duì),得到含有 CoAP 協(xié)議報(bào)文信息的 dst.json。如轉(zhuǎn)換后的中間結(jié)果缺少 CoAP 的 Ver 字段,其缺省值為 1,補(bǔ)全后得到協(xié)議轉(zhuǎn)換結(jié)果如圖 13 所示。根據(jù)解析 dst.json得到的 CoAP 報(bào)文信息,生成 CoAP 報(bào)文并發(fā)送給 CoAP 服務(wù)器。
圖13 協(xié)議轉(zhuǎn)換結(jié)果Fig. 13 Protocol conversion result
5.3.1 實(shí)驗(yàn)環(huán)境
通過分析 HTTP 與 CoAP 協(xié)議轉(zhuǎn)換執(zhí)行時(shí)間與內(nèi)存占用,對(duì)本文方法進(jìn)行性能評(píng)估,實(shí)驗(yàn)環(huán)境如表 5 所示。
表5 實(shí)驗(yàn)環(huán)境Table 5 Experimental environment
5.3.2 實(shí)驗(yàn)過程設(shè)計(jì)
從接收 HTTP 客戶端請(qǐng)求到返回請(qǐng)求響應(yīng)為一個(gè)協(xié)議轉(zhuǎn)換周期。HTTP 客戶端分別執(zhí)行 100次 PUT、GET、POST 請(qǐng)求,統(tǒng)計(jì)實(shí)驗(yàn)過程中周期平均執(zhí)行時(shí)間、最大執(zhí)行時(shí)間、最小執(zhí)行時(shí)間,并統(tǒng)計(jì)每個(gè)周期中 HTTP 請(qǐng)求轉(zhuǎn)換為 CoAP請(qǐng)求和 CoAP 響應(yīng)轉(zhuǎn)換為 HTTP 響應(yīng)的平均執(zhí)行時(shí)間、最大執(zhí)行時(shí)間、最小執(zhí)行時(shí)間。執(zhí)行時(shí)間通過 Wireshark 抓取到的每個(gè)周期 HTTP、CoAP協(xié)議的請(qǐng)求報(bào)文和相應(yīng)響應(yīng)報(bào)文時(shí)間之間的差值進(jìn)行計(jì)算。
通過使用 python 第三方庫 memory_profiler,監(jiān)控 HTTP 客戶端連續(xù)發(fā)送 PUT 請(qǐng)求時(shí)轉(zhuǎn)換程序的內(nèi)存占用情況。由 memory_profiler 生成內(nèi)存占用隨時(shí)間變化的曲線圖,可直觀地觀測(cè)到協(xié)議轉(zhuǎn)換程序的內(nèi)存占用情況。
5.3.3 實(shí)驗(yàn)結(jié)果及分析
(1)執(zhí)行時(shí)間
協(xié)議轉(zhuǎn)換執(zhí)行時(shí)間的統(tǒng)計(jì)結(jié)果如表 6 所示,協(xié)議轉(zhuǎn)換周期的平均執(zhí)行時(shí)間約 32 ms,最小執(zhí)行時(shí)間約 17 ms,最大執(zhí)行時(shí)間<48 ms;HTTP 請(qǐng)求轉(zhuǎn)換為 CoAP 請(qǐng)求的平均執(zhí)行時(shí)間<6 ms,最小執(zhí)行時(shí)間約 4 ms,最大執(zhí)行時(shí)間<20 ms;CoAP響應(yīng)轉(zhuǎn)換 HTTP 響應(yīng)的平均執(zhí)行時(shí)間約 27 ms,最小執(zhí)行時(shí)間約 12 ms,最大執(zhí)行時(shí)間<33 ms。
表6 協(xié)議轉(zhuǎn)換平均、最大、最小執(zhí)行時(shí)間Table 6 Average, maximum, minimum execution time of protocol conversion
宗娜[1]給出了 HTTP 與 CoAP 轉(zhuǎn)換代理實(shí)現(xiàn)100 次 GET、POST 請(qǐng)求的平均執(zhí)行時(shí)間,其與本方法實(shí)現(xiàn) HTTP 與 CoAP 協(xié)議轉(zhuǎn)換周期的平均執(zhí)行時(shí)間的對(duì)比如表 7 所示。由表 7 可知,本方法所實(shí)現(xiàn)的 HTTP 與 CoAP 的協(xié)議轉(zhuǎn)換用時(shí)更少,轉(zhuǎn)換效率更高。84.59%,HTTP 請(qǐng)求轉(zhuǎn)換為 CoAP 請(qǐng)求的平均執(zhí)行時(shí)間占總轉(zhuǎn)換執(zhí)行時(shí)間的 17.02%、15.12%、15.41%。CoAP 響應(yīng)轉(zhuǎn)換為 HTTP 響應(yīng)的過程中,調(diào)用 HTTP 相關(guān)外部庫進(jìn)行報(bào)文的發(fā)送,占用了大量時(shí)間,導(dǎo)致 CoAP 響應(yīng)轉(zhuǎn)換 HTTP 響應(yīng)的平均執(zhí)行時(shí)間占比較高。
表7 平均執(zhí)行時(shí)間對(duì)比Table 7 Comparison of average execution time
圖14 請(qǐng)求與響應(yīng)的平均執(zhí)行時(shí)間占比Fig. 14 Proportion of average execution time of requests and responses
(2)內(nèi)存占用情況
協(xié)議轉(zhuǎn)換程序執(zhí)行過程中內(nèi)存占用變化情況如圖 15 所示。由圖 15 可知,程序開始執(zhí)行時(shí),內(nèi)存占用首先上升至 80 MiB 左右,隨著請(qǐng)求次數(shù)的增加,內(nèi)存占用最終保持在 90 MiB 左右,占系統(tǒng)總運(yùn)行內(nèi)存的 0.55%。由此可知,運(yùn)行協(xié)議轉(zhuǎn)換程序?qū)τ谙到y(tǒng)內(nèi)存的占用不高,系統(tǒng)性能良好。
圖15 協(xié)議轉(zhuǎn)換程序內(nèi)存占用情況Fig. 15 Memory usage of protocol conversion
互聯(lián)網(wǎng)+政務(wù)大數(shù)據(jù)來源于多種異構(gòu)信息,具有跨領(lǐng)域、多協(xié)議、難融合的特點(diǎn)。在大數(shù)據(jù)采集匯聚的過程中,存在多種協(xié)議轉(zhuǎn)換需求,需要網(wǎng)關(guān)實(shí)現(xiàn)統(tǒng)一的協(xié)議適配轉(zhuǎn)換。本文提出了一種協(xié)議轉(zhuǎn)換知識(shí)圖譜的構(gòu)建方法,建立含有協(xié)議報(bào)文結(jié)構(gòu)和報(bào)文字段映射關(guān)系的協(xié)議轉(zhuǎn)換知識(shí)圖譜。并在此基礎(chǔ)上,提出了一種基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法,以實(shí)現(xiàn)不同協(xié)議之間的報(bào)文轉(zhuǎn)換。
在協(xié)議轉(zhuǎn)換研究領(lǐng)域,基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換是一個(gè)較新的研究方向。將知識(shí)圖譜、協(xié)議轉(zhuǎn)換等作為關(guān)鍵詞,在 CNKI、Google Scholar、IEEE 等數(shù)據(jù)庫中進(jìn)行搜索,發(fā)現(xiàn)國內(nèi)外暫無類似研究成果和參考文獻(xiàn)。
本文對(duì)協(xié)議的結(jié)構(gòu)層級(jí)進(jìn)行研究與分析,依據(jù)含義將其劃分為 5 類核心概念:Protocol、Message、Fields、Value 和 Payload Data,并依此設(shè)計(jì)了協(xié)議本體。本文提出的基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法,可在已有的協(xié)議轉(zhuǎn)換知識(shí)圖譜的基礎(chǔ)上,增加新協(xié)議的報(bào)文字段信息與新的協(xié)議轉(zhuǎn)換映射關(guān)系,對(duì)協(xié)議轉(zhuǎn)換知識(shí)圖譜進(jìn)行擴(kuò)展與更新,具有良好的泛用性和可擴(kuò)展性,能夠靈活適應(yīng)多種應(yīng)用層協(xié)議轉(zhuǎn)換需求。在協(xié)議轉(zhuǎn)換執(zhí)行時(shí)間與內(nèi)存占用方面,將本文提出的方法與現(xiàn)有案例方法進(jìn)行性能測(cè)試與評(píng)估分析,驗(yàn)證了本文方法的有效性。但本文仍存在以下不足:(1)解析與生成報(bào)文受到具體程序?qū)崿F(xiàn)的限制;(2)缺少對(duì)應(yīng)的成熟數(shù)據(jù)集,圖譜構(gòu)建較為困難。
本文創(chuàng)新性地提出了一種協(xié)議轉(zhuǎn)換知識(shí)圖譜的構(gòu)建方法和一種基于知識(shí)圖譜的協(xié)議轉(zhuǎn)換方法。這些方法基于 HTTP、CoAP 協(xié)議轉(zhuǎn)換,可能存在一定的局限性,未來將研究更多的應(yīng)用層協(xié)議的報(bào)文結(jié)構(gòu)與映射關(guān)系,以完善協(xié)議轉(zhuǎn)換知識(shí)圖譜,并對(duì)利用協(xié)議轉(zhuǎn)換知識(shí)圖譜解析和生成應(yīng)用層協(xié)議報(bào)文開展相關(guān)研究。