一种高可靠性的TCP同步备份技术
标签:
tcp同步备份it |
分类: 专利、硬件工程 |
文/林祥
TCP是当今网络世界使用最为普遍的传输层协议,现在网上最流行的协议如FTP、HTTP等都是基于TCP技术的。但今天TCP技术遇到了一个困难,那就是备份问题。
http://www.h3c.com.cn/res/201012/23/20101223_1139151_image001_705333_30008_0.png图1 TCP备份应用场景
如图1所示,Node A和Node B之间建立一条TCP连接。Node B是一台分布式的设备,有主板和备板。正常工作时由主板完成这个TCP连接,主板出现问题由备板接替。这个简单的备份,在使用TCP协议时遇到难题:由于备板无法获知主板上TCP连接运行状态,缓存数据以及已使用的序列号,发生切换时必须重新建立一条新的TCP连接,而这将会导致严重的问题。比如Node B和Node A是两台路由器,之间运行BGP路由协议,一旦重建TCP,就要重新交换路由信息,因此产生路由震荡。虽然GR机制使用后有所好转,但影响依然会存在。
为解决该问题,目前业界采用两种方案,分别如图2和图3所示:
http://www.h3c.com.cn/res/201012/23/20101223_1139152_image002_705333_30008_0.png图2 传统TCP备份流程之一
在图2的方案中,每次Node A与Node B的Main Board之间进行TCP传输时,对于每个报文,主板都把相关的TCP状态信息、收发报文序列号、TCP窗口值等相关信息备份到备板上。图2的方案在一定程度上可以解决问题,但可靠性不够高。发生主备切换时,如果恰好主板和Node A之间正在传输数据,TCP连接的工作状态将无法恢复。
http://www.h3c.com.cn/res/201012/23/20101223_1139153_image003_705333_30008_0.png图3 传统TCP备份流程之二
图3中的方案不是通过备份TCP状态信息,而是把主板接收或发送的报文都复制一份给备板,如果主备采用相同算法,则可以保持一致的TCP状态。图3方案中的主备板是独立的,虽然算法一致,但实际上各进程的调度顺序可能存在差异,要做到完全一致很困难。
事实上,在主备板实现TCP状态严格同步几乎是不可能的。H3C提出了一种高可靠性的TCP备份机制,通过对协议做很小的修改,解决了上述问题。现有的TCP备份总着眼于从本端获得连接状态参数,而主备切换时对端也知道。如果依靠对端来完成这个同步过程,问题就会变得相当简单。本发明定义了一种TCP新功能——失步后的同步功能。如图4所示,当TCP连接的一端发现自己可能和对端失步了,并且判断出是自己造成失步的,则可向对方发起同步要求;对方收到同步要求后,将自己保存的各种TCP状态信息反馈给要求的一方,双方再次确认后达到状态同步。
http://www.h3c.com.cn/res/201012/23/20101223_1139154_image004_705333_30008_0.png图4 TCP同步流程
这个同步的过程,在Node A和Node B都正常的时候作用不大,但在以下过程中会有重要作用,见图5。对于前面讲的分布式系统,这正是解决TCP备份的关键。
http://www.h3c.com.cn/res/201012/23/20101223_1139155_image005_705333_30008_0.png图5 本发明所涉及的TCP备份流程
从图5中可以看出,主板down掉以后,备板接替工作,它只需知道原始的五元组就可以向Node B发起同步请求,完成同步之后,就可以继续和Node A通讯了,这个过程对上层应用几乎是不可见的。当然为了Node B的备板能够顺利接替主板工作,主备板之间上层应用协议做适当的信息备份是必要的,而各种不同协议对此可能有不同的处理方式。在实现中,可考虑复用TCP建立的过程。但还需要解决一个问题:目前TCP建立过程中,回应SYN的第二个握手报文——SYN ACK只携带自己的信息而不会携带对方的信息。所以这里也要对协议进行修改。下面给出一种具体可行的对TCP协议的修改方式。请参考图6的状态机:
http://www.h3c.com.cn/res/201012/23/20101223_1139156_image006_705333_30008_0.png图6 本发明所涉及的TCP备份状态机
图6表示了TCP连接重新同步过程的部分状态机。SYN RCVD*和SYN SENT*表示这两个状态和原来的TCP状态机是有区别的。本发明的SYN Request报文格式可类似标准SYN报文,但Sequence Number为自己当前正在使用的序列号(丢失时填0);Acknowledgment Number填0;置SYN标记,Window置为初始值。本发明的SYN Response报文的格式可类似标准的SYN ACK报文,但Sequence Number为自己正在使用的序列号;Acknowledgment Number为自己记录的对端的序列号;置SYN ACK标记,Window置为当前窗口大小。
本发明目前已经向多个国家提出了专利申请,且在中国和美国都已被授予专利权。
专利点评:很多长期存在的技术难题最后大多是通过简单巧妙的方法解决的,越复杂的方法往往越是不可靠。本发明通过简单修改TCP的状态机,以很小的代价解决目前TCP同步备份机制不可靠的问题,在实际网络中会产生非常好的效果。

加载中…