发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供一种实现SCTP协议热备份的方法、系统及服务器主机,两个主机之间无需频繁同步偶联数据即可实现热备份。
为了达到上述目的,本发明采取了以下技术方案:
一种实现SCTP协议热备份的方法,包括第一主机和第二主机,所述方法包括如下步骤:
A、第一主机与客户端SCTP偶联,并将偶联的COOKIE备份至第二主机;
B、在第一主机无法正常工作时,所述第二主机激活偶联;所述第二主机的内核根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复;
C、第二主机的内核生成重启COOKIE_ECHO,并发送至客户端。
所述的实现SCTP协议热备份的方法中,所述步骤C之后,还包括步骤:
D、客户端根据接收到的所述COOKIE_ECHO,将冲突控制参数恢复至初始值;
E、第二主机进入工作状态后,将内核中的SCTP偶联备份以及签名密钥发送给第一主机。
所述的实现SCTP协议热备份的方法中,所述步骤A具体包括如下步骤:
A1、第一主机作为活动主机取得SCTP协议栈当前使用的签名密钥,并将所述签名密钥发送给作为备份主机的第二主机;
A2、第二主机设置SCTP协议栈签名密钥;
A3、所述第一主机打开接收端口,在接收到客户端发出的INIT后,第一主机的内核发送INIT_ACK给客户端;
A4、所述第一主机接收到客户端发出的COOKIE_ECHO后,回复COOKIE_ACK给客户端,SCTP偶联建立成功;
A5、所述第一主机获取该偶联的COOKIE,并将所述COOKIE备份至第二主机。
所述的实现SCTP协议热备份的方法中,所述第一主机设置有第一内部IP和用于客户端访问的外部IP;所述第二主机设置有第二内部IP和与第一主机相同的外部IP;所述第一内部IP和第二内部IP用于第一主机与第二主机之间的数据备份。
一种实现SCTP协议热备份的系统,所述系统包括:
第一主机,用于与客户端SCTP偶联,并将偶联的COOKIE备份至第二主机;
第二主机,用于接收第一主机发送的COOKIE;在第一主机无法正常工作时,激活偶联;根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复,生成重启COOKIE_ECHO,并发送至客户端。
所述的用于实现SCTP协议热备份的系统中,所述系统还包括:
客户端,用于根据接收到的所述COOKIE_ECHO,将冲突控制参数恢复至初始值。
所述的实现SCTP协议热备份的系统中,所述第二主机还用于在进入工作状态后,将内核中的SCTP偶联备份以及签名密钥发送给第一主机。
所述的实现SCTP协议热备份的系统中,所述第一主机具体用于:作为活动主机取得SCTP协议栈当前使用的签名密钥,并将所述签名密钥发送给作为备份主机的第二主机;打开接收端口,在接收到客户端发出的INIT后,第一主机的内核发送INIT_ACK给客户端;在接收到客户端发出的COOKIE_ECHO后,回复COOKIE_ACK给客户端,SCTP偶联建立成功;获取该偶联的COOKIE,并将所述COOKIE备份至第二主机。
所述的实现SCTP协议热备份的系统中,所述第一主机设置有第一内部IP和用于客户端访问的外部IP;所述第二主机设置有第二内部IP和与第一主机相同的外部IP;所述第一内部IP和第二内部IP用于第一主机与第二主机之间的数据备份。
一种服务器主机,包括:
应用模块,用于在所述服务器主机作为活动主机时,在服务器主机与客户端SCTP偶联后,将偶联的COOKIE备份至备份主机;在所述服务器主机作为备份主机时,接收活动主机发出的COOKIE;
内核模块,用于在所述服务器主机作为备份主机时,根据所述COOKIE设置SCTP协议栈签名密钥;在活动主机无法正常工作后激活偶联,根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复,并生成重启COOKIE_ECHO,将所述COOKIE_ECHO发送至客户端;在所述客户端的冲突控制参数恢复至初始值后,完成与客户端的SCTP偶联。
有益效果:
本发明提供的一种实现SCTP协议热备份的方法、系统及服务器主机,所述方法包括:第一主机与客户端SCTP偶联,并将偶联的COOKIE备份至第二主机;在第一主机无法正常工作时,所述第二主机激活偶联;所述第二主机的内核根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复;第二主机的内核生成重启COOKIE_ECHO,并发送至客户端。由此可知,本发明利用SCTP建立的特点实现SCTP的备份;利用SCTP重启的过程实现SCTP的主备倒换,两个主机之间无需频繁同步偶联数据即可实现热备份,过程简单易实现。
具体实施方式
本发明提供一种实现SCTP协议热备份的方法、系统及服务器主机,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
请参阅图1和图2,本发明提供一种实现SCTP协议热备份的方法,尤其适用于实现Linux内核SCTP 1+1热备份。所述方法包括第一主机10和第二主机20,两个主机之间可相互通信。具体的,所述第一主机10设置有第一内部IP和用于客户端访问的外部IP;所述第二主机20设置有第二内部IP和与第一主机相同的外部IP;所述第一内部IP和第二内部IP用于第一主机10与第二主机20之间的数据备份以及管理。如图2所示,本发明的1+1热备份的模型中,当发生主备倒换时(比如活动主机崩溃,重启,应用进程崩溃等等),备份主机激活外部IP(此IP与原活动主机外部IP相同)成为活动主机;原活动主机去激活外部IP成为备份主机,完成主备倒换后,客户端与服务器之间的连接不受倒换的影响。
具体的,所述实现SCTP协议热备份的方法包括如下步骤:
S10、第一主机与客户端SCTP偶联,并将偶联的COOKIE备份至第二主机。所述COOKIE即缓存,或者信息缓存,为携带了偶联信息的一段数据,这段数据可以让第二主机克隆该偶联。
S20、在第一主机无法正常工作时,所述第二主机激活偶联;所述第二主机的内核根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB(传输控制模块,主要包含一个偶联的状态以及描述发送窗口,接收窗口的参数等等),使服务器端SCTP偶联完成恢复。所述密钥保存在服务器(第一主机、第二主机)内,用于计算和验证签名。所述签名是为了防止客户端伪造COOKIE对服务器进行攻击。所述时间戳的作用是为了防止客户端使用重复的COOKIE对服务器进行攻击。通过这些设置,有效的防止服务器受到类似于TCP协议的SYNC攻击,提高安全性。
通常,Linux应用软件运行在用户空间,简称应用;而Linux内核运行在内核空间,简称内核;应用通过调用内核提供的API(应用程序编程接口)使用内核提供的功能。本发明主要用到Linux 内核的系统API getsockopt()以及setsockopt();这两个API是应用与内核交互套接字(sock)选项的系统调用,其中getsockopt()用于应用从内核获得套接字的当前选项;而setsockopt()用于应用设置套接字选项至内核。具体的,所述Linux内核SCTP协议栈可实现API setsockopt()/getsockopt()函数关于SCTP_SECRET_KEY,SCTP_COOKIE,SCTP_COOKIE_ACTIVITE的相关操作。
所述步骤S20具体包括:
作为活动主机的第一主机无法正常工作(由于某种原因,如主机掉电,应用程序崩溃,操作系统崩溃等),主备倒换发生,作为备份主机的第二主机激活外部IP,成为活动主机,并通过setsockopt(SCTP_COOKIE_ACTIVITE)激活偶联;第二主机内核根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,然后按照收到COOKIE_ECHO的处理流程,生成对应偶联的TCB,服务器端SCTP偶联完成恢复。
S30、第二主机的内核生成重启COOKIE_ECHO(缓存回声),并发送至客户端。
由此可知,两个主机之间无需频繁同步偶联数据即可实现热备份。
进一步的,所述步骤S30之后,还包括步骤:
S40、客户端根据接收到的所述COOKIE_ECHO,将冲突控制参数(接收窗,发送窗,慢速启动门限等)恢复至初始值。具体的,客户端根据COOKIE_ECHO特征,判断对端已重启,将冲突控制相关参数恢复至初始值,至此,该偶联的热备份倒换完成。换而言之,客户端只需执行一个重启操作即可与新的活动主机匹配,数据继续传输,非常方便。根据RFC 2960 5.2.4,当TCB(相当于偶联)已经存在时,收到对端的COOKIE_ECHO,如果该COOKIE中携带的本地关系标签(Local-Tie-Tag)以及对端关系标签(Peer-Tie-Tag)与该TCB保存的参数匹配时(以下称为重启COOKIE_ECHO),应该采取动作a;动作a将所有冲突控制参数恢复到初始值,实际上相当于传输协议本端也执行了一个重启操作,达到和对端匹配的目的,应用层感知不到传输层的变化,数据继续传输。由此可知,本发明利用SCTP建立的特点实现SCTP的备份;利用SCTP重启的过程实现SCTP的主备倒换,无需频繁同步偶联数据即可实现热备份。
S50、第二主机进入工作状态后,将内核中的SCTP偶联备份以及签名密钥发送给第一主机。即,原备份主机(第二主机)进入工作状态后变为活动主机,将内核中的SCTP偶联备份以及签名密钥发送至原活动主机(第一主机),原活动主机变为备份主机,以备倒换的再次发生。也就是说所述步骤S50就是步骤S10,只是两个主机的主备关系颠倒了。换而言之,接下来还包括如下步骤:
S60、在第二主机无法正常工作时,所述第一主机激活偶联;所述第一主机的内核根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复。
S70、第一主机的内核生成重启COOKIE_ECHO,并发送至客户端。
S80、客户端根据接收到的所述COOKIE_ECHO,将冲突控制参数恢复至初始值。之后,即返回步骤S10,依此循环往复。
请参阅图3和图4,所述步骤S10涉及SCTP的建立机制,SCTP的建立采用4次握手的机制,服务器(活动主机)在发送INIT-ACK(内含这个连接所有信息以及服务器校验信息的COOKIE)以后,将删除一切关于这个偶联的资源,在收到COOKIE-ECHO(携带服务器发送的COOKIE)时,再对COOKIE进行签名校验并根据COOKIE的内容恢复偶联的资源,从而完成连接的建立。所述INIT-ACK为初始化确认,作用是,触发客户端状态机的转换,以及携带包含了偶联信息的COOKIE至客户端。 为了防止类似于TCP协议的SYNC攻击(指TCP客户端发送海量的SYNC至TCP服务器,导致服务器资源如内存耗尽,从而无法提供服务),服务器发送该消息后,会删除关于该偶联的资源,当收到COOKIE_ECHO后,会根据COOKIE内容恢复出偶联。
所述步骤S10具体包括如下步骤:
S110、第一主机作为活动主机取得SCTP协议栈当前使用的签名密钥,并将所述签名密钥发送给作为备份主机的第二主机。具体的,当活动主机和备份主机完成基本配置后,活动主机通过getsockopt(SCTP_SECRET_KEY)取得SCTP协议栈当前使用的签名密钥;活动主机通过内部IP将签名密钥发送至备份主机。
S120、第二主机设置SCTP协议栈签名密钥。具体的,备份主机通过setsockopt(SCTP_SECRET_KEY)设置SCTP协议栈签名密钥。
S130、所述第一主机打开接收端口,在活动主机打开接收端口后,客户端通过发送INIT建立SCTP偶联。所述第一主机在接收到客户端发出的INIT后,第一主机的内核发送INIT_ACK给客户端。客户端接收到所述INIT_ACK后,将INIT_ACK中包含的COOKIE通过COOKIE_ECHO发送至活动主机。
S140、所述第一主机接收到客户端发出的COOKIE_ECHO后,回复COOKIE_ACK(缓存确认或者信息缓存确认,作用是触发客户端状态机转换,偶联进入已建立状态)给客户端,SCTP偶联建立成功。具体的,活动主机的内核用COMMUNICATION_UP通知应用,SCTP建立成功;COMMUNICATION_UP是内核中SCTP协议通知应用该偶联已经进入连接状态的通信原语。
S150、所述第一主机获取该偶联的COOKIE,并将所述COOKIE备份至第二主机。换而言之,活动主机的应用调用getsockopt(SCTP_COOKIE)获得该偶联的COOKIE,并将COOKIE备份至备份主机。备份主机应用通过setsockopt(SCTP_COOKIE)将该COOKIE保存至内核。
综上所述,本发明提供的实现SCTP协议热备份的方法,主备之间通过COOKIE进行SCTP备份,客户端和服务器之间通过重新启动获得传输同步而实现1+1热备份倒换。采用这种热备份技术,活动主机和备份之间无需频繁同步偶联数据。
基于上述实施例提供的实现SCTP协议热备份的方法,本发明还提供一种实现SCTP协议热备份的系统,请参阅图5,所述系统包括第一主机10、第二主机20和客户端30。所述第一主机10设置有第一内部IP和用于客户端访问的外部IP;所述第二主机20设置有第二内部IP和与第一主机10相同的外部IP;所述第一内部IP和第二内部IP用于第一主机10与第二主机20之间的数据备份。
所述第一主机10,用于与客户端30SCTP偶联,并将偶联的COOKIE备份至第二主机20。所述第一主机具体用于:作为活动主机取得SCTP协议栈当前使用的签名密钥,并将所述签名密钥发送给作为备份主机的第二主机;打开接收端口,在接收到客户端发出的INIT后,第一主机的内核发送INIT_ACK给客户端;在接收到客户端发出的COOKIE_ECHO后,回复COOKIE_ACK给客户端,SCTP偶联建立成功;获取该偶联的COOKIE,并将所述COOKIE备份至第二主机。
所述第二主机20,用于接收第一主机10发送的COOKIE;在第一主机10无法正常工作时,激活偶联;根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复,生成重启COOKIE_ECHO,并发送至客户端30;在进入工作状态后,将内核中的SCTP偶联备份以及签名密钥发送给第一主机10。
所述客户端30,用于根据接收到的所述COOKIE_ECHO,将冲突控制参数恢复至初始值。
具体的,所述第一主机10和第二主机20均为服务器主机,其均包括应用模块110和内核模块120。
所述应用模块110,用于在所述服务器主机作为活动主机时,在服务器主机与客户端SCTP偶联后,获取所述偶联的COOKIE,并将偶联的COOKIE备份至备份主机;在所述服务器主机作为备份主机时,接收活动主机发出的COOKIE,将所述COOKIE保存至内核模块。
所述内核模块120,用于在所述服务器主机作为备份主机时,根据所述COOKIE设置SCTP协议栈签名密钥;在活动主机无法正常工作后激活偶联,根据当前时间设置COOKIE的时间戳,并利用密钥计算签名,生成对应偶联的TCB,使服务器端SCTP偶联完成恢复,并生成重启COOKIE_ECHO,将所述COOKIE_ECHO发送至客户端;在所述客户端的冲突控制参数恢复至初始值后,完成与客户端的SCTP偶联,所述服务器主机转变为活动主机;在所述服务器主机作为活动主机时,当活动主机和备份主机完成基本配置后,通过getsockopt(SCTP_SECRET_KEY)取得SCTP协议栈当前使用的签名密钥;打开接收端口,在接收到客户端发出的INIT后,第一主机的内核发送INIT_ACK给客户端;接收到客户端发出的COOKIE_ECHO后,回复COOKIE_ACK给客户端。
由此可知,本发明提供的SCTP协议热备份的系统,只有在一个服务器主机无法正常工作时才进行主备转换,无需频繁同步偶联数据即可实现热备份。由于所述系统的特点以及原理与方法实施例对应,故在此不再赘述。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。