发明内容
本发明提供一种数据链接保护方法及装置,以减少数据链接中断现象的发生。
本发明的技术方案是这样实现的:
一种数据链接保护方法,包括:
预先为每个任务设置相邻任务,为每个任务分配共享内存区域;
每个任务将自身的数据链接信息备份到自身的共享内存区域;
任务监测到相邻任务异常,从该相邻任务的共享内存区域获取正常数据链接的信息,根据该数据链接信息接管该相邻任务的数据链接。
所述任务监测到相邻任务异常通过以下步骤实现:
每个任务为相邻任务分别设置异常监测定时器,若在该定时器超时前未收到相邻任务发来的正常通知消息,则确定该相邻任务异常。
所述正常通知消息为:握手消息或心跳通知消息。
所述任务监测到相邻任务异常之后、从相邻任务的共享内存区域获取数据链接信息之前进一步包括:
任务解析所述相邻任务的共享内存区域内的数据,若解析成功,从该共享内存区域获取该相邻任务的数据链接信息;否则,不获取该相邻任务的数据链接信息。
所述共享内存区域内存储的数据链接信息至少包括:系统内的任务总数、本任务标识、相邻任务标识、数据链接描述信息;
所述任务解析所述相邻任务的共享内存区域的数据包括:任务判断相邻任务的共享内存区域内保存的系统内的任务总数、和/或本任务标识、和/或相邻任务标识是否正确,若是,确定解析成功;否则,确定解析失败。
所述为每个任务设置的相邻任务的个数为一个或一个以上。
当为每个任务设置的相邻任务为两个时,
所述任务监测到相邻任务异常为:所述相邻任务的左邻任务和右邻任务同时监测到所述相邻任务异常,
所述任务从该相邻任务的共享内存区域获取正常数据链接的信息包括:所述相邻任务的左邻任务从所述相邻任务的共享内存区域获取前一半正常数据链接信息,所述相邻任务的右邻任务从所述相邻任务的共享内存区域获取后一半正常数据链接信息;
所述任务接管该相邻任务的数据链接包括:所述相邻任务的左邻任务接管所述相邻任务的前一半数据链接,所述相邻任务的右邻任务接管所述相邻任务的后一半数据链接。
当为每个任务设置的相邻任务为两个时,
所述任务监测到相邻任务异常为:所述相邻任务的一个相邻任务监测到所述相邻任务异常,
所述任务从该相邻任务的共享内存区域获取正常数据链接的信息包括:所述相邻任务的一个相邻任务从所述相邻任务的共享内存区域获取一半正常数据链接信息;
且所述任务接管该相邻任务的数据链接之后进一步包括:所述相邻任务的一个相邻任务将所述相邻任务的另一个相邻任务作为自身的相邻任务,之后监测到所述相邻任务的另一个相邻任务异常,则从所述相邻任务的共享内存区域中获取另一半正常数据链接,接管该另一半正常数据链接。
所述预先为每个任务设置相邻任务包括:根据预先设置的相邻任务设置原则,为每个任务设置相邻任务;
且,所述为每个任务设置相邻任务之后进一步包括:将该相邻任务设置原则发送给各任务;
所述任务监测到相邻任务异常之前进一步包括:各任务根据所述相邻任务设置原则,确定自身的相邻任务。
所述任务接管相邻任务的数据链接之后进一步包括:任务根据预先设置的相邻任务设置原则,更新自身的相邻任务。
所述为每个任务分配共享内存区域包括:根据共享内存区域分配原则,为每个任务分配共享内存区域;
且,所述为每个任务分配共享内存区域之后进一步包括:将该共享内存区域分配原则发送给各任务;
所述任务监测到相邻任务异常之后、从该相邻任务的共享内存区域获取正常数据链接的信息之前进一步包括:任务根据所述共享内存区域分配原则,确定相邻任务的共享内存区域。
所述任务为:运行在以SMP方式运行的Linux操作系统上的处理数据流的应用进程,
或者,运行在以SMP方式运行的Linux操作系统上的每个处理数据流的应用进程中的线程,
或者,运行在多核系统的每个核上的无操作系统的单线程应用程序。
所述数据链接为:TCP链接、或因特网分组交换(IPX)链接、或数据传输协议(DDP)链接。
一种数据链接保护装置,包括:异常监测模块、数据链接接管模块和数据链接备份模块,其中:
异常监测模块,在监测到相邻任务异常时,将接管指示发送出去;
数据链接接管模块,收到异常监测模块发来的接管指示,从相邻任务的共享内存区域获取正常数据链接的信息,根据该数据链接信息接管相邻任务的数据链接;
数据链接备份模块,将数据链接信息备份到自身的共享内存区域。
所述异常监测模块进一步,在监测到相邻任务异常时,将该相邻任务标识发送出去;
且,所述装置进一步包括:相邻任务存储更新模块,保存相邻任务设置原则,接收到异常检测模块发来的相邻任务标识,根据所述设置原则和该相邻任务标识,重新为自身任务设置相邻任务,将该设置的新相邻任务标识发送给异常监测模块;
所述异常监测模块,根据所述新相邻任务标识,重新确定相邻任务。
所述异常监测模块包括:握手模块和握手监测模块,其中:
握手模块,每隔预定握手时间间隔,根据相邻任务存储更新模块最近发来的相邻任务标识,向该标识对应的相邻任务发送握手消息;
握手监测模块,根据相邻任务存储更新模块最近发来的相邻任务标识,为每个相邻任务设置一个握手监测定时器,若在定时器超时前收到相邻任务的握手消息,则重新启动该相邻任务的握手监测定时器;若在握手监测定时器超时时未收到相邻任务的握手消息,则向数据链接接管模块发送携带该相邻任务标识的接管指示,并向相邻任务存储更新模块发送携带该相邻任务标识的更新指示。
所述异常监测模块包括:心跳通知模块和心跳监测模块,其中:
心跳通知模块,每隔预定心跳通知时间间隔,根据相邻任务存储更新模块最近发来的相邻任务标识,向该标识对应的相邻任务发送心跳通知;
心跳监测模块,根据相邻任务存储更新模块最近发来的相邻任务标识,为每个相邻任务设置一个心跳监测定时器,若在定时器超时前收到相邻任务的心跳通知,则重新启动该相邻任务的心跳监测定时器;若在心跳监测定时器超时时未收到相邻任务的心跳通知,则向数据链接接管模块发送携带该相邻任务标识的接管指示,并向相邻任务存储更新模块发送携带该相邻任务标识的更新指示。
所述数据链接接管模块进一步,在收到异常监测模块发来的接管指示时,解析相邻任务的共享内存区域中的数据,若解析成功,从共享内存区域获取正常数据链接的信息。
该装置进一步包括:共享内存分配模块,在启动时,为系统中的每个任务分别分配共享内存区域,并将共享内存区域分配原则发送给系统中的其它任务和数据链接接管模块和数据链接备份模块。
该装置进一步包括:相邻任务设置模块,在启动时,为系统中的每个任务分别设置相邻任务,并将相邻任务设置原则发送给系统中的其它任务和相邻任务存储更新模块。
与现有技术相比,本发明通过为每个任务,如:应用进程、应用进程中的线程或单线程应用程序等分配用于备份数据链接信息的共享内存区域,并为每个任务设置相邻任务,每个任务将自身的数据链接信息备份到自身的共享内存区域,当监测到相邻任务异常时,从相邻任务的共享内存区域获取相邻任务的数据链接信息,接管该相邻任务的数据链接,减少甚至避免了数据链接中断现象的发生,提高了系统的稳定性和抗攻击能力。
具体实施方式
以下分别以以SMP方式运行Linux操作系统的多核系统和在每个核上运行无操作系统的单线程应用程序的多核系统为例,分别对本发明实施例提供的数据链接保护方案进行详细说明。
必须说明的是,以下各实施例都以TCP链接保护为例,本发明提供的实施例同样可适用于因特网分组交换(IPX)链接、数据传输协议(DDP)链接等的保护。
实施例一:
图2为本发明实施例提供的在以SMP方式运行Linux操作系统的多核系统中实现数据链接保护的流程图,如图2所示,其具体步骤如下:
步骤201:多核系统启动,最先启动的处理TCP数据流的应用进程为系统中的每个处理TCP数据流的应用进程分别分配用于备份TCP链接信息的共享内存区域,并为每个应用进程分别设置相邻应用进程,并将共享内存区域的分配原则以及相邻应用进程的设置原则发送给各应用进程。
最先启动的处理TCP数据流的应用进程在启动后,通常会申请到一块连续的共享内存,然后将该共享内存均匀分配给各处理TCP数据流的应用进程,并将该共享内存的首地址和各处理TCP数据流的应用进程所占的空间大小发送给所述各应用进程,各应用进程根据所述首地址和所述空间大小以及各应用进程的序号,可以计算出各应用进程所占共享内存区域的首地址。
每个应用进程具有唯一的标识,根据该标识,最先启动的处理TCP数据流的应用进程可确定相邻应用进程的设置原则。相邻应用进程的个数可以是一个也可以是一个以上,例如:假设各应用进程具有唯一的序号0、1、2、...、n-1,当相邻应用进程为一个时,可设定:每个应用进程的左应用进程为其相邻应用进程,即:应用进程0为应用进程1的相邻应用进程、应用进程1为应用进程2的相邻应用进程、...、应用进程n-1为应用进程0的相邻应用进程,也可设定:每个应用进程的右应用进程为其相邻应用进程,即:应用进程1为应用进程0的相邻应用进程、应用进程2为应用进程1的相邻应用进程、...、应用进程0为应用进程n-1的相邻应用进程;当相邻应用进程为两个时,可设定:应用进程的左应用进程和右应用进程同时为其相邻应用进程,即:应用进程0和2为应用进程1的相邻应用进程、应用进程1和3为应用进程2的相邻应用进程、...、应用进程n-1和应用进程1为应用进程0的相邻应用进程。
步骤202:预先在每个处理TCP数据流的应用进程上设定握手时间间隔、握手监测定时器时长和备份时间间隔。
步骤203:每个处理TCP数据流的应用进程每隔握手时间间隔向自身的相邻应用进程发送握手消息,并为各相邻应用进程分别设定一个握手监测定时器。
步骤204:每个处理TCP数据流的应用进程在握手监测定时器超时前接收到相邻应用进程发来的握手消息,则重新启动该相邻应用进程的握手监测定时器。
步骤205:每个处理TCP数据流的应用进程每隔备份时间间隔,将自身在该备份时间间隔内接收到的新TCP链接的描述信息备份到自身的共享内存区域中,同时将与该新TCP链接对应的四到七层应用协议运行参数从自身的私有内存备份到自身的共享内存区域中。
若备份TCP链接描述信息或四到七层应用协议运行参数失败,应用进程可向用户提示备份TCP链接信息失败。
表1 给出了每个处理TCP数据流的应用进程在共享内存区域中备份的数据结构:
系统应用进程总数 |
本应用进程标识 |
相邻应用进程标识 |
n,表示本应用进程当前所有独享的TCP链接表项总数 |
表项1 |
有效位,表示该表项是否有效,如:值为1表示有效,值为0表示无效 |
TCP链接描述fd11,若多核系统为代理模式还需保存下一跳TCP链接 |
与该TCP链接对应的四到七层应用协议运行参数控制块1,如安全套接字层(SSL)链接协商的会话控 |
|
|
描述fd12 |
制块中所有信息:密钥参数、证书认证等 |
表项2 |
有效位 |
TCP链接描述fd21,若多核系统为代理模式还需保存下一跳TCP链接描述fd22 |
与该TCP链接对应的四到七层应用协议运行参数控制块2,如SSL链接协商的会话控制块中所有信息:密钥参数、证书认证等 |
... |
...... |
...... |
...... |
表项n |
有效位 |
TCP链接描述fdn1,若多核系统为代理模式还需保存下一跳TCP链接描述fdn2 |
与该TCP链接对应的四到七层应用协议运行参数控制块n,如SSL连接协商的会话控制块中所有信息:密钥参数、证书认证等 |
保留位,用于保存以上TCP链接必需的文件或静态数据,如SSL证书链等 |
表1处理TCP数据流的应用进程在共享内存区域中备份的数据结构
需要指出的是,当TCP链接正常且备份TCP链接信息成功时,对应表项的有效位将置1,以表示该表项有效;当TCP链接断开或备份TCP链接信息失败,如:备份TCP链接描述信息失败或备份与该TCP链接对应的四到七层协议运行参数失败时,则对应表项中的有效位将置0,以表示该表项无效。
步骤206:每个处理TCP数据流的应用进程检测到自身的相邻应用进程的握手监测定时器超时,则向用户提示该相邻应用进程工作异常,并根据共享内存分配原则,确定该相邻应用进程的共享内存区域,解析该共享内存区域中保存的数据。
步骤207:应用进程判断是否对相邻应用进程的共享内存区域中保存的数据解析成功,若是,执行步骤208;否则,执行步骤212。
本步骤中,应用进程对相邻应用进程的共享内存区域中保存的数据的解析过程可如下:应用进程在相邻应用进程的共享内存区域中的、如表2所示的三个域中任意选择一个域,或者任意选择两个域,或者三个域都选择,然后判断所选择的域是否都正确,若是,则确定解析成功,从而可确定该相邻应用进程的共享内存区域中备份的TCP链接信息可靠;若否,则确定解析失败,从而可确定该相邻应用进程的共享内存区域中备份的TCP链接信息不可靠。具体地,以两个相邻应用进程A和B为例,应用进程A对相邻应用进程B的共享内存区域中的如表2所示的每个域的解析过程如下:应用进程A将自身共享内存区域中保存的系统应用进程总数与相邻应用进程B共享内存区域中的系统应用进程总数比较,若相同,则确定对该系统应用进程总数域的解析成功;判断自身共享内存区域中保存的相邻应用进程标识是否包含相邻应用进程B共享内存区域中的本应用进程标识,若是,确定对该本应用进程标识域的解析成功;根据自身保存的相邻应用进程设置原则以及相邻应用进程B标识,确定该相邻应用进程B的相邻应用进程标识,将该确定的相邻应用进程标识与该相邻应用进程B的共享内存区域中的相邻应用进程标识比较,若相同,则确定对相邻应用进程标识域的解析成功。
系统应用进程总数 |
本应用进程标识 |
相邻应用进程标识 |
表2解析相邻应用进程共享内存区域中的数据所用的域
步骤208:应用进程从相邻应用进程的共享内存区域中读取该相邻应用进程的、当前正常的TCP链接的描述信息,并将该共享内存区域中与该TCP链接对应的四到七层应用协议运行参数复制到自身的私有内存,开始接管相邻应用进程的TCP链接。
在以SMP方式运行Linux操作系统的多核系统中,每个处理数据流的应用进程在获得其它处理数据流的应用进程的TCP链接信息后,就可以继续对该TCP链接上的数据进行处理。
应用进程根据相邻应用进程共享内存区域中的每个表项的有效位的值,可确定该表项对应的TCP链接是否正常,如:有效位值为1,则确定该表项对应的TCP链接正常,同时也可确定该表项中的TCP链接信息完整,可正确接管。
若每个处理TCP数据流的应用进程分别有两个相邻应用进程:左邻应用进程和右邻应用进程,则可预先设定:在应用进程发生异常后,左邻应用进程与右邻应用进程分别接管该应用进程一半的正常TCP链接,具体地,左邻应用进程接管前一半正常TCP链接,右邻应用进程接管后一半正常TCP链接。例如:设该应用进程共有m个正常的TCP链接,则在该应用进程发生异常后,左邻应用进程可接管前m/2个TCP链接,右邻应用进程可接管后m/2个TCP链接。
步骤209:应用进程判断接管相邻应用进程的TCP链接是否成功,若是,执行步骤210;否则,执行步骤211。
步骤210:向用户提示接管相邻应用进程的TCP链接成功,转至步骤213。
步骤211:向用户提示接管相邻应用进程的TCP链接失败,转至步骤213。
步骤212:向用户提示解析相邻应用进程的TCP链接信息失败,执行步骤213。
步骤213:该应用进程根据相邻应用进程设置原则,调整自身的相邻应用进程,转至步骤203。
例如:当设置每个处理TCP数据流的应用进程分别有两个相邻应用进程时,若应用进程a发生了异常,则应用进程a-1和a+1会接管应用进程a的TCP链接,同时应用进程a-1会将自身的相邻应用进程由a-2和a调整为a-2和a+1,应用进程a+1会将自身的相邻应用进程由a和a+2调整为:a-1和a+2。
需要指出的是,当每个处理TCP数据流的应用进程分别有两个相邻应用进程时,若某个应用进程b和该应用进程的右邻应用进程b+1同时发生异常,则其左邻应用进程b-1在接管该应用进程b的前一半正常TCP链接后,会将该应用进程的右邻应用进程b+1作为自身的相邻应用进程,然后通过握手消息监测可确定该右邻应用进程b+1发生异常,然后将该应用进程b的后一半正常TCP链接接管过来。同样,若某个应用进程b和该应用进程的左邻应用进程b-1同时发生异常,则其右邻应用进程b+1在接管该应用进程b的后一半正常TCP链接后,会将该应用进程的左邻应用进程b-1作为自身的相邻应用进程,然后通过握手消息监测可确定该左邻应用进程b-1发生异常,然后将该应用进程b的前一半正常TCP链接接管过来。
需要指出的是,每个处理TCP数据流的应用进程中还包括多个处理TCP数据流的线程,线程之间也可以实现TCP链接保护,其实现过程与图2类似,只需将图2中的“应用进程”替换为“应用线程”即可。
实施例二:
图3为本发明实施例提供的在每个核上运行无操作系统的单线程应用程序的多核系统下实现数据链接保护的流程图,在本实施例中,由于每个核上运行的是单线程应用程序,因此,每个单线程应用程序可通过所在核的标识来唯一地标识,如图3所示,其具体步骤如下:
步骤301:多核系统启动,最先启动的核为每个运行单线程应用程序的核分别分配用于备份TCP链接信息所需的共享内存区域,并为每个核分别设置相邻核,将共享内存分配原则和相邻核设置原则发送给各核。
最先启动的核在启动后,通常会申请到一块连续的共享内存,然后将该共享内存均匀分配给各核,并将该共享内存的首地址和各核所占的空间大小发送给所述各核,各核根据所述首地址和所述空间大小以及各核的序号,可以计算出各核所占共享内存区域的首地址。
每个核具有唯一的序列号,根据该序列号,最先启动的核可确定相邻核分配原则。相邻核的个数可以是一个也可以是一个以上,例如:假设各核具有唯一的序列号0、1、2、...,n-1,当相邻核为一个时,可设定:核的左核为该核的相邻核,即:核0为核1的相邻核、核1为核2的相邻核、...、核n-1为核0的相邻核,也可设定:核的右核为核的相邻核,即:核1为核0的相邻核、核2为核1的相邻核、...、核0为核n-1的相邻核;当相邻核为两个时,可设定:核的左核和右核同时为核的相邻核,即:核0和核2为核1的相邻核、核1和核3为核2的相邻核、...、核n-1和核1为核0的相邻核。
步骤302:预先在每个核上设定心跳通知时间间隔、心跳监测定时器时长和备份时间间隔。
步骤303:每个核每隔心跳通知时间间隔向自身的相邻核发送心跳通知,并为各相邻核分别设定一个心跳监测定时器。
心跳通知可以核间中断的方式发送,也可以消息环的方式发送。
步骤304:每个核在心跳监测定时器超时前接收到相邻核发来的心跳通知,则重新启动该相邻核的心跳监测定时器。
步骤305:每个核每隔备份时间间隔,将自身在该备份时间间隔内获取到的新TCP链接的描述信息备份到自身的共享内存区域,同时将与该新TCP链接对应的四到七层应用协议运行参数从自身的私有内存备份到自身的共享内存区域中。
若备份TCP链接描述信息或四到七层应用协议运行参数失败,核可向用户提示备份TCP链接信息失败。
表3 给出了每个核在共享内存区域中备份的数据结构:
系统核总数 |
本核标识 |
相邻核标识 |
n,表示本核当前所有独享的TCP链接表项总数 |
表项1 |
有效位,表示该表项是否有效,如:值为1表示有效, |
TCP链接描述fd11,若多核系统为代理模式还需保 |
与该TCP链接对应的四到七层应用协议运行参数控制块1,如SSL链接协商 |
|
值为0表示无效 |
存下一跳TCP链接描述fd12 |
的会话控制块中所有信息:密钥参数、证书认证等 |
表项2 |
有效位 |
TCP链接描述fd21,若多核系统为代理模式还需保存下一跳TCP链接描述fd22 |
与该TCP链接对应的四到七层应用协议运行参数控制块2,如SSL链接协商的会话控制块中所有信息:密钥参数、证书认证等 |
... |
...... |
...... |
...... |
表项n |
有效位 |
TCP链接描述fdn1,若多核系统为代理模式还需保存下一跳TCP链接描述fdn2 |
与该TCP链接对应的四到七层应用协议运行参数控制块n,如SSL连接协商的会话控制块中所有信息:密钥参数、证书认证等 |
保留位,用于保存以上TCP链接必需的文件或静态数据,如SSL证书链等 |
表3核在共享内存区域中备份的数据结构
该表中的有效位的含义与表1相同。
步骤306:核检测到自身的相邻核的心跳监测定时器超时,则向用户提示该相邻核工作异常,并根据共享内存分配原则,确定相邻核的共享内存区域,解析该共享内存区域中保存的数据。
步骤307:核判断是否对相邻核的共享内存区域中的数据解析成功,若是,执行步骤308;否则,执行步骤312。
本步骤中,核对相邻核的共享内存区域中保存的数据的解析过程可如下:核在相邻核的共享内存区域中的、如表4所示的三个域中任意选择一个域,或者任意选择两个域,或者三个域都选择,然后判断所选择的域是否都正确,若是,则确定解析成功,从而可确定该相邻核的共享内存区域中备份的TCP链接信息可靠;若否,则确定解析失败,从而可确定该相邻核的共享内存区域中备份的TCP链接信息不可靠。具体地,以两个相邻核A和B为例,核A对相邻核B的共享内存区域中保存的如表4所示的每个域的解析过程如下:核A将自身共享内存区域中保存的系统核总数与相邻核B共享内存区域中的系统核总数比较,若相同,则确定对该系统核总数域的解析成功;判断自身共享内存区域中保存的相邻核标识是否包含相邻核B共享内存区域中的本核标识,若是,确定对该本核标识域的解析成功;根据自身保存的相邻核设置原则以及相邻核B标识,确定该相邻核B的相邻核标识,将该确定的相邻核标识与该相邻核B的共享内存区域中的相邻核标识比较,若相同,则确定对相邻核标识域的解析成功。
表4解析相邻核共享内存区域中的数据所用的域
步骤308:核从相邻核的共享内存区域中读取相邻核的、正常的TCP链接的描述信息,并将该共享内存区域中的与该TCP链接对应的四到七层应用协议运行参数复制到本地,开始接管相邻核的TCP链接。
若每个核分别有两个相邻核:左邻核和右邻核,则可预先设定:在核发生异常后,左邻核与右邻核分别接管该核一半的正常TCP链接,具体地,左邻核接管前一半正常TCP链接,右邻核接管后一半正常TCP链接。例如:设核共有m个正常TCP链接,则在该核发生异常后,左邻核可接管前m/2个TCP链接,右邻核可接管后m/2个TCP链接。
步骤309:核判断接管相邻核的TCP链接是否成功,若是,执行步骤310;否则,执行步骤311。
步骤310:向用户提示接管相邻核的TCP链接成功,转至步骤313。
步骤311:向用户提示接管相邻核的TCP链接失败,转至步骤313。
步骤312:向用户提示解析相邻核的TCP链接信息失败,执行步骤313。
步骤313:该核根据相邻核设置原则调整自身的相邻核,转至步骤303。
例如:当设置每个核分别有两个相邻核时,若核a发生了异常,则核a-1和a+1会接管核a的TCP链接,同时核a-1会将自身的相邻核由a-2和a调整为a-2和a+1,核a+1会将自身的相邻核由a和a+2调整为:a-1和a+2。
需要指出的是,当每个核分别有两个相邻核时,若某个核b和该核的右邻核b+1同时发生异常,则其左邻核b-1在接管该核b的前一半正常TCP链接后,会将该核的右邻核b+1作为自身的相邻核,然后通过心跳通知监测可确定该右邻核b+1发生异常,然后将该核b的后一半正常TCP链接接管过来。同样,若某个核b和该核的左邻核b-1同时发生异常,则其右邻核b+1在接管该核b的后一半正常TCP链接后,会将该核的左邻核b-1作为自身的相邻核,然后通过心跳通知监测可确定该左邻核b-1发生异常,然后将该核b的前一半正常TCP链接接管过来。
在实际应用中,可将应用进程、应用进程中的线程、单线程应用程序统称为任务。
图4为本发明实施例提供的在以SMP方式运行Linux操作系统的多核系统中实现TCP链接保护的装置组成图,如图4所示,其主要包括:握手模块41、握手监测模块42、TCP链接接管模块43、TCP链接备份模块44和相邻进程存储更新模块45,其中:
握手模块41:用于接收并保存相邻进程存储更新模块45发来的相邻应用进程标识,每隔预定握手时间间隔,根据相邻进程存储更新模块45最近发来的相邻应用进程标识,向该标识对应的相邻应用进程发送握手消息。
握手监测模块42:用于接收并保存相邻进程存储更新模块45发来的相邻应用进程标识,根据相邻进程存储更新模块45最近发来的相邻应用进程标识,为每个相邻应用进程设置一个握手监测定时器,若在定时器超时前收到相邻应用进程的握手消息,则重新启动该相邻应用进程的握手监测定时器;若在握手监测定时器超时时未收到相邻应用进程的握手消息,则向TCP链接接管模块43发送携带该相邻应用进程标识的接管指示,同时向相邻进程存储更新模块45发送携带该相邻应用进程标识的更新指示。
TCP链接接管模块43:用于保存共享内存分配原则,在收到握手监测模块42发来的携带相邻应用进程标识的接管指示后,根据该相邻应用进程标识以及共享内存分配原则,确定该相邻应用进程的共享内存区域,访问该相邻应用进程的共享内存区域,当对该共享内存区域中的数据解析成功后,读取该共享内存区域中保存的正常的TCP链接的信息,并根据该TCP链接信息接管该TCP链接。
TCP链接备份模块44:用于根据共享内存分配原则,确定自身的共享内存区域,每隔预定备份时间间隔,将自身在该备份时间间隔内接收的新TCP链接的描述信息和与该新TCP链接对应的四到七层应用协议运行参数备份到自身的共享内存区域中。
相邻进程存储更新模块45:用于保存相邻应用进程设置原则,根据该原则确定相邻应用进程标识,将该相邻应用进程标识发送给握手模块4 1和握手监测模块42;接收到握手监测模块42发来的更新指示,根据该更新指示中携带的相邻应用进程标识以及所述原则,更新相邻应用进程标识,将更新后的相邻应用进程标识发送给握手模块41和握手监测模块42。
当应用进程为多核系统中最先启动的应用进程时,本实施例提供的装置还可包括:共享内存分配模块和相邻进程设置模块,其中:
共享内存分配模块:用于在启动时,为系统中的每个应用进程分别分配共享内存区域,并将共享内存区域分配原则发送给系统中的其它应用进程和TCP链接接管模块43和TCP链接备份模块44。
相邻进程设置模块:用于在启动时,为系统中的每个应用进程分别设置相邻应用进程,并将相邻应用进程设置原则发送给系统中的其它应用进程和相邻进程存储更新模块45。
在实际应用中,可将握手模块41和握手监测模块42统称为异常监测模块。
图5为本发明实施例提供的在每个核上运行无操作系统的单线程应用程序的多核系统中实现TCP链接保护的装置组成图,如图5所示,其主要包括:心跳通知模块51、心跳监测模块52、TCP链接接管模块53、TCP链接备份模块54和相邻核存储更新模块55,其中:
心跳通知模块51:用于接收并保存相邻核存储更新模块55发来的相邻核标识,每隔预定心跳通知时间间隔,根据相邻核存储更新模块55最近发来的相邻核标识,向该标识对应的相邻核发送心跳通知。
心跳监测模块52:用于接收并保存相邻核存储更新模块55发来的相邻核标识,根据相邻核存储更新模块55最近发来的相邻核标识,为每个相邻核设置一个心跳监测定时器,若在定时器超时前收到相邻核的心跳通知消息,则重新启动该相邻核的心跳监测定时器;若在心跳监测定时器超时时未收到相邻核的心跳通知消息,则向TCP链接接管模块53发送携带该相邻核标识的接管指示,同时向相邻核存储更新模块55发送携带该相邻核标识的更新指示。
TCP链接接管模块53:用于保存共享内存分配原则,在收到心跳监测模块52发来的携带相邻核标识的接管指示后,根据该相邻核标识以及共享内存分配原则,确定该相邻核的共享内存区域,访问该相邻核的共享内存区域,当对该共享内存区域中的数据解析成功后,读取该共享内存区域中保存的正常的TCP的链接信息,并根据该TCP链接信息接管该TCP链接。
TCP链接备份模块54:用于根据共享内存分配原则,确定自身的共享内存区域,每隔预定备份时间间隔,将自身在该备份时间间隔内接收的新TCP链接的描述信息和与该新TCP链接对应的四到七层应用协议运行参数备份到自身的共享内存区域中。
相邻核存储更新模块55:用于保存相邻核设置原则,根据该原则确定相邻核标识,将该相邻核标识发送给心跳通知模块5和心跳监测模块52;接收到心跳监测模块52发来的更新指示,根据该更新指示中携带的相邻核标识以及所述原则,更新相邻核标识,将更新后的相邻核标识发送给心跳通知模块51和心跳监测模块52。
当核为多核系统中最先启动的核时,本实施例提供的装置还可包括:共享内存分配模块和相邻进程设置模块,其中:
共享内存分配模块:用于在启动时,为系统中的每个核分别分配共享内存区域,并将共享内存区域分配原则发送给系统中的其它核和TCP链接接管模块53和TCP链接备份模块54。
相邻进程设置模块:用于在启动时,为系统中的每个核分别设置相邻核,并将相邻核设置原则发送给系统中的其它核和相邻核存储更新模块55。
在实际应用中,可将心跳通知模块51和心跳监测模块52统称为异常监测模块。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。