一种tcp连接与sctp连接互通的方法及装置的制作方法

文档序号:7754185阅读:206来源:国知局
专利名称:一种tcp连接与sctp连接互通的方法及装置的制作方法
技术领域
本发明涉及信令通信的技术领域,特别是涉及一种TCP连接与SCTP连接互通的方法及一种TCP连接与SCTP连接互通的装置。
背景技术
在过去的20年内,作为一种可靠的数据传输方式,TCP提供了许多应用服务,但随着IP网的多业务化,尤其是VolP的发展,TCP出现了很多局限性,例如对于VolP信令及异步基于事务应用的处理。为适应IP网成为电信运营核心网的发展趋势,IETF的信令传输工作组(SIGTRAN) —直在研究和制定IP网新一代的传输协议,并在IETF RFC 2960中定义了流控制传输协议(SCTP,Stream Control Transmission Protocol)。SCTP 是面向连接的可靠传送协议,它向上层应用提供了下列服务应用数据的无错误无重复的可靠传输; 根据检测到的MTU长度进行数据包分段处理,避免IP层的分段;在多个流间的用户消息有序递交及单用户消息按到达顺序递交的选项;以及,通过支持关联的多宿端特性,实现网络级容错。目前,IEFT将SCTP传输层协议作为主要研究目的,与TCP和UDP共筑于IP层之上。同TCP —样,SCTP提供面向连接的、点到点的可靠传输,它继承了 TCP强大的拥塞控制、 数据包丢失发现等功能,任何在TCP上运行的应用都可被移至SCTP上运行。不同于TCP的是,SCTP提供了许多对于信令传输很重要的功能,同时,对于其他一些对性能和可靠性有额外需要的应用,它能提供传输优势来满足这些需要。SCTP和TCP最大的区别在于SCTP对多宿(multihoming)和部分有序(partialordering)的支持。SCTP的多宿使得每个端点可被多个传输地址访问到,选择不同传输地址会导致两个端点间不同的数据路径。由于TCP协议使用非常广泛而且历史悠久,基于TCP协议开发的上层应用程序非常丰富,并广泛地使用在各种通信设备系统中;而SCTP协议是一种新的传输协议,相比于 TCP协议有很多优势,如安全性、多归属、多流等特性。但是,由于SCTP协议及其上层应用的开发是比较新的,而且很多功能特性也在逐渐完善中,很多上层应用协议,如Diameter协议、SIP协议就规定其底层传输协议既可以使用TCP协议,也可以使用SCTP协议。在这种情况下,有些厂商使用的底层传输协议是TCP协议,而另外一些厂商使用的底层传输协议却是SCTP协议。如果把使用TCP协议的上层应用协议强制升级为使用SCTP协议作为底层传输协议,则会耗费很大的人力、物力和成本,同时需要对正在使用的设备进行升级。因而, 如何采用一个TCP协议和SCTP协议互通的机制来完成底层传输协议的屏蔽,实现上层应用协议的正常信令通信,成为本领域技术人员迫切希望解决的一个技术问题。现有技术中,有一个开源的TCP协议和SCTP协议互通转换方法(Transparent TCP-to-SCTP Translation Shim Layer),其互通转换方法原理为将TCP协议的Socket操作映射到SCTP协议的Socket操作上,即在Shim Layer层将TCP的函数,如connect、recv 禾口 send 等,映射为 SCTP 协议的函数,如 sctp_connectx、sctp_recvmsg 及 sctp_sendmsg 等,其本质上是在Shim Layer层中实现了一个模拟层,将TCP协议的Socket请求映射成为SCTP协议的Socket请求,其最终使用的传输协议还是SCTP协议。 具体可以参考图1所示的一个TCP客户机(TCP Client)和SCTP服务器(SCTP Server)使用Shim Layer来TCP连接与SCTP连接互通的示意图。在网络上传输的协议是SCTP协议,上层应用是调用TCP协议的Socket接口(TCP Socket)来实现TCP客户机和SCTP服务器之间的通信。为了实现二者的互通,通过Shim Layer层将上层应用调用的 TCP 协议 Socket 操作(TCP Socket)映射为 SCTP 协议的 Socket 操作(SCTPSocket),这样上层应用真实调用的Socket操作实际为SCTP协议的操作,Shim Layer层实现了 TCP协议和SCTP协议共性的封装,屏蔽了二者差异的部分,最终实现了与SCTP服务器建立传输连接 (SCTPASS0CIATI0N)。可以理解,采用这种方法,对上层应用如Diameter协议其调用的是TCP协议的 Socket接口操作,而实际上通过一个Shim Layer (中介层)将其映射到SCTP协议的Socket 操作上,最终底层的传输协议的是SCTP协议。然而,这种现有技术存在以下技术缺陷1.使用不灵活,需要修改上层应用的TCP\IP协议栈来实现,当使用的TCP/IP协议栈是操作系统的协议栈时,还可能需要重新编译内核来完成Shim Layer层的添加;2.无法进行非阻塞模式的TCP协议的Socket数据收发。这主要是因为Shim Layer 层是应用驱动型的,即当应用在Socket上以阻塞模式请求一个动作时,如Connect或者 Recv,需要通过Shim Layer层来将其替换成SCTP协议的相应函数,并且返回其执行结果; 但是当采用非阻塞模式时,通过Select或Poll轮询将无法进行相应的替换,即Select或者Poll无法识别是真实的SCTP协议的Socket还是采用Shim Layer层来模拟TCP协议的上层应用。3.由于Shim Layer层是独立的,因此应该适配于任何的上层应用,但TCP协议数据是流格式,每次收发报文可能不是完整的,而SCTP协议是面向报文的协议,每次收发数据边界都是完整的,如果在Shim Layer层不做处理,则可能会出现TCP不完整的数据包在 SCTP协议上传输而导致对端接收错误。因而,目前需要本领域技术人员迫切解决的一个技术问题就是如何创新地提出一种使用TCP连接或者SCTP连接的上层应用协议之间的信令通信机制,以在不对现有的上层应用及其运行的系统进行任何修改,不对上层应用的使用进行任何限制的基础上,提高上层应用信令传输的正确性及可靠性。

