心跳机制的实现方法

文档序号:7719846阅读:347来源:国知局
专利名称:心跳机制的实现方法
技术领域
本发明涉及网络测试或监控技术领域,尤其涉及一种心跳机制的实现方法。
背景技术
心跳机制一般是用来判断对方(设备、进程等网络实体或应用)是否正常运行。
服务器端不能有效的判断客户端是否在线,也就是说,服务器端无法区分客户端 是长时间在空闲,还是已经掉线的情况,这样就需要心跳机制来实现客户端定时发送简单 的信息给服务器端,以告诉服务器端该客户端还在线。心跳机制通常采用定时发送简单的 通讯包的方式,如果在指定时间段内未收到对方响应,则判断对方已经当掉。
TCP (Transmission Control Protocol,传输控制协议)中已实现了一个心跳机 制。如图l所示,即如果在指定的时间内(一般为2个小时)没有数据传送,客户端会给服 务器端发送一个Ke印-Alive数据报文,使用的序列号是曾发出的最后一个报文的最后一 个字节的序列号,服务器端如果收到这个数据,则回送一个TCP的ACK报文(ACKnowledge Caracter,确认字符),确认该字节已收到,这样就知道此连接没有断开。如果一段时间没有 收到服务器端的响应,客户端会进行重试,重试几次后,认为TCP连接异常断开,再向服务 器端发一个RST (Reset the connection,复位连接)报文,然后将连接关闭。
如果需要在服务器端采用该心跳机制来实现检测多个客户端在线与否,服务器端 与每个客户端之间需要维护一条专门的TCP数据连接。当某客户端当机时,服务器端会检 测到客户端当机,并关闭与该客户端的连接;而当该客户端再次恢复正常工作时,服务器端 则需要重建与该客户端的TCP数据连接才能开始实时检测该客户端的状态。因此,该心跳 机制应用范围有限,且可靠性差,效率低。另外,利用TCP报文实现的心跳机制因为发送的 TCP报文较长,不符合心跳数据包信息应相对简短的要求。

发明内容
本发明的目的是提供一种心跳机制的实现方法,该方法独立性、可靠性强,效率
高,且简单易行,通用性强,可克服现有技术的不足。 为实现上述目的,本发明采用如下技术方案。 本发明提出的一种心跳机制的实现方法,该方法包括步骤 Sl.服务器端向所有客户端发送心跳请求数据包; S2.在设定时间后,所述服务器端以非阻塞的方式接收数据包,若接收到数据包, 则执行步骤S3,否则判定所有客户端均未正常工作,并返回步骤Sl ; S3.解析接收到的数据包,若所述数据包为心跳应答数据包,则判定发送该心跳应 答数据包的客户端工作正常,未发送任何数据包的客户端未正常工作,并返回步骤S1,否 则判定发送该数据包的客户端以及未发送任何数据包的客户端均未正常工作,并返回步骤 Sl。 其中,步骤Sl中,所述服务器端以广播的方式发送所述心跳请求数据包。
其中,在所述设定时间内,所述客户端返回的数据包均存储于接收缓冲区内。 其中,步骤S2中,所述设定时间为心跳机制的周期。 其中,所述服务器端以及客户端均为统一威胁管理系统中的处理器。 其中,该方法中的数据包包括用于表示数据包为心跳数据包或非心跳数据包的
字节,用于辅助进行心跳请求数据包与心跳应答数据包的匹配的字节,以及用于表示心跳
数据包的类型为心跳请求数据包或心跳应答数据包的字节。 本发明的方法基于UDP,用户可自定义该心跳机制的通信格式,这样就能够很 方便地将心跳接收与其他远程配置的消息格式兼容;本发明方法实现的心跳机制不需要 socket绑定接收端口,不需要去维护一条专门的连接,所以独立性和可靠性很强。另外,该 心跳机制所基于的系统相当于是在一个设备不同板卡之间,或者说该心跳机制是多处理器 之间通过控制总线实现的,因为不在数据总线上,所以不存在带宽问题。最后,该心跳机制 简单易行,通用性强。


