恢复TCP连接序列号的方法、装置及系统与流程

文档序号:13763297阅读:480来源:国知局
恢复TCP连接序列号的方法、装置及系统与流程

本发明涉及数据通信技术,特别涉及双机环境下主备设备倒换后恢复TCP连接序列号的技术。



背景技术:

TCP序列号用于标识每个报文段,使目的主机可确认已收到指定报文段中的数据。当源主机用于多个报文段发送一个报文时,即使这些报文到达目的主机的顺序不一样,通过序列号也可以使目的主机按顺序排列它们。

在建立连接时发送的第一个报文段中,双方都提供一个初始序列号。TCP标准推荐使用以4ms间隔递增1的计数器值作为这个初始序列号的值。使用计数器可以防止连接关闭再重新连接时出现相同的序列号。

对于那些包含数据的报文段,报文段中第一个数据字节的数量就是初始序列号,其后数据字节按顺序编号。如果源主机使用同样的连接发送另一个报文段,那么这个报文段的序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和。例如,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号为1000,则第二个报文段的序列号即为1100(1000+100),第三个报文段的序列号即为1200(1100+100)。

若序列号增大至最大值时将复位为0。

对于TCP确认号,目的主机返回确认号,使源主机知道某个或几个报文段已被接收。若ACK控制位被设置为1,则该字段有效。确认号等于顺序接收到的最后一个报文段的序号加1的报文段的序列号,即目的主机希望下次接收的报文段的序列号值。返回确认号以后,目的主机认为已接收到小于该确认号的所有序列号对应的报文段。

例如,序列号等于前一个报文段的序列号与前一个报文段中数据字节的数量之和时,假设源主机发送3个报文段,每个报文段有100字节的数据,且第一个报文段的序列号为1000,在目的主机接收到第一个报文段后,目的主机返回含确认号1100的报文段;在目的主机接收到第二个报文段(其序列号为1100)后,目的主机返回含确认号1200的报文段;在目的主机接收到第三个报文段(其序列号为1200)后,目的主机返回含确认号1300的报文段。

目的主机不一定在每次接收到报文段以后都返回确认号,在上述例子中,目的主机可能等到所有3个报文段都收到后,再返回一个含确认号1300的报文段,表示已接收到全部三个报文段共300字节的数据。但如果目的主机在返回含确认号的报文段之前等待时间过长,则源主机会认为数据(报文段)没有到达目的主机,从而自动重发。

上述例子中,若目的主机接收到了序列号为1000的第一个报文段及序列号为1200的最后一个报文段,则可以返回含确认号1100的报文段,但在返回含确认号1300的报文段之前,应该等待序列号为1100的中间报文段。

TCP通信的双方都会保存TCP连接的序列号(本端设备下次发送报文段对应的序列号)及确认号(本端设备期待的下次接收到的对端设备发送来的报文段对应的序列号),若对端设备发送给本端设备的报文段的序列号比本端设备期待的下次接收到的对端设备发送来的报文段对应的序列号小,则表明该报文段之前已接收过,为重传报文。

在双机组网环境(即本端为主设备与备用设备的组网)下,TCP连接的状态通常会每个包都备份一次,这样可以保证主备倒换(即主设备与备用设备倒换)后,备用设备上的TCP连接还是有效的,可以直接与对端设备进行TCP通信。

但目前的这种做法存在几个问题:逐包备份的做法效率低下,且,以更新发送序列号为例,若在主设备A上报文发送后,在新序列号还未备份到备用设备之前,主设备即重启,则等到备用设备升级为主设备时,由于备用设备上的序列号还是之前的序列号,因为此时主设备上更新后的序列号没能同步到备用设备上,这样主备倒换后,TCP连接的序列号就会出错,直接后果就是备用设备使用之前的序列号发送报文给对端设备,而对端设备则会认为这是一次重传报文进而将报文丢弃,从而可能造成报文传输失败。



技术实现要素:

本发明的目的就是解决目前主备设备倒换后,TCP连接序列号可能不匹配导致报文丢弃的问题,提供一种恢复TCP连接序列号的方法、装置及系统。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,提供一种恢复TCP连接序列号的方法,所述方法包括:

主设备与对端设备建立TCP连接,并将所述TCP连接数据备份至备用设备上;

所述备用设备在发生主备切换后切换为新的主设备,根据所备份的TCP连接数据向每一个对应的对端设备发送通知消息;

所述对端设备根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备;

所述新的主设备根据接收到的对端设备发送的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号。