发明内容
本发明所要解决的技术问题是提供一种TCP连接与SCTP连接互通的方法及装置, 用以在不对现有的上层应用及其运行的系统进行任何修改,不对上层应用的使用进行任何限制的基础上,提高上层应用信令传输的正确性及可靠性。为了解决上述问题,本发明公开了一种TCP连接与SCTP连接互通的方法,包括接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机;依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;当所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。 优选的,当所述源端为TCP主机,目标端为SCTP主机时,所述目标端通信连接建立的过程包括向所述SCTP主机发送INIT报文;接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;向所述SCTP主机发送C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;接收所述SCTP主机发送的C00KIE-ACK响应报文。优选的,所述源端发起的与目标端建立通信连接的请求为TCP主机发送的SYN报文;所述当目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立的过程包括向所述TCP主机发送SYN ACK响应报文;接收所述TCP主机发送的ACK报文。优选的,当所述源端为SCTP主机,目标端为TCP主机时,所述目标端通信连接建立的过程包括向所述TCP主机发送SYN报文;接收所述TCP主机发送的SYN ACK响应报文;向所述TCP主机发送ACK报文。优选的,所述源端发起的与目标端建立通信连接的请求为SCTP主机发送的INIT 报文;所述当目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立的过程包括向所述SCTP主机发送INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;接收所述SCTP主机发送的C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;向所述SCTP主机发送C00KIE-ACK响应报文。优选的,所述的方法,还包括基于所述通信连接进行源端与目标端之间的数据传输。优选的,所述在源端与目标端之间进行数据传输的步骤包括接收TCP主机发送的TCP流数据;将所述TCP流数据解析为SCTP报文数据;将所述SCTP报文数据发送至SCTP主机。优选的,所述将TCP流数据解析为SCTP报文数据的步骤包括按照当前通信采用的上层应用协议,提取所述TCP流数据中的消息边界信息;依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。优选的,所述当前通信采用的上层应用协议为Diameter协议,所述消息边界信息根据所述TCP流数据的报文头中的消息长度信息获得。优选的,所述当前通信采用的上层应用协议为SIP协议,所述消息边界信息根据所述TCP流数据的报文中的结束符 和消息体内容长度获得。优选的,所述在源端与目标端之间进行数据传输的步骤还包括在将所述TCP流数据解析为SCTP报文数据之前,缓存所述TCP流数据。优选的,所述在源端与目标端之间进行数据传输的步骤还包括接收SCTP主机发送的SCTP报文数据;将所述SCTP报文数据按照TCP流数据的格式发送至TCP主机。优选的,所述的方法,还包括当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。优选的,所述终止通信连接的步骤包括接收源端发起的与目标端断开通信连接的第一请求报文;依据所述第一请求报文向目标端发送断开通信连接的第二请求报文;接收所述目标端针对所述第二请求报文回复的第一响应报文;依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文;接收源端针对所述第二响应报文回复的第一关闭确认报文;依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。优选的,所述源端为TCP主机,所述目标端为SCTP主机;所述第一请求报文为TCP主机发送的FIN报文;所述第二请求报文为向SCTP主机发送的SHUTDOWN报文;所述第一响应报文为所述SCTP主机回复的SHUTDOWN ACK响应报文;所述第二响应报文为向TCP主机发送的FIN ACK响应报文;所述第一关闭确认报文为所述TCP主机发送的ACK响应报文;所述第二关闭确认报文为向SCTP主机发送的SHUTD0WNC0MPLETE报文。优选的,所述源端为SCTP主机,所述目标端为TCP主机;所述第一请求报文为SCTP主机发送的SHUTDOWN报文;所述第二请求报文为向TCP主机发送的FIN报文;所述第一响应报文为所述TCP主机回复的FIN ACK响应报文;所述第二响应报文为向所述SCTP主机发送的SHUTDOWN ACK响应报文;
所述第一关闭确认报文为所述SCTP主机发送的SHUTD0WNC0MPLETE报文;所述第二关闭确认报文为向所述TCP主机发送的ACK响应报文。优选的,所述源端为SCTP主机,所述目标端为TCP主机;所述终止通信连接的步骤包括接收SCTP主机发送的SHUTDOWN报文;向TCP主机发送的FIN报文;接收TCP主机针对所述FIN报文回复的ACK响应报文;接收TCP主机发送的FIN报文;向所述TCP主机回复ACK响应报文,以及,向所述SCTP主机发送的SHUTDOWN ACK 响应报文;接收SCTP主机发送的SHUTDOWN COMPLETE报文。优选的,在终止所述源端与目标端之间的通信连接之前,所述的方法还包括
发送所述缓存中TCP的流数据。优选的,所述源端为TCP主机,所述目标端为SCTP主机;当缓存中还有未发送的数据时,所述终止通信连接的步骤包括接收TCP主机发送的FIN报文; 向所述TCP主机回复ACK响应报文;向SCTP主机发送SHUTDOWN报文;接收所述SCTP主机回复的SHUTDOWN ACK响应报文;向所述TCP主机发送FIN报文,以及,向SCTP主机发送SHUTD0WNC0MPLETE报文;接收所述TCP主机回复的ACK响应报文。优选的,在终止所述源端与目标端之间的通信连接时,所述的方法还包括释放所述缓存中的数据。优选的,所述源端与目标端的地址信息包括源端主机的IP地址及源端主机的端口信息;以及,目标端主机的IP地址及目标端主机的端口信息。本发明实施例还公开了一种TCP连接与SCTP连接互通的装置,包括源端请求接收模块,用于接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机;目标端连接发起模块,用于依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;源端连接建立模块,用于在所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。优选的,当所述源端为TCP主机,目标端为SCTP主机时,所述目标端连接发起模块包括INIT报文发送子模块,用于向所述SCTP主机发送INIT报文;INIT-ACK响应报文接收子模块,用于接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文发送子模块,用于向所述SCTP主机发送C00KIE-ECH0报文,所述 C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ACK响应报文。优选的,所述源端发起的与目标端建立通信连接的请求为TCP主机发送的SYN报文;所述源端连接建立模块包括SYN ACK响应报文发送子模块,用于向所述TCP主机发送SYN ACK响应报文;ACK报文接收子模块,用于接收所述TCP主机发送的ACK报文。优选的,当所述源端为SCTP主机,目标端为TCP主机时,所述目标端连接发起模块包括SYN报文发送子模块,用于向所述TCP主机发送SYN报文;SYN ACK响应报文接收子模块,用于接收所述TCP主机发送的SYNACK响应报文;ACK报文发送子模块,用于向所述TCP主机发送ACK报文。
优选的,所述源端发起的与目标端建立通信连接的请求为SCTP主机发送的INIT 报文;所述源端连接建立模块包括INIT-ACK响应报文发送子模块,用于向所述SCTP主机发送INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ECH0报文, 所述C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文发送子模块,用于向所述SCTP主机发送C00KIE-ACK响应报文。优选的,所述的装置,还包括数据传输模块,用于基于所述通信连接进行源端与目标端之间的数据传输。优选的,所述数据传输模块包括TCP流数据接收子模块,用于接收TCP主机发送的TCP流数据;解析子模块,用于将所述TCP流数据解析为SCTP报文数据;SCTP报文数据发送子模块,用于将所述SCTP报文数据发送至SCTP主机。优选的,所述解析子模块包括消息边界信息提取单元,用于按照当前通信采用的上层应用协议,提取所述TCP 流数据中的消息边界信息;分割单元,用于依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。优选的,所述当前通信采用的上层应用协议为Diameter协议,所述消息边界信息根据所述TCP流数据的报文头中的消息长度信息获得。优选的,所述当前通信采用的上层应用协议为SIP协议,所述消息边界信息根据所述TCP流数据的报文中的结束符和消息体内容长度获得。优选的,所述数据传输模块还包括缓存子模块,用于在将所述TCP流数据解析为SCTP报文数据之前,缓存所述TCP 流数据。优选的,所述数据传输模块还包括SCTP报文数据接收子模块,用于接收SCTP主机发送的SCTP报文数据;TCP流数据发送子模块,用于将所述SCTP报文数据按照TCP流数据的格式发送至 TCP主机。优选的,所述的装置,还包括连接终止模块,用于当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。优选的,所述连接终止模块包括第一请求报文接收子模块,用于接收源端发起的与目标端断开通信连接的第一请求报文;第二请求报文发送子模块,用于依据所述第一请求报文向目标端发送断开通信连接的第二请求报文;第一响应报文接收子模块,用于接收所述目标端针对所述第二请求报文回复的第一响应报文; 第二响应报文发送子模块,用于依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文;第一关闭确认报文接收子模块,用于接收源端针对所述第二响应报文回复的第一关闭确认报文;第二关闭确认报文发送子模块,用于依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。优选的,所述源端为TCP主机,所述目标端为SCTP主机;所述第一请求报文为TCP主机发送的FIN报文;所述第二请求报文为向SCTP主机发送的SHUTDOWN报文;所述第一响应报文为所述SCTP主机回复的SHUTDOWN ACK响应报文;所述第二响应报文为向TCP主机发送的FIN ACK响应报文;所述第一关闭确认报文为所述TCP主机发送的ACK响应报文;所述第二关闭确认报文为向SCTP主机发送的SHUTD0WNC0MPLETE报文。优选的,所述源端为SCTP主机,所述目标端为TCP主机;所述第一请求报文为SCTP主机发送的SHUTDOWN报文;所述第二请求报文为向TCP主机发送的FIN报文;所述第一响应报文为所述TCP主机回复的FIN ACK响应报文;所述第二响应报文为向所述SCTP主机发送的SHUTDOWN ACK响应报文;所述第一关闭确认报文为所述SCTP主机发送的SHUTD0WNC0MPLETE报文;所述第二关闭确认报文为向所述TCP主机发送的ACK响应报文。优选的,所述源端为SCTP主机,所述目标端为TCP主机;所述连接终止模块包括SHUTDOWN报文接收子模块,用于接收SCTP主机发送的SHUTDOWN报文;FIN报文发送子模块,用于向TCP主机发送的FIN报文;ACK响应报文接收子模块,用于接收TCP主机针对所述FIN报文回复的ACK响应报文;FIN报文接收子模块,用于接收TCP主机发送的FIN报文;ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文;SHUTDOWN ACK响应报文发送子模块,用于向所述SCTP主机发送的SHUTDOWN ACK 响应报文;SHUTDOWN COMPLETE报文接收子模块,用于接收SCTP主机发送的SHUTDOWN COMPLETE 报文。优选的,所述源端为TCP主机,所述目标端为SCTP主机;当缓存中还有未发送的数据时,所述连接终止模块包括FIN报文接收子模块,用于接收TCP主机发送的FIN报文;ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文;SHUTDOWN报文发送子模块,用于向SCTP主机发送SHUTDOWN报文;SHUTDOWN ACK响应报文接收子模块,用于接收所述SCTP主机回复的SHUTDOWN ACK响应报文;
FIN报文发送子模块,用于向所述TCP主机发送FIN报文; SHUTDOWN COMPLETE 报文发送子模块,用于向 SCTP 主机发送 SHUTDOWN COMPLETE 报文;ACK响应报文接收子模块,用于接收所述TCP主机回复的ACK响应报文。与现有技术相比,本发明具有以下优点1、本发明使用独立的TCP/IP协议栈,对TCP协议栈底层和SCTP协议栈底层进行了一定的修改;独立于上层应用及其运行环境,不需要修改通信两端的上层应用协议或者其使用的TCP/IP协议栈,不存在阻塞和非阻塞的使用方式。在需要不对等协议通信的两端部署本发明的TCP连接与SCTP连接互通转换程序就可以进行信令通信,实现了 TCP连接和 SCTP连接互通转换的独立性和透明性。2、本发明在对TCP协议和SCTP协议底层进行了修改的同时,增加了 TCP连接和 SCTP连接转换的控制管理,即可以根据TCP协议和SCTP协议所处的不同状态来实现下一步连接操作,逐步完成整个TCP连接和SCTP连接全链路的互通建立,数据传输和连接终止等的操作。而所有这些操作都是自动完成,不需要任何人为手工的操作。3、本发明的数据传输可以动态支持多种上层协议的TCP流数据解析,可以将TCP 协议的流数据解析成为一个个完整的上层应用报文,然后发送到SCTP链路上去,具有较强的可靠性及可扩展性,并可以保证上层应用数据传输的正确性。4、本发明可以延长已有系统的使用寿命,减少投资。


