中國船舶重工集團公司第七一○研究所 朱玲羚
?
基于嵌入式系統的心跳檢測技術研究
中國船舶重工集團公司第七一○研究所 朱玲羚
【摘要】介紹了一種基于嵌入式的心跳檢測系統,主要由兩部分組成,基于ARM的Linux操作環境和Windows開發環境。該系統遵循TCP/UDP協議,通過在Linux和Windows環境下分別搭建服務器和客戶端,實現對系統的資源管理。該系統具有高可用性及較強的推廣應用價值。
【關鍵詞】心跳檢測;嵌入式;網絡通信
隨著電子信息工程及網絡技術的發展,遠程控制與檢測技術也隨之被運用于不同領域。在無法確保網絡的可靠性前提下,需要通過軟件的方法進行網絡通信狀態的檢測和判斷,心跳包機制就是在這種背景下產生的。心跳包機制實際就是一個自定義協議的、特定的、循環發送的數據包,主要用于判斷網絡節點是否還在鏈接[1]。目前這種方法已經廣泛應用于網絡通信服務、網絡平臺的故障檢測等相關領域。
在工程應用中,心跳檢測系統能對集群系統進行管理和檢測,通過高可用性設計減少系統的出錯概率,并在系統出現故障時及時響應,結合具體情況設計應急處理方案實現系統恢復或替代。以保障關鍵數據和業務系統的運行穩定性和可持續訪問性。
心跳檢測機制是檢測系統中各個節點是否正常運行的有效機制,通過心跳機制可以檢測在任一時間內是否有節點發生故障,并確定哪些節點發生故障。當前比較流行的心跳網絡有兩種方式,第一種為串行心跳線方式,它采用串行心跳線,直接進行心跳包的點對點傳輸。另一種心跳網絡為以太網方式,此種方式的心跳包在以太網的基礎上進行傳輸[2]。本設計心跳包的傳輸量并不是很大,且以太網方式價格比較低廉,易于在實際環境中進行推廣,故采用以太網方式來實現。
具體實現方法為:系統通過心跳網絡進行周期性的信息發送,即節點周期性服務器發送心跳包,表明當前系統狀態,心跳包中可包括節點名稱、節點IP、附加信息及節點傳感器采集到的數據,例如溫度、濕度等。若服務器沒有在規定的時間段內收到某個節點的心跳包,則可判斷此節點出現系統故障??蛻舳丝稍诓煌攸c訪問系統信息。
本文利用ARM的豐富資源搭建Linux系統。在心跳檢測實現過程中,主要使用基于TCP/IP協議棧Socket編程,多進程與進程間通信,多線程與線程間通信等技術。
2.1 系統框圖與機制
本系統是基于TCP網絡通信模式,在這種模式下,一般有兩種架構可供選擇:C/S和B/S架構。由于本文選用C/S架構的Socket服務器端,設計了單服務器-多客戶端模型。如圖1所示。
在本系統框圖中,服務器的主要功能如下:
1)檢測連接本服務器的節點,接收獲得的數據報文,包括該節點的類型,是Linux操作系統還是Windows操作系統或其他。
2)分析節點發來的數據,包括對該報文的類型識別,解密處理和校驗處理,并顯示該節點的配置信息及附加數據。

圖1 系統框圖
客戶端的主要功能如下:
1)登陸訪問服務器,可在不同地點的嵌入式設備上登陸訪問,檢測服務器工作狀態。
2)獲取服務器上的節點數據,了解節點設備的運行情況。
節點的主要功能如下:
1)獲取本節點的配置數據和附加數據,包括本節點的主機名和IP地址、心跳包數據、傳感器數據等。
2)通過Socket向服務器IP發送本節點的數據包信息,證節點的數據傳輸安全可靠,與服務器采用相同的加解密算法和校驗算法。
2.2 服務器設計
由以上設計模式,本服務器是基于Win32環境下的MFC進行開發,使用Windows提供的Socket結構建立網絡通信。Socket套接字來源于Unix系統,可以認為是一種特殊的I/O接口,還可以當作一種文件描述符,常用于進程間通信。通過Socket套接字不僅能實現本地計算機上進程之間的通信,使用網絡之后,還能夠和遠端不同計算機上的進程進行通信。
1)設計流程
首先,服務器使用Socket前需要設置Socket的配置參數,這些配置參數主要包括Socket的版本和本地地址信息。成功配置好Socket參數后,服務器端即開始等待監聽。
2)數據處理
服務器每次接收完一次數據后,需要對該數據進行分析。為了數據傳輸的安全性和完整性,本設計使用嵌套數據包的方法規定數據的結構。如圖2、圖3所示。

