中國(guó)船舶重工集團(tuán)公司第七一○研究所 朱玲羚
?
基于嵌入式系統(tǒng)的心跳檢測(cè)技術(shù)研究
中國(guó)船舶重工集團(tuán)公司第七一○研究所 朱玲羚
【摘要】介紹了一種基于嵌入式的心跳檢測(cè)系統(tǒng),主要由兩部分組成,基于ARM的Linux操作環(huán)境和Windows開(kāi)發(fā)環(huán)境。該系統(tǒng)遵循TCP/UDP協(xié)議,通過(guò)在Linux和Windows環(huán)境下分別搭建服務(wù)器和客戶端,實(shí)現(xiàn)對(duì)系統(tǒng)的資源管理。該系統(tǒng)具有高可用性及較強(qiáng)的推廣應(yīng)用價(jià)值。
【關(guān)鍵詞】心跳檢測(cè);嵌入式;網(wǎng)絡(luò)通信
隨著電子信息工程及網(wǎng)絡(luò)技術(shù)的發(fā)展,遠(yuǎn)程控制與檢測(cè)技術(shù)也隨之被運(yùn)用于不同領(lǐng)域。在無(wú)法確保網(wǎng)絡(luò)的可靠性前提下,需要通過(guò)軟件的方法進(jìn)行網(wǎng)絡(luò)通信狀態(tài)的檢測(cè)和判斷,心跳包機(jī)制就是在這種背景下產(chǎn)生的。心跳包機(jī)制實(shí)際就是一個(gè)自定義協(xié)議的、特定的、循環(huán)發(fā)送的數(shù)據(jù)包,主要用于判斷網(wǎng)絡(luò)節(jié)點(diǎn)是否還在鏈接[1]。目前這種方法已經(jīng)廣泛應(yīng)用于網(wǎng)絡(luò)通信服務(wù)、網(wǎng)絡(luò)平臺(tái)的故障檢測(cè)等相關(guān)領(lǐng)域。
在工程應(yīng)用中,心跳檢測(cè)系統(tǒng)能對(duì)集群系統(tǒng)進(jìn)行管理和檢測(cè),通過(guò)高可用性設(shè)計(jì)減少系統(tǒng)的出錯(cuò)概率,并在系統(tǒng)出現(xiàn)故障時(shí)及時(shí)響應(yīng),結(jié)合具體情況設(shè)計(jì)應(yīng)急處理方案實(shí)現(xiàn)系統(tǒng)恢復(fù)或替代。以保障關(guān)鍵數(shù)據(jù)和業(yè)務(wù)系統(tǒng)的運(yùn)行穩(wěn)定性和可持續(xù)訪問(wèn)性。
心跳檢測(cè)機(jī)制是檢測(cè)系統(tǒng)中各個(gè)節(jié)點(diǎn)是否正常運(yùn)行的有效機(jī)制,通過(guò)心跳機(jī)制可以檢測(cè)在任一時(shí)間內(nèi)是否有節(jié)點(diǎn)發(fā)生故障,并確定哪些節(jié)點(diǎn)發(fā)生故障。當(dāng)前比較流行的心跳網(wǎng)絡(luò)有兩種方式,第一種為串行心跳線方式,它采用串行心跳線,直接進(jìn)行心跳包的點(diǎn)對(duì)點(diǎn)傳輸。另一種心跳網(wǎng)絡(luò)為以太網(wǎng)方式,此種方式的心跳包在以太網(wǎng)的基礎(chǔ)上進(jìn)行傳輸[2]。本設(shè)計(jì)心跳包的傳輸量并不是很大,且以太網(wǎng)方式價(jià)格比較低廉,易于在實(shí)際環(huán)境中進(jìn)行推廣,故采用以太網(wǎng)方式來(lái)實(shí)現(xiàn)。
具體實(shí)現(xiàn)方法為:系統(tǒng)通過(guò)心跳網(wǎng)絡(luò)進(jìn)行周期性的信息發(fā)送,即節(jié)點(diǎn)周期性服務(wù)器發(fā)送心跳包,表明當(dāng)前系統(tǒng)狀態(tài),心跳包中可包括節(jié)點(diǎn)名稱、節(jié)點(diǎn)IP、附加信息及節(jié)點(diǎn)傳感器采集到的數(shù)據(jù),例如溫度、濕度等。若服務(wù)器沒(méi)有在規(guī)定的時(shí)間段內(nèi)收到某個(gè)節(jié)點(diǎn)的心跳包,則可判斷此節(jié)點(diǎn)出現(xiàn)系統(tǒng)故障。客戶端可在不同地點(diǎn)訪問(wèn)系統(tǒng)信息。
本文利用ARM的豐富資源搭建Linux系統(tǒng)。在心跳檢測(cè)實(shí)現(xiàn)過(guò)程中,主要使用基于TCP/IP協(xié)議棧Socket編程,多進(jìn)程與進(jìn)程間通信,多線程與線程間通信等技術(shù)。
2.1 系統(tǒng)框圖與機(jī)制
本系統(tǒng)是基于TCP網(wǎng)絡(luò)通信模式,在這種模式下,一般有兩種架構(gòu)可供選擇:C/S和B/S架構(gòu)。由于本文選用C/S架構(gòu)的Socket服務(wù)器端,設(shè)計(jì)了單服務(wù)器-多客戶端模型。如圖1所示。
在本系統(tǒng)框圖中,服務(wù)器的主要功能如下:
1)檢測(cè)連接本服務(wù)器的節(jié)點(diǎn),接收獲得的數(shù)據(jù)報(bào)文,包括該節(jié)點(diǎn)的類型,是Linux操作系統(tǒng)還是Windows操作系統(tǒng)或其他。
2)分析節(jié)點(diǎn)發(fā)來(lái)的數(shù)據(jù),包括對(duì)該報(bào)文的類型識(shí)別,解密處理和校驗(yàn)處理,并顯示該節(jié)點(diǎn)的配置信息及附加數(shù)據(jù)。
圖1 系統(tǒng)框圖
客戶端的主要功能如下:
1)登陸訪問(wèn)服務(wù)器,可在不同地點(diǎn)的嵌入式設(shè)備上登陸訪問(wèn),檢測(cè)服務(wù)器工作狀態(tài)。
2)獲取服務(wù)器上的節(jié)點(diǎn)數(shù)據(jù),了解節(jié)點(diǎn)設(shè)備的運(yùn)行情況。
節(jié)點(diǎn)的主要功能如下:
1)獲取本節(jié)點(diǎn)的配置數(shù)據(jù)和附加數(shù)據(jù),包括本節(jié)點(diǎn)的主機(jī)名和IP地址、心跳包數(shù)據(jù)、傳感器數(shù)據(jù)等。
2)通過(guò)Socket向服務(wù)器IP發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)包信息,證節(jié)點(diǎn)的數(shù)據(jù)傳輸安全可靠,與服務(wù)器采用相同的加解密算法和校驗(yàn)算法。
2.2 服務(wù)器設(shè)計(jì)
由以上設(shè)計(jì)模式,本服務(wù)器是基于Win32環(huán)境下的MFC進(jìn)行開(kāi)發(fā),使用Windows提供的Socket結(jié)構(gòu)建立網(wǎng)絡(luò)通信。Socket套接字來(lái)源于Unix系統(tǒng),可以認(rèn)為是一種特殊的I/O接口,還可以當(dāng)作一種文件描述符,常用于進(jìn)程間通信。通過(guò)Socket套接字不僅能實(shí)現(xiàn)本地計(jì)算機(jī)上進(jìn)程之間的通信,使用網(wǎng)絡(luò)之后,還能夠和遠(yuǎn)端不同計(jì)算機(jī)上的進(jìn)程進(jìn)行通信。
1)設(shè)計(jì)流程
首先,服務(wù)器使用Socket前需要設(shè)置Socket的配置參數(shù),這些配置參數(shù)主要包括Socket的版本和本地地址信息。成功配置好Socket參數(shù)后,服務(wù)器端即開(kāi)始等待監(jiān)聽(tīng)。
2)數(shù)據(jù)處理
服務(wù)器每次接收完一次數(shù)據(jù)后,需要對(duì)該數(shù)據(jù)進(jìn)行分析。為了數(shù)據(jù)傳輸?shù)陌踩院屯暾?,本設(shè)計(jì)使用嵌套數(shù)據(jù)包的方法規(guī)定數(shù)據(jù)的結(jié)構(gòu)。如圖2、圖3所示。
圖2 數(shù)據(jù)包結(jié)構(gòu)
2.3 客戶端設(shè)計(jì)
設(shè)計(jì)客戶端的目的,在于能在不同的地點(diǎn)訪問(wèn)當(dāng)前整個(gè)系統(tǒng)的信息,如各連接節(jié)點(diǎn)的狀態(tài),節(jié)點(diǎn)的報(bào)文數(shù)據(jù),服務(wù)器的運(yùn)行狀態(tài)等等,這些都能通過(guò)登錄客戶端來(lái)實(shí)現(xiàn)??蛻舳艘部梢栽诙喾N嵌入式系統(tǒng)上登陸,且可以實(shí)現(xiàn)多個(gè)IP地址同時(shí)登陸。
圖3 客戶端顯示窗口
在圖3中,登錄客戶端后,可以顯示當(dāng)前連接節(jié)點(diǎn)的數(shù)目和狀態(tài),還包括該節(jié)點(diǎn)所附帶的信息。狀態(tài)包括該節(jié)點(diǎn)所屬IP和連接狀態(tài),點(diǎn)開(kāi)該圖標(biāo)后,表示該節(jié)點(diǎn)不僅有心跳報(bào)文,而且還攜帶一些附加信息。
圖4 節(jié)點(diǎn)信息
在節(jié)點(diǎn)信息中,可以包含該節(jié)點(diǎn)的傳感器數(shù)據(jù),如溫度、濕度等等。
2.4 節(jié)點(diǎn)設(shè)計(jì)
由于本設(shè)計(jì)基于嵌入式系統(tǒng),節(jié)點(diǎn)可以是Windows操作系統(tǒng)、Linux操作系統(tǒng)或者其他環(huán)境。雖然節(jié)點(diǎn)類型多樣化,但是服務(wù)器與節(jié)點(diǎn)之間所規(guī)定的數(shù)據(jù)個(gè)數(shù)與協(xié)議相同,只有按照完全相同的通信協(xié)議和數(shù)據(jù)格式,節(jié)點(diǎn)才可以成功連接至服務(wù)器,服務(wù)器才可能成功獲取節(jié)點(diǎn)的數(shù)據(jù)報(bào)文。
對(duì)于Windows操作系統(tǒng)節(jié)點(diǎn)端,與服務(wù)器一樣,通過(guò)使用Socket套接字來(lái)操作網(wǎng)口,在發(fā)送數(shù)據(jù)時(shí)按照服務(wù)器所規(guī)定的數(shù)據(jù)格式發(fā)送即可;對(duì)于Linux操作系統(tǒng)節(jié)點(diǎn)端,只是所操作的Socket庫(kù)有所不同,通信協(xié)議不變,只需按照服務(wù)器所規(guī)定的數(shù)據(jù)格式發(fā)送就能將本節(jié)點(diǎn)的數(shù)據(jù)發(fā)送至服務(wù)器;對(duì)于未來(lái)可能開(kāi)發(fā)的安卓節(jié)點(diǎn),iOS節(jié)點(diǎn),都是基于此思想來(lái)設(shè)計(jì)的。在此,就不將各節(jié)點(diǎn)分別展開(kāi),只介紹其核心思想和數(shù)據(jù)包的組成結(jié)構(gòu)。
1)設(shè)計(jì)流程
首先,服務(wù)器需要使用Socket前需要設(shè)置Socket的配置參數(shù),這些配置參數(shù)主要包括Socket的版本和服務(wù)器地址信息。配置好Socket參數(shù)后,需要配置本地地址信息,地址信息包括地址家族,端口號(hào)和IP地址,這里配置的IP地址是服務(wù)器的IP地址,在發(fā)送數(shù)據(jù)前,要先與服務(wù)器連接成功,然后再發(fā)送數(shù)據(jù)。
2)數(shù)據(jù)組成
在節(jié)點(diǎn)中,為區(qū)別不同的節(jié)點(diǎn),在節(jié)點(diǎn)向服務(wù)器發(fā)送數(shù)據(jù)時(shí)需要將此節(jié)點(diǎn)類型發(fā)送至服務(wù)器,即在數(shù)據(jù)中至少有一位定義節(jié)點(diǎn)類型。本設(shè)計(jì)中,該位是在節(jié)點(diǎn)配置信息的標(biāo)識(shí)符后面的段數(shù)據(jù),在組成數(shù)據(jù)最開(kāi)始時(shí),首先要進(jìn)行該段數(shù)據(jù)的類型定義,確定是加密數(shù)據(jù)段還是透明數(shù)據(jù)段。如果是透明數(shù)據(jù),則直接將數(shù)據(jù)段與包頭一起發(fā)送;如果是加密數(shù)據(jù),則需要將加密包頭與加密后的數(shù)據(jù)一起發(fā)送。
為了讓服務(wù)器知道該節(jié)點(diǎn)的類型和基本信息,節(jié)點(diǎn)的配置數(shù)據(jù)包括該節(jié)點(diǎn)的類型,Windows操作系統(tǒng)或Linux操作系統(tǒng)、節(jié)點(diǎn)主機(jī)名、節(jié)點(diǎn)IP地址、成功連接時(shí)間,附加數(shù)據(jù)包括該節(jié)點(diǎn)采集的傳感器數(shù)據(jù)等。
3.1 調(diào)試
為保證在Windows操作系統(tǒng)和Linux操作系統(tǒng)下運(yùn)行的節(jié)點(diǎn),在數(shù)據(jù)收發(fā)過(guò)程不會(huì)出現(xiàn)亂碼,兩端都默認(rèn)不使用Unicode字符集。故在VS2010的server端中,設(shè)置如下圖5配置。
圖5 字符集設(shè)置
在處理透明和加密報(bào)文時(shí),為判斷該報(bào)文包頭是否已正確識(shí)別,在MFC中,可以直接利用AfxMessageBox(加密報(bào)文)來(lái)打印出所要測(cè)試的點(diǎn)。如圖6所示。
3.2 測(cè)試
在服務(wù)器和節(jié)點(diǎn)都能正常工作后,接下來(lái)測(cè)試系統(tǒng)的穩(wěn)定性。首先運(yùn)行服務(wù)器,啟動(dòng)該服務(wù)器,開(kāi)始監(jiān)聽(tīng)該服務(wù)器的網(wǎng)絡(luò)端口。
登陸客戶端,可成功獲取多個(gè)節(jié)點(diǎn)的信息,包括節(jié)點(diǎn)個(gè)數(shù)、節(jié)點(diǎn)IP地址、連接狀態(tài)以及傳感器數(shù)據(jù)等。
圖6 調(diào)試點(diǎn)打印
本文在以ARM為核心處理器的實(shí)驗(yàn)平臺(tái)上,搭建功能完善、資源豐富的嵌入式Linux操作系統(tǒng),在Linux環(huán)境下,編寫源程序和makefile,搭建客戶端。在Windows操作系統(tǒng)下,使用MFC編寫服務(wù)器與客戶端應(yīng)用程序,為保證通信高效率和安全性,使用了Socket網(wǎng)絡(luò)編程技術(shù),AES數(shù)據(jù)加密算法。滿足客戶端可在嵌入式設(shè)備上運(yùn)行的條件,實(shí)現(xiàn)了通過(guò)網(wǎng)絡(luò)發(fā)送加密的心跳報(bào)文信息并在服務(wù)器上對(duì)進(jìn)程的運(yùn)行狀態(tài)進(jìn)行遠(yuǎn)程監(jiān)控。該心跳檢測(cè)機(jī)制增加了集群系統(tǒng)的智能化程度,可擴(kuò)展到工業(yè)控制、環(huán)境檢測(cè)、軍事應(yīng)用等領(lǐng)域。
參考文獻(xiàn)
[1]胡志坤,何多昌,桂衛(wèi)華等.基于改進(jìn)心跳包機(jī)制的整流遠(yuǎn)程監(jiān)控系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2008,28(2)﹕363-366.
[2]王海龍.基于實(shí)時(shí)以太網(wǎng)的心跳協(xié)議[D].大連﹕大連理工大學(xué),2009.