图1是现有技术中一个TCP客户机(TCP Client)和SCTP服务器(SCTP Server) 使用Shim Layer来TCP连接与SCTP连接互通的示意图;图2是本发明的一种TCP连接与SCTP连接互通的方法实施例1的步骤流程图;图3是本发明的一种TCP连接与SCTP连接互通的方法实施例2的信令流程图;图4是本发明的一种TCP连接与SCTP连接互通的方法实施例3的信令流程图;图5是本发明的一种在源端与目标端之间进行数据传输的信令流程图;图6是本发明的一个采用Diameter协议的TCP应用连续发送三包Diameter消息示例的信令流程图;图7是本发明的两个TCP主机与两个SCTP主机进行信令通信示例的信令流程图;图8是本发明的一种由TCP主机主动发起正常的连接终止的信令流程图;图9是本发明的一种由SCTP主机主动发起正常的连接终止的信令流程图;图10是本发明的一种由SCTP主机主动发起正常的连接终止的信令流程图;图11是本发明的一种由TCP主机主动发起正常的连接终止的信令流程图;图12是本发明的一种TCP连接和SCTP连接互通实现上层应用协议Diameter通信的完整过程的信令流程图;图13是本发明的一种TCP连接与SCTP连接互通的装置实施例的结构框图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进 一步详细的说明。本发明实施例的核心构思之一在于,使用独立的TCP协议栈和SCTP协议栈,以根据当前TCP协议和SCTP协议所处的不同状态来实现下一步连接操作,逐步完成整个TCP连接和SCTP连接的全链路互通建立、数据传输和连接终止等操作。参考图2,示出了本发明的一种TCP连接与SCTP连接互通的方法实施例1的步骤流程图,具体可以包括以下步骤步骤101、接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机;步骤102、依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;步骤103、当所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。本发明实施例主要用于实现使用TCP传输协议的网元与使用SCTP传输协议的网元之间的信令通信,包括连接建立,信令传输和连接终止等。即所述源端为TCP主机,所述目标端为SCTP主机;或者,所述源端为SCTP主机,所述目标端为TCP主机。公知的是,TCP协议采用三次握手建立一个连接第一次握手建立连接时,客户机发送SYN报文到服务器,并进入SYN_SEND状态, 等待服务器确认;第二次握手服务器收到SYN包,确认客户的SYN,同时自己也发送一个SYN包,即 SYN ACK包,此时服务器进入SYN_RECV状态;第三次握手客户机收到服务器的SYN ACK包,向服务器发送确认包ACK,此包发送完毕,客户机和服务器进入TCP连接建立完成ESTABLISHED状态,完成三次握手。在SCTP中,TCP中的连接被引申为关联(association),即本发明实施例中所述 "SCTP连接”即指“SCTP关联”。一个关联的两个SCTP端点都向对方提供一个SCTP端口号和一个IP地址列表,这样每个关联都由两个SCTP端口号和两个IP地址列表来识别。利用每一端对应组中的任一 IP地址作为相应的源/目的地址来标示本次关联;并通过四次握手,两端SCTP主机交换通信状态第一次握手客户机使用一个INIT报文发起一个连接;第二次握手服务器使用一个INIT-ACK报文进行响应,其中就包括了 cookie (标识这个连接的惟一上下文);第三次握手客户机使用一个C00KIE-ECH0报文进行响应,其中包含了服务器所发送的cookie ;第四次握手服务器为这个连接分配资源,并通过向客户机发送一个C00KIE-ACK 报文对其进行响应。在一次SCTP四次握手中,INIT消息的接收端不必保存任何状态信息或者分配任何资源,它在发送INIT-ACK消息时采用了一种“状态Cookie”机制,该Cookie具有发送端需建立连接的自身状态的全部信息,具体而言,SCTP产生一个状态Cookie的过程如下1.使用收到的INlT和发出的INIT-ACK块中的信息创建一个关联的TCB (传输控制块)。2.在TCB中,把创建时间设置为当前的时间,并且设置COOKIE寿命为协议参数“有效COOKIE寿命”的值。 3.根据TCB,收集重建TCB所需的最小信息子集,将该子集和密钥产生一个 MAC (信息认证编码)。4.结合上述最小信息子集和MAC产生状态Cookie。5.在发送完INIT ACK (包含状态Cookie参数)后,发送方必须删除TCB以及任何与新关联有关的本地资源。其中,INIT和INIT-ACK都必须包含建立初始状态所需的参数一组IP地址,保证可靠传输的初始TSN,每个被接收的SCTP包中必须含有的初始标签,每一端请求发出的流数目和每一端能支持接收的流数目。交换完这些消息之后,miT的发送端以COOKIE-ECHO 消息的方式发送回状态Cookie。接收端根据所接收到的C00KIE-ECH0中的状态Cookie,完整地重建自己的状态,并回送C00KIEACK来确认关联已建立。C00KIE-ECH0和C00KIE-ACK 都可将用户数据消息绑定到各自的包中。这样即使接收再多的INIT消息,接收端也没有任何资源的消耗,它只是把相应重建状态所用的状态Cookie作为参数,包含在每一个回送的 INIT-ACK消息中,最后该状态Cookie会被C00KIE-ECH0消息发送回来,故SCTP采用这种四次握手机制可以防范SYN Flooding等方式的DoS攻击。由于TCP协议与SCTP协议在连接建立过程上的不同,TCP的三次握手和SCTP的四次握手都是在协议栈底层连贯完成的,所以本发明对TCP协议栈底层和SCTP协议栈底层进行了一定的修改,具体修改为,当接收到源端发起的与目标端建立通信连接的请求后,先根据所述请求携带的源端与目标端的地址信息,发起目标端的通信连接建立过程;在所述目标端的通信连接建立完成后,再继续进行源端的通信连接建立过程。其中,TCP协议的修改是在TCP协议适配层完成的,SCTP协议的修改是在SCTP协议适配层完成的,同时增加了 TCP连接和SCTP连接互通转换的控制管理层,用以根据TCP 协议和SCTP协议所处的不同状态,来实现下一步连接操作,从而逐步完成整个TCP连接和 SCTP连接全链路的互通建立,数据传输和连接终止的操作。在这个过程中,任何一端出现连接的正常终止或异常终止都会导致整个通信链路的终止。参考图3所示的本发明的一种TCP连接与SCTP连接互通的方法实施例2的信令流程图,当所述源端为TCP主机,目标端为SCTP主机时,应用本发明的TCP连接与SCTP连接互通转换程序,在源端与目标端之间建立通信连接的过程具体可以包括以下步骤步骤21、接收TCP主机发送的SYN报文,并解析其携带的源端TCP主机的IP地址及端口信息,以及,目标端SCTP主机的IP地址及端口信息;步骤22、依据源端TCP主机的IP地址及端口信息,以及,目标端SCTP主机的IP地址及端口信息,向所述SCTP主机发送INIT报文;步骤23、接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;步骤24、向所述SCTP主机发送C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;步骤25、接收所述SCTP主机发送的C00KIE-ACK响应报文;步骤26、向所述TCP主机发送SYN ACK响应报文;步骤27、接收所述TCP主机发送的ACK报文。
在本实施例中,对于TCP主机发起的第一次握手SYN,不立即回复SYN ACK报文, 而是解析此SYN携带的源主机与目标主机的地址和端口信息,配置到SCTP协议栈中,发起 SCTP连接建立的四次握手过程,在SCTP协议的四次握手过程完成后,才向TCP主机发送第二次握手SYNACK,即再继续完成TCP协议的三次握手过程。参考图4所示的本发明的一种TCP连接与SCTP连接互通的方法实施例3的信令流程图,当所述源端为SCTP主机,目标端为TCP主机时,应用本发明的TCP连接与SCTP连接互通转换程序,在源端与目标端之间建立通信连接的过程具体可以包括以下步骤步骤31、接收SCTP主机发送的INIT报文,并解析其携带的源端SCTP主机的IP地址及端口信息,以及,目标端TCP主机的IP地址及端口信息;步骤32、依据源端SCTP主机的IP地址及端口信息,以及,目标端TCP主机的IP地址及端口信息,向所述TCP主机发送SYN报文;步骤33、接收所述TCP主机发送的SYN ACK响应报文;步骤34、向所述TCP主机发送ACK报文; 步骤35、向所述SCTP主机发送INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;步骤36、接收所述SCTP主机发送的C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;步骤37、向所述SCTP主机发送C00KIE-ACK响应报文。在本实施例中,对于SCTP主机发起的第一次握手INIT,不立即回复INIT ACK报文,而是解析此INIT携带的源主机与目标主机的地址和端口信息,配置到TCP协议栈中,发起TCP连接建立的三次握手过程,在TCP协议的三次握手过程完成后,才向SCTP主机发送第二次握手INIT ACK,即再继续完成SCTP协议的四次握手过程。需要说明的是,尽管在SCTP协议中,SCTP主机的地址包括一个SCTP端口号和一个IP地址列表,在本实施例中,配置到TCP协议栈中的SCTP主机的地址仅为一个SCTP端口号和IP地址列表中的其中一个IP地址,如位于队列头的IP地址。在整个TCP连接和SCTP连接的全链路互通建立完成后,即可在所述通信链路上进行应用数据的传输。即作为本发明的一种优选实施例,本发明还可以包括以下步骤基于所述通信连接进行源端与目标端之间的数据传输。公知的是,TCP协议是面向流的协议(上层应用协议报文之间没有边界),SCTP协议是面向报文的协议(上层应用协议报文之间有明确的边界),也就是说,TCP协议数据是流格式,每次收发报文可能不是完整的,而SCTP协议是面向报文的协议,每次收发数据边界都是完整的,因而实际中可能会出现TCP不完整的数据包在SCTP协议上传输而导致对端接收错误的情况。针对这种情况,本发明实施例采用一种对TCP协议流数据进行分割处理,以转换为SCTP协议的报文数据的机制,该机制针对不同的上层应用协议格式,根据其各自的协议格式将TCP流数据解析为SCTP报文数据,目的是确定TCP流数据中上层应用协议报文的边界。简而言之,本发明实施例中的数据传输是将TCP协议的数据净荷取出来,并且按照上层应用协议将其解析成为一个个完整的上层应用报文,然后发送到SCTP链路上去。例如,对于传输Diameter协议,本发明的TCP连接与SCTP连接互通转换程序收到TCP侧的 Diameter的数据流后,需要根据Diameter协议的编码格式将其进行解析,还原为TCP应用发送时完整的Diameter报文消息,然后发送给SCTP应用。具体而言,参考图5 所示的一种在源端与目标端之间进行数据传输的信令流程图,具体可以包括以下子步骤子步骤S11、接收TCP主机发送的TCP流数据;子步骤S12、将所述TCP流数据解析为SCTP报文数据;在本发明实施例中优选的是,可以通过以下操作将TCP流数据解析为SCTP报文数据(1)按照当前通信采用的上层应用协议,提取所述TCP流数据中的消息边界信息;(2)依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。子步骤S13、将所述SCTP报文数据发送至SCTP主机。为使本领域技术人员更好地理解本发明,以下提供两种应用本发明基于TCP与 SCTP的通信连接进行源端与目标端之间数据传输的示例。示例一参考图6所示的一个采用Diameter协议的TCP应用连续发送三包Diameter 消息(Diameter_A、Diameter_B> Diameter_C)示例的信令流程图,因为发送时间间隔很短,在TCP底层可能会将Diameter_A和Diameter_B封装在一个TCP报文TCP-Diameter A-DiameterB中发送,而Diameter_C封装在第二个TCP报文TCP-Diameter C中发送。在本发明的TCP连接与SCTP连接互通转换程序收到TCP主机发送的第一个TCP报文 TCP-Diameter A-DiameterB 后,不能直接将其净荷 Diameter_A 和 Diameter_B 作为一个 Diameter消息发送到SCTP主机,而是将其解析后分别发送,即按照Diameter协议的报文格式,将TCP-Diameter A-DiameterB解析为 SCTP-Diameter A和 SCTP-Diameter B ;然后再发送到SCTP主机。当收到TCP主机发送的第二个TCP报文TCP-Diameter C后,由于该报文对应一个完整的Diameter消息,于是直接将其转换为SCTP报文格式的数据SCTP-Diameter C,然后发送到SCTP主机;这样SCTP主机才能收到正确的Diameter报文。在具体实现中,对上层应用协议的解析是具体到每一条通信链路的,即不同的通信链路可以使用不同的上层应用解析协议,以保证上层应用数据传输的正确性。示例二参考图7所示的两个TCP主机与两个SCTP主机进行信令通信示例的信令流程图, 在本例中,TCP主机1和SCTP主机1之间使用Diameter协议进行通信,TCP主机2和SCTP 主机2之间使用SIP协议进行通信。本发明实施例是针对每一条通信链路进行各自的协议解析,即对于Diameter协议的上层应用则使用Diameter解析方法,对于SIP协议则使用 SIP解析方法。具体而言,当本发明的TCP连接与SCTP连接互通转换程序收到TCP主机1发送的 Diameter 消息 TCP-Diameter A 后,按照 Diameter 协议的报文格式,将 TCP-Diameter A 解析为SCTP-Diameter A,再发送至SCTP主机1 ;当本发明的TCP连接与SCTP连接互通转换程序收到TCP主机2发送的SIP消息SIP_A后,按照SIP协议的报文格式,将TCP-SIP A解析为SCTP-SIP A,再发送至SCTP主机2。
在具体实现中,对于Diameter协议而言,由于Diameter协议报文头中包含整个 Diameter协议的长度字段,故用于分割TCP流数据的消息边界信息是根据所述TCP流数据的报文头中的消息长度信息获得的。对于SIP协议而言,由于SIP协议报文头中没有总的长度字段,需要一直解析整个报文,综合判断结束符和消息体内容长度来最终确定SIP报文的边界,即其用于分割TCP流数据的消息边界信息是根据所述TCP流数据的报文中的结束符和消息体内容长度获得的。 由于需要对TCP侧的数据进行解析,因而在本发明实施例中优选的是,在将所述 TCP流数据解析为SCTP报文数据之前,还可以对TCP侧的数据进行一定的缓存,即提供一定大小的数据缓冲区来存储TCP侧不完整的数据包,来保证收到完整的上层应用协议报文。在实际中,所述数据传输也可以由SCTP侧发起,即作为一种优选实施例,如图5所示的数据传输步骤还可以包括子步骤S14、接收SCTP主机发送的SCTP报文数据;子步骤S15、将所述SCTP报文数据按照TCP流数据的传输格式发送至TCP主机。在本发明实施例中,实现TCP连接和SCTP连接的互通转换,还包括连接终止的步骤,即作为本发明的一种优选实施例,本发明还可以包括以下步骤当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。公知的是,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。即在现有的TCP协议中,终止一个连接一般需要进行四次握手,具体为第一次握手源端的TCP执行主动关闭(active close),发送一个FIN报文,表示数据发送完毕;第二次握手接收到FIN的目标端TCP执行被动关闭(passive close),回复一个 ACK响应报文;这个FIN由TCP确认,它的接收也作为文件结束符传递给接收端应用进程,因为 FIN的接收意味着应用进程在相应连接上再也接收不到额外数据。第三次握手一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口,即目标端的TCP也发送一个FIN报文。第四次握手接收到这个FIN的源端TCP (即执行主动关闭的那一端)对它进行确认,并回复一个ACK响应报文。在实际中,在TCP协议中,也可以通过三次握手终止一个连接,即执行被动关闭那一端的TCP(目标端TCP)在第二次握手发出的ACK与第三次握手发出的FIN也可以合并成一个报文,即发送一个FIN ACK报文。在第二次握手与第三次握手之间可以有从执行被动关闭端到执行主动关闭端的数据流,这称为半关闭(half close),即连接的一端在结束它的发送后还能接收来自另一端数据的能力。源端TCP发送FIN,目标端TCP发送对这个FIN的ACK报文。当收到半关闭的一端在完成它的数据传送后,才发送FIN关闭这个方向的连接,源端再对这个FIN确认, 这个连接才彻底关闭。
作为面向连接的传输协议,SCTP也运用三次握手来关闭一个关联,但与TCP有一点不同一个TCP终端在“关联关闭”的过程中能够保持连接开启,并从对端接收新的数据, 而SCTP不支持TCP的这种“半关闭”状态。具体而言,在现有的SCTP协议中,终止一个SCTP关联的过程为 1、主机A发出“关闭”(SHUTDOWN)块来终止与主机B的关联,主机A不再接受上层应用的数据,只发送队列中剩余的数据;2、主机B —旦接收到“关闭”报文,也不再接受上层应用的数据,只发送队列中剩余的数据;3、主机A再次发送“关闭,,±夬,通知主机B所发送的剩余数据已到达,并且重申了关联正在关闭;4、当第二次收到“关闭”块时,主机B发送“确认关闭”(SHUTD0WNACK)块;5、主机A随后发送“关闭结束”(SHUTDOWN COMPLETE)块,完成本次关联的关闭。由于TCP协议与SCTP协议在连接终止过程上的不同,TCP的四次握手和SCTP的三次握手都是在协议栈底层连贯完成的,所以本发明对TCP协议栈底层和SCTP协议栈底层进行了一定的修改,其中,TCP协议的修改是在TCP协议适配层完成的,SCTP协议的修改是在SCTP协议适配层完成的,同时增加了 TCP连接和SCTP连接互通转换的控制管理层,用以根据TCP协议和SCTP协议所处的不同状态,来实现下一步的连接终止的操作。在本发明的一种优选实施例中,所述终止通信连接的步骤具体可以包括以下操作接收源端发起的与目标端断开通信连接的第一请求报文;依据所述第一请求报文向目标端发送断开通信连接的第二请求报文;接收所述目标端针对所述第二请求报文回复的第一响应报文;依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文;接收源端针对所述第二响应报文回复的第一关闭确认报文;依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。参考图8所示的由TCP主机主动发起正常的连接终止的信令流程图,当所述源端为TCP主机,所述目标端为SCTP主机时,应用本发明的TCP连接与SCTP连接互通转换程序执行终止通信连接的操作具体可以包括以下步骤步骤81、接收TCP主机发送的FIN报文;
步骤82、向SCTP主机发送SHUTDOWN报文;步骤83、接收所述SCTP主机回复的SHUTDOWN ACK响应报文;步骤84、向TCP主机发送FIN ACK响应报文;步骤85、接收所述TCP主机发送的ACK响应报文;步骤86、向所述SCTP主机发送SHUTDOWN COMPLETE报文。在本实施例中,TCP侧首先发起链路关闭,发送FIN报文,在本发明的TCP连接与 SCTP连接互通转换程序收到FIN后,为了保证SCTP侧的数据能发送完成,向SCTP应用发送 SHUTDOWN报文,只有在收到SHUTDOWN ACK之后(这时候SCTP侧没有要发送的数据了),向 TCP侧发送FIN ACK报文,实现整个链路的完全关闭,从而保证TCP侧和SCTP侧在链路终止时数据收发的完整性。
参考图9所示的由SCTP主机主动发起正常的连接终止的信令流程图,当所述源端为SCTP主机,所述目标端为TCP主机时,应用本发明的TCP连接与SCTP连接互通转换程序执行终止通信连接的操作具体可以包括以下步骤步骤91、接收SCTP主机发送的SHUTDOWN报文;步骤92、向TCP主机发送FIN报文; 步骤93、接收所述TCP主机回复的FIN ACK响应报文;
步骤94、向所述SCTP主机发送SHUTDOWN ACK响应报文;步骤95、接收所述SCTP主机发送的SHUTDOWN COMPLETE报文;步骤96、向所述TCP主机发送ACK响应报文。在本实施例中,SCTP侧首先发起链路关闭,发送SHUTDOWN报文,在本发明的TCP连接与SCTP连接互通转换程序收到SHUTDOWN后,为了保证TCP侧的数据能发送完成,向TCP 应用发送FIN报文,只有在收到TCP侧发送的FIN ACK之后,才认为没有数据需要传输了, 链路可以关闭。于是向SCTP侧发送SHUTDOWN ACK报文,当接收到SCTP侧发送的确认关闭完成的SHUTDOWN COMPLETE报文后,向TCP侧发送ACK响应报文,以实现整个链路的完全关闭,从而保证TCP侧和SCTP侧在链路终止时数据收发的完整性。上述两个终止连接操作都是针对TCP的三次握手关闭协议做出的,作为本发明的另一种实施例,所述终止连接操作还可以针对TCP的四次握手关闭协议做出,具体参考图10所示的由SCTP主机主动发起正常的连接终止的信令流程图,当所述源端为SCTP主机,所述目标端为TCP主机时,应用本发明的TCP连接与SCTP连接互通转换程序执行终止通信连接的操作具体可以包括以下步骤步骤11、接收SCTP主机发送的SHUTDOWN报文;步骤12、向TCP主机发送FIN报文;步骤13、接收所述TCP主机针对所述FIN报文回复的ACK响应报文;步骤14、接收所述TCP主机发送的FIN报文;步骤15、向所述TCP主机回复ACK响应报文,以及,向所述SCTP主机发送的 SHUTDOWN ACK响应报文;步骤16、接收SCTP主机发送的SHUTDOWN COMPLETE报文。可以看出,在本发明实施例中,当本发明的TCP连接与SCTP连接互通转换程序收到SCTP应用发送的SHUTDOWN数据包后,开始向TCP应用发送FIN数据包,此时不管TCP应用是按照三次握手关闭(FIN+ACK)还是四次握手关闭(FIN和ACK),都是在收到TCP应用发送的FIN后才认为没有数据需要传输了,链路可以关闭,这时候向SCTP应用发送SHUTDOWN ACK完成关闭。在具体实现中,在检测到TCP侧或者SCTP侧任何一侧发生链路异常后,都会进行全链路的拆除工作的。对于TCP异常关闭,则直接进行全链路的拆除工作并且释放其缓冲的数据;对于TCP,如果存在半关闭的情况,则会把SCTP适配侧缓冲的数据发送完后才进行全链路的拆除。作为本发明的另一种实施例,参考图11所示的由TCP主机主动发起正常的连接终止的信令流程图,当所述源端为TCP主机,所述目标端为SCTP主机,缓存中还有未发送的数据时,应用本发明的TCP连接与SCTP连接互通转换程序执行终止通信连接的操作具体可以包括以下步骤 步骤111、接收TCP主机发送的FIN报文;步骤112、向所述TCP主机回复ACK响应报文;步骤113、向SCTP主机发送SHUTDOWN报文;步骤114、接收所述SCTP主机回复的SHUTDOWN ACK响应报文;步骤115、向所述TCP主机发送FIN报文,以及,向SCTP主机发送SHUTDOWN COMPLETE 报文;步骤116、接收所述TCP主机回复的ACK响应报文。在本实施例中,TCP侧首先发起链路关闭,发送FIN报文,本发明的TCP连接与 SCTP连接互通转换程序在收到FIN后,如果SCTP侧缓冲中还有数据要发送,则采用半关闭的方式,先向TCP应用回发ACK数据报文,然后开始向SCTP应用发送SHUTDOWN报文,只有在收到SHUTDOWN ACK之后(这时候SCTP侧没有要发送的数据了),然后向TCP侧发送FIN 报文,实现整个链路的关闭。另外,如图8所示,如果SCTP侧缓存中没有数据要发送(不需要半关闭),则可以将上述过程简化为TCP侧的三次握手关闭,即将FIN和ACK包合并为一步来发送。本发明可以保证TCP侧和SCTP侧在链路正常终止时数据收发的完整性。为使本领域技术人员更好地理解本发明,以下提供一个TCP连接和SCTP连接互通实现上层应用协议Diameter通信的完整过程示例。在执行互通转换之前,需要进行转换配置,首先配置哪一个TCP客户端需要进行链路转换,即配置图中TCP应用的IP+P0RT四元组,即源端主机的IP地址及源端主机的端口信息;以及,目标端主机的IP地址及目标端主机的端口信息,其次在此转换链路上配置解析的上层应用协议为Diameter协议,最后启动本发明的TCP连接与SCTP连接互通转换程序。参考图12所示TCP连接和SCTP连接互通实现上层应用协议Diameter通信的完整过程的信令流程图,其中源端为TCP主机,目标端为SCTP主机时,本例具体可以包括以下步骤一、通信连接建立过程步骤121、接收TCP主机发送的SYN报文,并解析其携带的源端TCP主机的IP地址及端口信息,以及,目标端SCTP主机的IP地址及端口信息;步骤122、依据源端TCP主机的IP地址及端口信息,以及,目标端SCTP主机的IP 地址及端口信息,向所述SCTP主机发送INIT报文;步骤123、接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;步骤124、向所述SCTP主机发送C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;步骤125、接收所述SCTP主机发送的C00KIE-ACK响应报文;步骤126、向所述TCP主机发送SYN ACK响应报文;步骤127、接收所述TCP主机发送的ACK报文。二、数据传输过程步骤128、接收TCP主机发送的TCP流数据;
步骤129、将所述TCP流数据解析为SCTP报文数据;步骤130、将所述SCTP报文数据发送至SCTP主机。步骤131、接收SCTP主机发送的SCTP报文数据;步骤132、将所述SCTP报文数据按照TCP流数据的传输格式发送至TCP主机;三、连接终止过程步骤133、接收TCP主机发送的FIN报文;步骤134、向所述TCP主机回复ACK响应报文;步骤135、向SCTP主机发送SHUTDOWN报文;步骤136、接收所述SCTP主机回复的SHUTDOWN ACK响应报文;步骤137、向所述TCP主机发送FIN报文,以及,向SCTP主机发送SHUTDOWN COMPLETE 报文;步骤138、接收所述TCP主机回复的ACK响应报文。需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。参考图13,示出了本发明的一种TCP连接与SCTP连接互通的装置实施例的结构框图,具体可以包括以下模块源端请求接收模块1301,用于接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为 SCTP主机;目标端连接发起模块1302,用于依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;源端连接建立模块1303,用于在所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。在本发明的一种优选实施例中,当所述源端为TCP主机,目标端为SCTP主机时,所述目标端连接发起模块可以包括以下子模块INIT报文发送子模块,用于向所述SCTP主机发送INIT报文;INIT-ACK响应报文接收子模块,用于接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文发送子模块,用于向所述SCTP主机发送C00KIE-ECH0报文,所述 C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ACK响应报文。在本实施例中,所述源端发起的与目标端建立通信连接的请求为TCP主机发送的 SYN报文;所述源端连接建立模块具体可以包括以下子模块SYN ACK响应报文发送子模块,用于向所述TCP主机发送SYN ACK响应报文;ACK报文接收子模块,用于接收所述TCP主机发送的ACK报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间建立通信连接的过程,可以参考图3所示的信令流程图。在本发明的另一种优选实施例中,当所述源端为SCTP主机,目标端为TCP主机时, 所述目标端连接发起模块可以包括以下模块SYN报文发送子模块,用于向所述TCP主机发送SYN报文;SYN ACK响应报文接收子模块,用于接收所述TCP主机发送的SYNACK响应报文;ACK报文发送子模块,用于向所述TCP主机发送ACK报文。在本实施例中,所述源端发起的与目标端建立通信连接的请求为SCTP主机发送的INIT报文;所述源端连接建立模块具体可以包括以下子模块INIT-ACK响应报文发送子模块,用于向所述SCTP主机发送INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ECH0报文, 所述C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文发送子模块,用于向所述SCTP主机发送C00KIE-ACK响应报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间建立通信连接的过程可以参考图4所示的信令流程图。在本发明实施例中,优选的是,还可以包括数据传输模块,用于基于所述通信连接进行源端与目标端之间的数据传输。作为本发明的一种优选实施例,所述数据传输模块具体可以包括以下子模块TCP流数据接收子模块,用于接收TCP主机发送的TCP流数据;解析子模块,用于将所述TCP流数据解析为SCTP报文数据;SCTP报文数据发送子模块,用于将所述SCTP报文数据发送至SCTP主机。更为优选的是,所述解析子模块可以包括以下单元消息边界信息提取单元,用于按照当前通信采用的上层应用协议,提取所述TCP 流数据中的消息边界信息;分割单元,用于依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。在具体实现中,如所述当前通信采用的上层应用协议为Diameter协议,则所述消息边界信息可以根据所述TCP流数据的报文头中的消息长度信息获得。如所述当前通信采用的上层应用协议为SIP协议,则所述消息边界信息可以根据所述TCP流数据的报文中的结束符和消息体内容长度获得。由于需要对TCP侧的数据进行解析,因而作为本发明的一种优选实施例,所述数据传输模块还可以包括以下子模块缓存子模块,用于在将所述TCP流数据解析为SCTP报文数据之前,缓存所述TCP 流数据。在实际中,所述数据传输也可以由SCTP侧发起,即作为一种优选实施例,所述数据传输模块还可以包括以下子模块SCTP报文数据接收子模块,用于接收SCTP主机发送的SCTP报文数据;TCP流数据发送子模块,用于将所述SCTP报文数据按照TCP流数据的格式发送至TCP主机。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间建立数据传输的过程可以参考图5所示的信令流程图。在本发明实施例中,优选的是,还可以包括连接终止模块,用于当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。作为本发明的一种优选实施例,所述连接终止模块可以包括以下子模块第一请求报文接收子模块,用于接收源端发起的与目标端断开通信连接的第一请求报文;第二请求报文发送子模块,用于依据所述第一请求报文向目标端发送断开通信连接的第二请求报文;第一响应报文接收子模块,用于接收所述目标端针对所述第二请求报文回复的第一响应报文;第二响应报文发送子模块,用于依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文;第一关闭确认报文接收子模块,用于接收源端针对所述第二响应报文回复的第一关闭确认报文;第二关闭确认报文发送子模块,用于依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。在具体实现中,当所述源端为TCP主机,所述目标端为SCTP主机时,所述第一请求报文为TCP主机发送的FIN报文;所述第二请求报文为向SCTP主机发送的SHUTDOWN报文; 所述第一响应报文为所述SCTP主机回复的SHUTDOWN ACK响应报文;所述第二响应报文为向TCP主机发送的FIN ACK响应报文;所述第一关闭确认报文为所述TCP主机发送的ACK 响应报文;所述第二关闭确认报文为向SCTP主机发送的SHUTDOWN COMPLETE报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间终止通信连接的过程可以参考图8所示的信令流程图。作为另一种实现方式,当所述源端为SCTP主机,所述目标端为TCP主机;所述第一请求报文为SCTP主机发送的SHUTDOWN报文;所述第二请求报文为向TCP主机发送的FIN 报文;所述第一响应报文为所述TCP主机回复的FIN ACK响应报文;所述第二响应报文为向所述SCTP主机发送的SHUTDOWN ACK响应报文;所述第一关闭确认报文为所述SCTP主机发送的SHUTDOWN COMPLETE报文;所述第二关闭确认报文为向所述TCP主机发送的ACK响应报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间终止通信连接的过程可以参考图9所示的信令流程图。作为本发明的另一种优选实施例,当所述源端为SCTP主机,所述目标端为TCP主机时;所述连接终止模块可以包括以下子模块SHUTDOWN报文接收子模块,用于接收SCTP主机发送的SHUTDOWN报文;FIN报文发送子模块,用于向TCP主机发送的FIN报文;ACK响应报文接收子模块,用于接收TCP主机针对所述FIN报文回复的ACK响应报文;FIN报文接收子模块,用于接收TCP主机发送的FIN报文;ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文;SHUTDOWN ACK响应报文发送子模块,用于向所述SCTP主机发送的SHUTDOWN ACK 响应报文;SHUTDOWN COMPLETE报文接收子模块,用于接收SCTP主机发送的SHUTDOWN COMPLETE 报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间终止通信连接的过程可以参考图10所示的信令流程图。作为本发明的另一种优选实施例,当所述源端为TCP主机,所述目标端为SCTP主机;并且,缓存中还有未发送的数据时,所述连接终止模块可以包括以下子模块FIN报文接收子模块,用于接收TCP主机发送的FIN报文;ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文;
SHUTDOWN报文发送子模块,用于向SCTP主机发送SHUTDOWN报文;SHUTDOWN ACK响应报文接收子模块,用于接收所述SCTP主机回复的SHUTDOWN ACK响应报文;FIN报文发送子模块,用于向所述TCP主机发送FIN报文;SHUTDOWN COMPLETE 报文发送子模块,用于向 SCTP 主机发送 SHUTDOWN COMPLETE 报文;ACK响应报文接收子模块,用于接收所述TCP主机回复的ACK响应报文。上述应用本发明的TCP连接与SCTP连接互通装置,在源端与目标端之间终止通信连接的过程可以参考图12所示的信令流程图。对于装置实施例而言,由于其与前述的方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。以上对本发明所提供的一种TCP连接与SCTP连接互通的方法及一种TCP连接与 SCTP连接互通的装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种TCP连接与SCTP连接互通的方法,其特征在于,包括接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机;依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程; 当所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。
2.如权利要求1所述的方法,其特征在于,当所述源端为TCP主机,目标端为SCTP主机时,所述目标端通信连接建立的过程包括向所述SCTP主机发送INIT报文;接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;向所述SCTP主机发送C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识 cookie ;接收所述SCTP主机发送的C00KIE-ACK响应报文。
3.如权利要求2所述的方法,其特征在于,所述源端发起的与目标端建立通信连接的请求为TCP主机发送的SYN报文;所述当目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立的过程包括向所述TCP主机发送SYN ACK响应报文; 接收所述TCP主机发送的ACK报文。
4.如权利要求1所述的方法,其特征在于,当所述源端为SCTP主机,目标端为TCP主机时,所述目标端通信连接建立的过程包括向所述TCP主机发送SYN报文; 接收所述TCP主机发送的SYN ACK响应报文; 向所述TCP主机发送ACK报文。
5.如权利要求4所述的方法,其特征在于,所述源端发起的与目标端建立通信连接的请求为SCTP主机发送的INIT报文;所述当目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立的过程包括向所述SCTP主机发送INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;接收所述SCTP主机发送的C00KIE-ECH0报文,所述C00KIE-ECH0报文中包括所述上下文标识cookie ;向所述SCTP主机发送C00KIE-ACK响应报文。
6.如权利要求1所述的方法,其特征在于,还包括 基于所述通信连接进行源端与目标端之间的数据传输。
7.如权利要求6所述的方法,其特征在于,所述在源端与目标端之间进行数据传输的步骤包括接收TCP主机发送的TCP流数据; 将所述TCP流数据解析为SCTP报文数据; 将所述SCTP报文数据发送至SCTP主机。
8.如权利要求7所述的方法,其特征在于,所述将TCP流数据解析为SCTP报文数据的步骤包括按照当前通信采用的上层应用协议,提取所述TCP流数据中的消息边界信息; 依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。
9.如权利要求8所述的方法,其特征在于,所述当前通信采用的上层应用协议为 Diameter协议,所述消息边界信息根据所述TCP流数据的报文头中的消息长度信息获得。
10.如权利要求8所述的方法,其特征在于,所述当前通信采用的上层应用协议为SIP 协议,所述消息边界信息根据所述TCP流数据的报文中的结束符和消息体内容长度获得。
11.如权利要求7所述的方法,其特征在于,所述在源端与目标端之间进行数据传输的步骤还包括在将所述TCP流数据解析为SCTP报文数据之前,缓存所述TCP流数据。
12.如权利要求7所述的方法,其特征在于,所述在源端与目标端之间进行数据传输的步骤还包括接收SCTP主机发送的SCTP报文数据;将所述SCTP报文数据按照TCP流数据的格式发送至TCP主机。
13.如权利要求1所述的方法,其特征在于,还包括当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。
14.如权利要求13所述的方法,其特征在于,所述终止通信连接的步骤包括 接收源端发起的与目标端断开通信连接的第一请求报文;依据所述第一请求报文向目标端发送断开通信连接的第二请求报文; 接收所述目标端针对所述第二请求报文回复的第一响应报文; 依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文; 接收源端针对所述第二响应报文回复的第一关闭确认报文; 依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。
15.如权利要求14所述的方法,其特征在于,所述源端为TCP主机,所述目标端为SCTP 主机;所述第一请求报文为TCP主机发送的FIN报文; 所述第二请求报文为向SCTP主机发送的SHUTDOWN报文; 所述第一响应报文为所述SCTP主机回复的SHUTDOWN ACK响应报文; 所述第二响应报文为向TCP主机发送的FIN ACK响应报文; 所述第一关闭确认报文为所述TCP主机发送的ACK响应报文; 所述第二关闭确认报文为向SCTP主机发送的SHUTD0WNC0MPLETE报文。
16.如权利要求14所述的方法,其特征在于,所述源端为SCTP主机,所述目标端为TCP 主机;所述第一请求报文为SCTP主机发送的SHUTDOWN报文;所述第二请求报文为向TCP主机发送的FIN报文;所述第一响应报文为所述TCP主机回复的FIN ACK响应报文;所述第二响应报文为向所述SCTP主机发送的SHUTDOWN ACK响应报文;所述第一关闭确认报文为所述SCTP主机发送的SHUTD0WNC0MPLETE报文;所述第二关闭确认报文为向所述TCP主机发送的ACK响应报文。
17.如权利要求13所述的方法,其特征在于,所述源端为SCTP主机,所述目标端为TCP 主机;所述终止通信连接的步骤包括接收SCTP主机发送的SHUTDOWN报文; 向TCP主机发送的FIN报文;接收TCP主机针对所述FIN报文回复的ACK响应报文; 接收TCP主机发送的FIN报文;向所述TCP主机回复ACK响应报文,以及,向所述SCTP主机发送的SHUTDOWN ACK响应报文;接收SCTP主机发送的SHUTDOWN COMPLETE报文。
18.如权利要求13所述的方法,其特征在于,在终止所述源端与目标端之间的通信连接之前,所述的方法还包括发送所述缓存中TCP的流数据。
19.如权利要求18所述的方法,其特征在于,所述源端为TCP主机,所述目标端为SCTP 主机;当缓存中还有未发送的数据时,所述终止通信连接的步骤包括接收TCP主机发送的FIN报文; 向所述TCP主机回复ACK响应报文; 向SCTP主机发送SHUTDOWN报文; 接收所述SCTP主机回复的SHUTDOWN ACK响应报文;向所述TCP主机发送FIN报文,以及,向SCTP主机发送SHUTD0WNC0MPLETE报文; 接收所述TCP主机回复的ACK响应报文。
20.如权利要求13所述的方法,其特征在于,在终止所述源端与目标端之间的通信连接时,所述的方法还包括释放所述缓存中的数据。
21.如权利要求1所述的方法,其特征在于,所述源端与目标端的地址信息包括源端主机的IP地址及源端主机的端口信息;以及,目标端主机的IP地址及目标端主机的端口信息ο
22.—种TCP连接与SCTP连接互通的装置,其特征在于,包括源端请求接收模块,用于接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机; 目标端连接发起模块,用于依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;源端连接建立模块,用于在所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。
23.如权利要求22所述的装置,其特征在于,当所述源端为TCP主机,目标端为SCTP主机时,所述目标端连接发起模块包括INIT报文发送子模块,用于向所述SCTP主机发送INIT报文;INIT-ACK响应报文接收子模块,用于接收所述SCTP主机发送的INIT-ACK响应报文,所述INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文发送子模块,用于向所述SCTP主机发送C00KIE-ECH0报文,所述 C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ACK响应报文。
24.如权利要求23所述的装置,其特征在于,所述源端发起的与目标端建立通信连接的请求为TCP主机发送的SYN报文;所述源端连接建立模块包括SYN ACK响应报文发送子模块,用于向所述TCP主机发送SYN ACK响应报文; ACK报文接收子模块,用于接收所述TCP主机发送的ACK报文。
25.如权利要求22所述的装置,其特征在于,当所述源端为SCTP主机,目标端为TCP主机时,所述目标端连接发起模块包括SYN报文发送子模块,用于向所述TCP主机发送SYN报文;SYN ACK响应报文接收子模块,用于接收所述TCP主机发送的SYNACK响应报文;ACK报文发送子模块,用于向所述TCP主机发送ACK报文。
26.如权利要求25所述的装置,其特征在于,所述源端发起的与目标端建立通信连接的请求为SCTP主机发送的INIT报文;所述源端连接建立模块包括INIT-ACK响应报文发送子模块,用于向所述SCTP主机发送INIT-ACK响应报文,所述 INIT-ACK报文包括标识当前连接的唯一上下文标识cookie ;C00KIE-ECH0报文接收子模块,用于接收所述SCTP主机发送的C00KIE-ECH0报文,所述 C00KIE-ECH0报文中包括所述上下文标识cookie ;C00KIE-ACK响应报文发送子模块,用于向所述SCTP主机发送C00KIE-ACK响应报文。
27.如权利要求22所述的装置,其特征在于,还包括数据传输模块,用于基于所述通信连接进行源端与目标端之间的数据传输。
28.如权利要求27所述的装置,其特征在于,所述数据传输模块包括 TCP流数据接收子模块,用于接收TCP主机发送的TCP流数据;解析子模块,用于将所述TCP流数据解析为SCTP报文数据;SCTP报文数据发送子模块,用于将所述SCTP报文数据发送至SCTP主机。
29.如权利要求观所述的装置,其特征在于,所述解析子模块包括消息边界信息提取单元,用于按照当前通信采用的上层应用协议,提取所述TCP流数据中的消息边界信息;分割单元,用于依据所述消息边界信息分割当前的TCP流数据,并转换为SCTP报文数据格式。
30.如权利要求四所述的装置,其特征在于,所述当前通信采用的上层应用协议为 Diameter协议,所述消息边界信息根据所述TCP流数据的报文头中的消息长度信息获得。
31.如权利要求四所述的装置,其特征在于,所述当前通信采用的上层应用协议为SIP 协议,所述消息边界信息根据所述TCP流数据的报文中的结束符和消息体内容长度获得。
32.如权利要求27所述的装置,其特征在于,所述数据传输模块还包括缓存子模块,用于在将所述TCP流数据解析为SCTP报文数据之前,缓存所述TCP流数据。
33.如权利要求27所述的装置,其特征在于,所述数据传输模块还包括SCTP报文数据接收子模块,用于接收SCTP主机发送的SCTP报文数据; TCP流数据发送子模块,用于将所述SCTP报文数据按照TCP流数据的格式发送至TCP 主机。
34.如权利要求22所述的装置,其特征在于,还包括连接终止模块,用于当完成通信或通信连接发生异常时,终止所述源端与目标端之间的通信连接。
35.如权利要求34所述的装置,其特征在于,所述连接终止模块包括第一请求报文接收子模块,用于接收源端发起的与目标端断开通信连接的第一请求报文;第二请求报文发送子模块,用于依据所述第一请求报文向目标端发送断开通信连接的第二请求报文;第一响应报文接收子模块,用于接收所述目标端针对所述第二请求报文回复的第一响应报文;第二响应报文发送子模块,用于依据所述第一响应报文向源端发送针对第一请求报文的第二响应报文;第一关闭确认报文接收子模块,用于接收源端针对所述第二响应报文回复的第一关闭确认报文;第二关闭确认报文发送子模块,用于依据所述第一关闭确认报文,向目标端发送第二关闭确认报文。
36.如权利要求35所述的装置,其特征在于,所述源端为TCP主机,所述目标端为SCTP 主机;所述第一请求报文为TCP主机发送的FIN报文; 所述第二请求报文为向SCTP主机发送的SHUTDOWN报文; 所述第一响应报文为所述SCTP主机回复的SHUTDOWN ACK响应报文; 所述第二响应报文为向TCP主机发送的FINACK响应报文; 所述第一关闭确认报文为所述TCP主机发送的ACK响应报文; 所述第二关闭确认报文为向SCTP主机发送的SHUTDOWNCOMPLETE报文。
37.如权利要求35所述的装置,其特征在于,所述源端为SCTP主机,所述目标端为TCP 主机;所述第一请求报文为SCTP主机发送的SHUTDOWN报文;所述第二请求报文为向TCP主机发送的FIN报文;所述第一响应报文为所述TCP主机回复的FIN ACK响应报文;所述第二响应报文为向所述SCTP主机发送的SHUTDOWN ACK响应报文;所述第一关闭确认报文为所述SCTP主机发送的SHUTDOWNCOMPLETE报文;所述第二关闭确认报文为向所述TCP主机发送的ACK响应报文。
38.如权利要求34所述的装置,其特征在于,所述源端为SCTP主机,所述目标端为TCP 主机;所述连接终止模块包括SHUTDOWN报文接收子模块,用于接收SCTP主机发送的SHUTDOWN报文; FIN报文发送子模块,用于向TCP主机发送的FIN报文;ACK响应报文接收子模块,用于接收TCP主机针对所述FIN报文回复的ACK响应报文; FIN报文接收子模块,用于接收TCP主机发送的FIN报文; ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文; SHUTDOWN ACK响应报文发送子模块,用于向所述SCTP主机发送的SHUTDOWN ACK响应报文;SHUTDOWN COMPLETE报文接收子模块,用于接收SCTP主机发送的SHUTDOWN COMPLETE 报文。
39.如权利要求34所述的装置,其特征在于,所述源端为TCP主机,所述目标端为SCTP 主机;当缓存中还有未发送的数据时,所述连接终止模块包括 FIN报文接收子模块,用于接收TCP主机发送的FIN报文; ACK响应报文发送子模块,用于向所述TCP主机回复ACK响应报文; SHUTDOWN报文发送子模块,用于向SCTP主机发送SHUTDOWN报文; SHUTDOWN ACK响应报文接收子模块,用于接收所述SCTP主机回复的SHUTDOWNACK响应报文;FIN报文发送子模块,用于向所述TCP主机发送FIN报文;SHUTDOWN COMPLETE报文发送子模块,用于向SCTP主机发送SHUTDOWN COMPLETE报文; ACK响应报文接收子模块,用于接收所述TCP主机回复的ACK响应报文。
全文摘要
本发明提供了一种TCP连接与SCTP连接互通的方法,包括接收源端发起的与目标端建立通信连接的请求,所述请求携带有源端与目标端的地址信息;所述源端、目标端中一端为TCP主机,另一端为SCTP主机;依据所述源端与目标端的地址信息,发起目标端的通信连接建立过程;当所述目标端的通信连接建立完成后,针对源端发起通信连接建立请求继续进行源端的通信连接建立过程。本发明可以在不对现有的上层应用及其运行的系统进行任何修改,不对上层应用的使用进行任何限制的基础上,提高上层应用信令传输的正确性及可靠性。
文档编号H04L29/06GK102315918SQ20101022635
公开日2012年1月11日 申请日期2010年7月6日 优先权日2010年7月6日
发明者弋景峰, 贺保国 申请人:大唐移动通信设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1