圖2 數據包結構
2.3 客戶端設計
設計客戶端的目的,在于能在不同的地點訪問當前整個系統的信息,如各連接節點的狀態,節點的報文數據,服務器的運行狀態等等,這些都能通過登錄客戶端來實現??蛻舳艘部梢栽诙喾N嵌入式系統上登陸,且可以實現多個IP地址同時登陸。

圖3 客戶端顯示窗口
在圖3中,登錄客戶端后,可以顯示當前連接節點的數目和狀態,還包括該節點所附帶的信息。狀態包括該節點所屬IP和連接狀態,點開該圖標后,表示該節點不僅有心跳報文,而且還攜帶一些附加信息。

圖4 節點信息
在節點信息中,可以包含該節點的傳感器數據,如溫度、濕度等等。
2.4 節點設計
由于本設計基于嵌入式系統,節點可以是Windows操作系統、Linux操作系統或者其他環境。雖然節點類型多樣化,但是服務器與節點之間所規定的數據個數與協議相同,只有按照完全相同的通信協議和數據格式,節點才可以成功連接至服務器,服務器才可能成功獲取節點的數據報文。
對于Windows操作系統節點端,與服務器一樣,通過使用Socket套接字來操作網口,在發送數據時按照服務器所規定的數據格式發送即可;對于Linux操作系統節點端,只是所操作的Socket庫有所不同,通信協議不變,只需按照服務器所規定的數據格式發送就能將本節點的數據發送至服務器;對于未來可能開發的安卓節點,iOS節點,都是基于此思想來設計的。在此,就不將各節點分別展開,只介紹其核心思想和數據包的組成結構。
1)設計流程
首先,服務器需要使用Socket前需要設置Socket的配置參數,這些配置參數主要包括Socket的版本和服務器地址信息。配置好Socket參數后,需要配置本地地址信息,地址信息包括地址家族,端口號和IP地址,這里配置的IP地址是服務器的IP地址,在發送數據前,要先與服務器連接成功,然后再發送數據。
2)數據組成
在節點中,為區別不同的節點,在節點向服務器發送數據時需要將此節點類型發送至服務器,即在數據中至少有一位定義節點類型。本設計中,該位是在節點配置信息的標識符后面的段數據,在組成數據最開始時,首先要進行該段數據的類型定義,確定是加密數據段還是透明數據段。如果是透明數據,則直接將數據段與包頭一起發送;如果是加密數據,則需要將加密包頭與加密后的數據一起發送。
為了讓服務器知道該節點的類型和基本信息,節點的配置數據包括該節點的類型,Windows操作系統或Linux操作系統、節點主機名、節點IP地址、成功連接時間,附加數據包括該節點采集的傳感器數據等。
3.1 調試
為保證在Windows操作系統和Linux操作系統下運行的節點,在數據收發過程不會出現亂碼,兩端都默認不使用Unicode字符集。故在VS2010的server端中,設置如下圖5配置。

圖5 字符集設置
在處理透明和加密報文時,為判斷該報文包頭是否已正確識別,在MFC中,可以直接利用AfxMessageBox(加密報文)來打印出所要測試的點。如圖6所示。
3.2 測試
在服務器和節點都能正常工作后,接下來測試系統的穩定性。首先運行服務器,啟動該服務器,開始監聽該服務器的網絡端口。
登陸客戶端,可成功獲取多個節點的信息,包括節點個數、節點IP地址、連接狀態以及傳感器數據等。

圖6 調試點打印
本文在以ARM為核心處理器的實驗平臺上,搭建功能完善、資源豐富的嵌入式Linux操作系統,在Linux環境下,編寫源程序和makefile,搭建客戶端。在Windows操作系統下,使用MFC編寫服務器與客戶端應用程序,為保證通信高效率和安全性,使用了Socket網絡編程技術,AES數據加密算法。滿足客戶端可在嵌入式設備上運行的條件,實現了通過網絡發送加密的心跳報文信息并在服務器上對進程的運行狀態進行遠程監控。該心跳檢測機制增加了集群系統的智能化程度,可擴展到工業控制、環境檢測、軍事應用等領域。
參考文獻
[1]胡志坤,何多昌,桂衛華等.基于改進心跳包機制的整流遠程監控系統[J].計算機應用,2008,28(2)﹕363-366.
[2]王海龍.基于實時以太網的心跳協議[D].大連﹕大連理工大學,2009.