中国船舶重工集团公司第七一○研究所 朱玲羚
基于嵌入式系统的心跳检测技术研究
中国船舶重工集团公司第七一○研究所 朱玲羚
【摘要】介绍了一种基于嵌入式的心跳检测系统,主要由两部分组成,基于ARM的Linux操作环境和Windows开发环境。该系统遵循TCP/UDP协议,通过在Linux和Windows环境下分别搭建服务器和客户端,实现对系统的资源管理。该系统具有高可用性及较强的推广应用价值。
【关键词】心跳检测;嵌入式;网络通信
随着电子信息工程及网络技术的发展,远程控制与检测技术也随之被运用于不同领域。在无法确保网络的可靠性前提下,需要通过软件的方法进行网络通信状态的检测和判断,心跳包机制就是在这种背景下产生的。心跳包机制实际就是一个自定义协议的、特定的、循环发送的数据包,主要用于判断网络节点是否还在链接[1]。目前这种方法已经广泛应用于网络通信服务、网络平台的故障检测等相关领域。
在工程应用中,心跳检测系统能对集群系统进行管理和检测,通过高可用性设计减少系统的出错概率,并在系统出现故障时及时响应,结合具体情况设计应急处理方案实现系统恢复或替代。以保障关键数据和业务系统的运行稳定性和可持续访问性。
心跳检测机制是检测系统中各个节点是否正常运行的有效机制,通过心跳机制可以检测在任一时间内是否有节点发生故障,并确定哪些节点发生故障。当前比较流行的心跳网络有两种方式,第一种为串行心跳线方式,它采用串行心跳线,直接进行心跳包的点对点传输。另一种心跳网络为以太网方式,此种方式的心跳包在以太网的基础上进行传输[2]。本设计心跳包的传输量并不是很大,且以太网方式价格比较低廉,易于在实际环境中进行推广,故采用以太网方式来实现。
具体实现方法为:系统通过心跳网络进行周期性的信息发送,即节点周期性服务器发送心跳包,表明当前系统状态,心跳包中可包括节点名称、节点IP、附加信息及节点传感器采集到的数据,例如温度、湿度等。若服务器没有在规定的时间段内收到某个节点的心跳包,则可判断此节点出现系统故障。客户端可在不同地点访问系统信息。
本文利用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 客户端设计
设计客户端的目的,在于能在不同的地点访问当前整个系统的信息,如各连接节点的状态,节点的报文数据,服务器的运行状态等等,这些都能通过登录客户端来实现。客户端也可以在多种嵌入式系统上登陆,且可以实现多个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.