图1为传统心跳机制流程图; 图2为依照本发明一种实施方式的心跳机制的实现方法流程图; 图3为依照本发明一种实施方式的心跳机制的实现方法实现的心跳机制的协议
流程图; 图4为实施例中应用本发明方法的UTM系统架构图; 图5为实施例中的UTM系统应用本发明方法的流程图; 图6为实施例中心跳机制的数据包结构图。
具体实施例方式
本发明提出的心跳机制的实现方法,结合附图和实施例详细说明如下。 如图2所示,依照本发明一种实施方式的心跳机制的实现方法,该方法包括步骤 SI.服务器端向所有客户端广播发送心跳请求数据包; S2.在设定时间后,服务器端以非阻塞的方式接收数据包,若接收到数据包,则执 行步骤S3,否则判定所有客户端均未正常工作,并返回步骤SI ; S3.解析接收到的数据包,若该数据包为心跳应答数据包,则判定发送该心跳应答 数据包的客户端工作正常,未发送任何数据包的客户端未正常工作,并返回步骤Sl,否则判 定发送该数据包的客户端以及未发送任何数据包的客户端均未正常工作,并返回步骤Sl。
其中,在设定时间内,客户端返回的数据包均存储于socket的接收缓冲区 (Receive Buffer)内,设定时间为心跳机制的周期。 优选地,服务器端以及客户端可均为统一威胁管理系统中的处理器。本发明的方 法所实现的心跳机制是基于一个设备不同板卡之间,或由多处理器之间通过控制总线实现 的。 优选地,本发明方法所实现的心跳机制中的数据包包括用于表示数据包为心跳 数据包或非心跳数据包的字节,用于辅助进行心跳请求数据包与心跳应答数据包的匹配的 字节,以及用于表示心跳数据包的类型为心跳请求数据包或心跳应答数据包的字节。这样,服务器端可根据上述通信格式准确判定接收的数据包的类型,用户也可自定义该心跳机制
数据包通信格式,以方便地将心跳接收与其它远程配置的消息格式兼容。 图3为依照本发明一种实施方式的方法实现的心跳机制的协议流程示意图。 实施例 本实施例的心跳机制的实现方法应用于UTM(Unified ThreatManagement,统一威 胁管理)系统中,该系统如图4所示,包括CP (控制处理器),为用于配置和控制NP (网络处 理器)及AP(应用处理器)的主机;NP为起防火墙、流量管理等作用的主机;AP是起IDP(入 侵检测保护)及杀毒等作用的主机。通过本发明的方法,让CP端实施了解NP端及AP端等 多个网络实体是否正常运行,并将不同的网络实体存活状况报告给NP,以采取相应的流量 控制手段以维持各AP之间的负载均衡。如图5所示,该方法包括步骤
Dl.初始化CP上的心跳程序,包括设置socket、心跳请求数据包的通信格式等;
D2. CP向所有AN/NP广播发送心跳请求数据包; D3.在规定时间t(一般是以真正意义上的心跳频率)之后,CP会以非阻塞方式 接收数据包,若接收到数据包,则执行步骤D4,否则,标记所有AP/NP的状态为当机,并返回
D2 ; D4.解析接收到的数据包,若接收到的数据包为心跳应答数据包,则判定发送该心 跳应答数据包的AP/NP正常工作,标记其状态为正常,未发送任何数据包的AP/NP未正常工 作,标记其状态为当机,并将记录的信息汇报给正常工作的NP,返回步骤D2 ;否则判定发送 该数据包的AP/NP及未发送任何数据包的AP/NP均未正常工作,标记其状态为当机,并将记 录的信息汇报给正常工作的NP,返回步骤D2。 CP定时向所有AP/NP广播发送心跳请求数据包,某个AP/NP如果正常工作的话,其 daemon AP/NP就会对CP主动发来的心跳请求数据包进行解析和回复,在规定时间t ( 一般 是以真正意义上的心跳频率)之后,CP会以非阻塞方式接收从AP/NP的daemon程序返回 的心跳应答数据包(如果AP/NP已经做了回复的话,心跳应答数据包应该早于t时间就会 到达,此时CP相当于从socket的Receive Buffer中读取所有已收到的回复数据)。如果 CP此时能够收到来自某个AP/NP的心跳应答数据包,则CP认为该AP/NP还在正常工作;如 果没有能够收到来自某个AP/NP的心跳应答数据包,则CP认为该AP/NP工作不正常,记录 日志,将所有AP/NP的目前状态汇报给尚在正常工作的NP, NP则会根据正常工作的AP数来 重新分配去往各AP的处理流量,以到达负载均衡的目的,维持整个UTM系统的稳定工作。
如图6所示,为本实施方式中的心跳机制数据包的格式,其中
Code域为一个字节,表明此数据包为心跳数据包,其值规定为O(HeartBeat);如 果code为其他值,则代表其他通信数据包。 Identifier域为一个字节,辅助进行心跳请求数据包与心跳应答数据包的匹 配——每一个心跳请求数据包都与一个心跳应答数据包相对应。这样的一个Identifier 域就建立了这样的一个对应关系——相同的Identifier相匹配。 Type域为一个字节,表明此心跳数据包的类型,心跳数据包Type域的取值和意义 如下 Type = 0 :心跳请求数据包(Heartbeat Request)。由CP主动广播发出,由daemon AP/NP接收并解析。
Type = 1 :心跳应答数据包(Heartbeat Response)。由daemon AP/NP返回给CP, 由CP确认心跳正常。 本实施例具体实现程序如下 心跳请求数据包设置—— message—conf msgs ; memset(&msgs,0, sizeof (message—conf)); msgs. code = MSG_HEARTBEAT_C0DE ; msgs. identifier = 1 ; msgs. type = MSG_HEARTBEAT_TYPE_REQUEST ; 广播发送心跳请求数据包—— server_addr. sin_addr. s_addr = htonl (I膽DR—BR0ADCAST); if ((bytes = sendto(server—sockfd,&msgs, sizeof (message—conf),0, (struct sockaddr氺)&server— addr, sizeof (server—addr))) < 0) debugline(" Send Heartbeat Request Error ! 〃 ); 非阻塞接收数据包—— server—addr. sin_addr. s_addr = htonl (I膽DR—ANY); if ((bytes = recvfrom(server—sockfd, buf, sizeof(buf), MSG—D0NTWAIT, (structsockaddr*)&server— addr, &sin_size)) > 0) { strcpy (皿know—addr, inet—ntoa (server—addr. sin_addr)); logdebug(" unknow host' s ip is% s\n〃 , unknow—addr); ...... } 解析数据包—— void msg—resolve (message—conf氺msg, char氺hb—dev) { switch (msg- > code) { case MSG_HEARTBEAT_C0DE : switch (msg- > type) { case MSG_HEARTBEAT_TYPE_RESPONSE : logdebug(" Heartbeat response message is received! %s is OK!
v', hb_dev); break ; default:logdebug(" Error heartbeat response message is received !Although, % s is still OK ! \n〃 ,hb_dev);break j
return ;
上述心跳机制的效果显示如下
皿know host' s ip is 192. 168. 16. 51
Heartbeat response message is received ! NPO is OK !皿know host' s ip is 192. 168. 16. 52

该心跳机制实时高效,独立性和鲁棒性很强,能够很确切地检测出各网络实体的运行状态,并及时汇报处理,以维持整个系统的正常运行,可见达到了很好的效果。另外,由于该心跳机制的鲁棒性很强,所以在多次运行过程中从未出现心跳不正常或不工作的情况,而很好的独立性也使得在各个daemon不工作的时候,心跳仍然可以正常工作。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Heartbeat response message isreceived ! NP1 isOK
Noheartbeatresponsemessageisreceived !AP0isdown
Noheartbeatresponsemessageisreceived !APIisdown
Noheartbeatresponsemessageisreceived !AP2isdown
Noheartbeatresponsemessageisreceived !AP3isdown
Noheartbeatresponsemessageisreceived !AP4isdown
Noheartbeatresponsemessageisreceived !AP5isdown
Noheartbeatresponsemessageisreceived !AP6isdown
Noheartbeatresponsemessageisreceived !AP7isdown
Noheartbeatresponsemessageisreceived !AP8isdown
Noheartbeatresponsemessageisreceived !AP9isdown
权利要求
一种心跳机制的实现方法,该方法包括步骤S1.服务器端向所有客户端发送心跳请求数据包;S2.在设定时间后,所述服务器端以非阻塞的方式接收数据包,若接收到数据包,则执行步骤S3,否则判定所有客户端均未正常工作,并返回步骤S1;S3.解析接收到的数据包,若所述数据包为心跳应答数据包,则判定发送该心跳应答数据包的客户端工作正常,未发送任何数据包的客户端未正常工作,并返回步骤S1,否则判定发送该数据包的客户端以及未发送任何数据包的客户端均未正常工作,并返回步骤S1。
2. 如权利要求1所述的心跳机制的实现方法,其特征在于,步骤S1中,所述服务器端以 广播的方式发送所述心跳请求数据包。
3. 如权利要求1所述的心跳机制的实现方法,其特征在于,在所述设定时间内,所述客 户端返回的数据包均存储于接收缓冲区内。
4. 如权利要求3所述的心跳机制的实现方法,其特征在于,步骤S2中,所述设定时间为 心跳机制的周期。
5. 如权利要求1所述的心跳机制的实现方法,其特征在于,所述服务器端以及客户端 均为统一威胁管理系统中的处理器。
6. 如权利要求l-5任一项所述的心跳机制的实现方法,其特征在于,该方法中的数据 包包括用于表示数据包为心跳数据包或非心跳数据包的字节,用于辅助进行心跳请求数 据包与心跳应答数据包的匹配的字节,以及用于表示心跳数据包的类型为心跳请求数据包 或心跳应答数据包的字节。
全文摘要
本发明涉及一种心跳机制的实现方法,该方法包括步骤服务器端向所有客户端发送心跳请求数据包;在设定时间后,所述服务器端以非阻塞的方式接收数据包,若未收到数据包则判定所有客户端均未正常工作,并返回初始步骤;若接收到数据包,则解析接收到的数据包,若所述数据包为心跳应答数据包,则判定发送该心跳应答数据包的客户端工作正常,未发送任何数据包的客户端未正常工作,并返回初始步骤,否则判定发送该数据包的客户端以及未发送任何数据包的客户端均未正常工作,并返回初始步骤。本发明方法独立性、可靠性强,不受带宽限制,简单易行,通用性强。
文档编号H04L12/56GK101714991SQ200910236819
公开日2010年5月26日 申请日期2009年10月30日 优先权日2009年10月30日
发明者李军, 王凯, 薛一波 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1