进一步的,所述新的主设备根据接收到的对端设备发送来的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号,包括:

所述新的主设备根据接收到的对端设备发送来的回应消息后,刷新该对端设备对应的TCP连接中的序列号以及期待下次接收到的该对端设备发送来的报文对应的序列号为初始值。

具体的,所述TCP会话数据包括五元组及状态信息。

第二方面,提供另一种恢复TCP连接序列号的方法,所述方法包括:

与主设备建立TCP连接;接收倒换后的新的主设备发送的通知消息;根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备。

第三方面,提供一种恢复TCP连接序列号的装置,所述装置应用于主设备,所述装置包括:

建连模块,用于与各对端设备建立TCP连接,

备份模块,用于将于将与各对端设备建立TCP连接的TCP连接数据备份至备用设备上。

第四方面,提供另一种恢复TCP连接序列号的装置,所述装置应用于备份设备,所述装置包括:

数据保存模块,用于接收并保存主用设备备份的TCP连接数据;

状态切换模块,用于在发生主备切换后切换所在备用设备为新的主设备;

连接更新模块,用于在所述备用设备切换为新的主用设备后,根据数据保存模块所保存的TCP连接数据,向每条TCP连接对应的对端设备发送通知消息;并接收来自每一个对端设备发送的回应消息;

所述连接更新模块,还用于根据接收到的对端设备发送的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号。

进一步的,所述连接更新模块,具体用于:根据接收到的对端设备发送来的回应消息后,刷新该对端设备对应的TCP连接中的序列号以及期待下次接收到的该对端设备发送来的报文对应的序列号为初始值。

具体的,所述TCP连接数据包括五元组及状态信息。

第五方面,提供另一种恢复TCP连接序列号的装置,所述装置应用于对端设备,所述装置包括:

建连模块,用于与主设备建立TCP连接;

连接更新模块,用于接收倒换后的新的主设备发送的通知消息,并根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备。

第六方面,提供一种恢复TCP连接序列号的系统,所述系统包括:

如第第三方面所述的应用于主设备的如权利要求5所述的恢复TCP连接序列号的装置,

如第四方面所述的应用于备份设备的如权利要求6-8所述的恢复TCP连接序列号的装置;

如第五方面应用于对端设备的如权利要求9所述的恢复TCP连接序列号的装置。

本发明的有益效果是,通过上述恢复TCP连接序列号的方法、装置及系统,解决了在双机组网环境下,主备切换后TCP序列号错误导致报文丢弃或TCP连接需要重建的后果,节省系统资源,且因为只备份TCP会话数据中的五元组及状态信息,还可以避免设备TCP状态逐包备份所带来的开销。

附图说明

图1是实施例一提供的恢复TCP连接序列号系统的结构示意图。

图2是实施例二提供的恢复TCP连接序列号的方法流程图。

图3是实施例三提供的恢复TCP连接序列号的方法流程图。

图4是实施例四提供的恢复TCP连接序列号装置的结构框图。

图5是实施例五提供的恢复TCP连接序列号装置的结构框图。

图6是实施例五提供的恢复TCP连接序列号装置的结构框图。

具体实施方式

下面结合实施例及附图,详细描述本发明的技术方案。

实施例一

本发明实施例提供了提供一种恢复TCP连接序列号系统,参见图1所示,包括主设备11及备用设备12,主设备11与备用设备12连接,其中,主设备11用于与各对端设备13建立TCP连接(这里图1中作为示意图仅仅画出了一个对端设备,在实际应用中主设备11与至少一个对端设备13建立TCP连接),并将TCP会话数据备份至备用设备12上;备用设备12用于发生主备切换后,作为新的主设备根据所备份的TCP连接数据向每一个对应的对端设备13发送通知消息,并根据接收到的对端设备发送来的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号。

实施例二

本发明实施例提供了一种访问授权方法,应用于图1中所示的恢复TCP连接序列号系统,参照图2中所示,该方法包括:

S201,主设备与对端设备建立TCP连接,并将所述TCP连接数据备份至备用设备。

具体的,所述TCP连接数据包括五元组及状态信息。

S202,所述备用设备在发生主备切换后切换为新的主设备,根据所备份的TCP连接数据向每一个对应的对端设备发送通知消息。

本步骤中,所述备用设备切换为新的主设备后,遍历每条TCP连接,使用该TCP连接中的五元组信息,给对端设备发送通知消息,通知对端设备本端发生了主备倒换,并等待对端的回应消息。

在本实施例中,通知消息可以采取TCP报文封装也可以采用其他报文格式,只要建立TCP连接的双方约定一致即可。例如携带的内容可以包括消息类型,一个是请求类型,通知对端重置TCP序列号,另一个是响应类型,返回重置确认消息。

S203,所述对端设备根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备。

所述对端设备收到通知消息后,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,更新本地TCP连接中的序列号为1以及期待对端下次报文的序列号为1;并生成回应消息且发送给所述新的主设备。

S204,所述新的主设备根据接收到的对端设备发送的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号。

所述新的备用设备收到对端设备的回应消息后,刷新该对端设备对应的TCP连接中的序列号以及期待下次接收到的该对端设备发送来的报文对应的序列号为初始值。可以刷新本端TCP连接中的序列号为1,以及期待对端的序列号为1。

本发明实施例,双机主备环境下,发生主备倒换后,主动通知对端设备本端发生了切换,并将本地的序列号以及期待对端的序列号设置为初始值,回应对端的通知消息并设置本端的TCP连接序列号以及期待对端的序列号设置为初始值,从而达到TCP连接两端TCP序列号匹配的结果;实现在双机环境下恢复TCP连接序号。

实施例三

本发明实施例提供了另一种访问授权方法,应用于图1中所示的恢复TCP连接序列号系统中的对端设备,参照图3中所示,该方法包括:

S301,与主设备建立TCP连接;接收倒换后的新的主设备发送的通知消息;

S302,根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备。

本发明实施例通过接收通知消息以达到通信两端TCP序列号匹配的结果;进而恢复TCP连接序号。

实施例四

本发明的实施例提供了一种恢复TCP连接序列号装置,应用于图1中所示的恢复TCP连接序列号系统中的主设备11,参照图4中所示,该主设备11包括建连模块111和备份模块112,其中:

建连模块111,用于与各对端设备建立TCP连接。

备份模块112,用于将于将与各对端设备建立TCP连接的TCP连接数据备份至备用设备上。

由于本发明实施例中的主设备可以应用于上述实施例二的恢复TCP连接序列号的方法,因此,其所能获得的技术效果也可参考上述方法实施例,本发明实施例在此不再赘述。

实施例五

本发明的实施例提供了一种恢复TCP连接序列号装置,应用于图1中所示的恢复TCP连接序列号系统中的备份设备12,参照图5中所示,该备份设备12包括数据保存模块121、状态切换模块122和连接更新模块123,其中:

数据保存模块121,用于接收并保存主用设备备份的TCP连接数据。所述TCP连接数据包括五元组及状态信息。

状态切换模块122,用于在发生主备切换后切换所在备用设备为新的主设备。

连接更新模块123,用于在所述备用设备切换为新的主用设备后,根据数据保存模块所保存的TCP连接数据,向每条TCP连接对应的对端设备发送通知消息;并接收来自每一个对端设备发送的回应消息。

所述连接更新模块123,还用于根据接收到的对端设备发送的回应消息刷新该TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号。所述连接更新模块123,具体用于:根据接收到的对端设备发送来的回应消息后,刷新该对端设备对应的TCP连接中的序列号以及期待下次接收到的该对端设备发送来的报文对应的序列号为初始值。

由于本发明实施例中的备份设备可以应用于上述实施例二的恢复TCP连接序列号的方法,因此,其所能获得的技术效果也可参考上述方法实施例,本发明实施例在此不再赘述。

实施例六

本发明的实施例提供了一种恢复TCP连接序列号装置,应用于图1中所示的恢复TCP连接序列号系统中的对端设备13,参照图6中所示,该对端设备13包括建连模块131和连接更新模块132,其中:

建连模块131,用于与主设备建立TCP连接。

连接更新模块132,用于接收倒换后的新的主设备发送的通知消息,并根据所述通知消息,更新本地TCP连接中的序列号以及更新期待接收到的所述新的主设备下次发送来的报文对应的序列号为初始值,并生成回应消息且发送给所述新的主设备。

由于备用设备主动通知了对端设备当前进行了主备切换,对端设备就将本地TCP连接中的序列号及期待接收到的本端新的主用设备(此时即为备用设备)下次发送来的报文对应的序列号分别更新为初始值,而备用设备也将其TCP连接中的序列号及期待下次接收到的对端设备发送来的报文对应的序列号刷新为初始值,这样就与对端设备的序列号对应,同也不会再出现对端设备序列号检查不通过的情况。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1