一种基于sip软终端的私网穿越系统和方法

文档序号:7750116阅读:323来源:国知局
专利名称:一种基于sip软终端的私网穿越系统和方法
技术领域
本发明涉及互联网和多媒体通信技术,尤其涉及一种基于会话初始协议(SIP)软 终端的私网穿越系统和方法。
背景技术
随着下一代网络(NGN)技术的进一步发展和走向成熟,以音频、视频为核心的多 媒体及数据通信业务,在商用和个人领域已呈现出巨大的增长空间。提供音频、视频的新型 多媒体增值业务成为电信业务和互联网应用的融合点,因此网络电话(VOIP)技术成为了 争相研究的热点。VOIP技术实现了在IP网络上实时的传送语音、视频和数据等多媒体业务目前,应用于VOIP的主要技术规范有两种——国际电信联盟(ITU)的H. 323协议 和因特网工程任务小组(IETF, Internet Engineer Task Force)的SIP协议。H. 323协议 是传统的实现电话信令模式,便于与传统的电话网相连,因此相对而言应用最为广泛。但是 SIP协议借鉴的因特网的其它标准和协议的设计思想,以其简单、灵活、兼容、可扩展性强等 特性成为了 VOIP和未来网络的新的发展方向。Internet的快速膨胀导致了全球IPv4地址空间面临耗尽的危机,网络地址转换 (NAT, Network Address Translation)成为解决全球IPv4地址匮乏的一种重要技术(NAT 也叫网络掩蔽或者IP掩蔽)。NAT技术实现了专用网络中的内部主机使用私有地址进行通 信,当内部主机要连接Internet时可以共享一个公网地址与外部主机进行通信。但NAT技 术只是将IP数据包中的私有地址和端口对Ix ;y}映射为一个全球IP地址和端口对{X:Y}, 并用{X:Y}替换IP数据包中的私有地址和端口对{x ;y},使其可以在Internet中进行传 输。SIP消息头和消息体中包含了通信双方的本地IP地址,如果通信双方中只要有一 方是内部网络中的主机,即本地的IP地址是私网IP地址,就会导致无法建立SIP信令和媒 体流的正常连接。因此,SIP消息的这个特性成为了其穿越NAT的阻碍,如何高效地穿越NAT 成为了影响SIP协议能否进一步推广的最重要的因素。目前,国内外虽然有许多关于穿越 NAT的草案或规范,但是他们都是独立与具体协议,两者没有有机的结合起来。现有穿越NAT的相关技术,大体上可分为基于STUN协议和基于TURN协议两类。所 述STUN协议是一种发现通信双方是否存在NAT和防火强以及NAT的类型的一种轻量级的 客户端_服务器协议。其主要通过STUN客户端和服务器之间的交互得到内部网络中的私 有地址所映射的公网地址,还可利用STUN客户端和服务器之间的交互信息用以判断网络 中存在的NAT类型。所述TURN协议是一种允许内网主机使用中继方式与对端通信的客户端_服务器 协议。TURN协议的主要思想同STUN协议相似,也是通过TURN客户端和服务器之间的交互, 使内网的主机获取到一个公网地址,但此公网地址不是STUN协议中得到的NAT的出口地 址,而是TURN服务器的地址,也就是中继服务器的地址。由此可见,STUN协议和TURN协议都是独立与任何具体的应用层协议的,其各有其优缺点。STUN协议本身不支持对称NAT的穿越、而TURN协议支持对称NAT的穿越,但是其 报文需要经过TURN服务器进行转发,这将增大包的时延和丢包的可能性。

发明内容
有鉴于此,本发明的主要目的在于提供一种基于SIP软终端的私网穿越系统和方 法,用以穿越多级串联的NAT,并且降低传输数据报文的包时延和丢包率,提高通信的实时 性,从而推进基于SIP协议的VOIP等业务的实现与开展。为达到上述目的,本发明的技术方案是这样实现的一种基于会话初始协议SIP软终端的私网穿越系统,该系统主要包括私网穿越模 块、SIP信令代理模块(SIP UA模块)、Java媒体处理模块(JMF模块)和音视频编解码模 块;其中,私网穿越模块,作为整个SIP软终端系统的一个模块,与SIP软终端中的其他模块 协调工作,共同完成SIP终端会话的交互过程;用于与STUN服务器和TURN服务器交互,以 获取有效信息,当SIP UA需要所述信息时,私网穿越模块将所述有效信息反馈给SIP UA;SIP UA模块,作为整个软终端系统中SIP信令的代理模块,所有SIP信令的交互 过程都由SIP UA模块完成,当启动SIP软终端时,SIP UA模块就开始监听SIP的各信令端 口,准备接收和发送各种SIP信令;JMF模块,用以捕获音、视频设备的音视频流,然后调用音视频编解码器进行编码, 最终打包成实时传输协议RTP包发送给对端通信方;音视频编解码模块,用以对所述音、视频流的编解码。其中,所述的有效信息,包括通过STUN客户端和服务器之间交互得到的内部网络 中的私有地址所映射的公网地址以及网络中存在的NAT类型;或通过TRUN客户端和服务器 之间的交互使内网的主机获取一个公网地址。所述的通过TRUN客户端和服务器之间的交互使内网的主机获取一个公网地址为 中继服务器的地址。一种基于SIP软终端的私网穿越方法,该方法包括如下步骤A、网络地址转换NAT类型的学习过程的步骤;B、SIP信令和STUN信令、TURN信令融合过程的步骤;C、媒体流端口的保持过程的步骤。所述步骤A进一步包括A1、在发送SIP注册消息前,首先向公网的STUN服务器的IP1和端口 P0RT1发送 STUN请求消息;A2、判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口 IP地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,此时停止 发送STUN请求;如果STUN响应中携带的出口 IP地址和端口与本地主机不一致,则说明本 地主机处于NAT后面,保存此次NAT的出口 IP地址,然后继续向STUN服务器的IP1和端口 P0RT2发送STUN请求,记录STUN响应中出口 IP地址和端口号;A3、对比前一次和本次获得的端口号,如果两个端口号一致,则说明该网络是非 对称型的NAT网络,则将useStun标志位置为真;否则,该网络则为对称型NAT网络,将
5useTurn标志位置为真。所述步骤B进一步包括B1、当SIP应用服务器得到SIP客户端的注册地址后,在需要和客户端建立会话时 向客户端发起invite请求,客户端收到invite请求后恢复180RING和带SDP的SIP消息, 对180RING消息无需做任何修改,但是对带SDP的SIP消息需要在发送前从STUN信令或 TURN获取有效信息,来修改此消息;B2、SIP UA查询isPublic标志位,如果上一个过程将isPublic标志置为真的话, 则,只需都填写本地址和端口即可;若查询到isPublic标志位为isfalse,则查询useTurn 禾口 useStun的标志位;B3、如果得到的网络参数useStun为真,则优先使用以后需要接收音、视频流的地 址和端口,向STUN服务器发送STUN请求,将得到响应的音、视频流的本地址所映射的出口 NAT地址提交给SIP UA,SIP UA将这些地址分别填写在SDP的音、视频地址处;如果得到的 网络参数是useTurn为真,则象使用STUN协议一样,只是此时从响应中得到的地址是TURN 服务器为客户端在其上分配的端口,将此地址填写到SDP中就意味着SIP客户端以后接收 到的音、视频流都是通过TURN服务器中转过来的。步骤C所述媒体流端口的保持过程的步骤具体为启动两个线程重复绑定实际用 于接收音、视频的端口,然后间隔一段时间就向通信方发送简单的UDP包,周期性的发送简 单的UDP包,不仅在防火强上打通进出流媒体的通道,而且也维持了内网主机在NAT网关上 的映射;当会话结束时,停止两个发包的线程,如果采用的是TURN方式,需要再绑定接收音 视频的端口向TURN服务器发送Rfresh消息,使TRUN服务器释放为TURN客户端分配的相 关资源。本发明所提供的基于SIP软终端的私网穿越系统和方法,具有以下优点该系统和方法使SIP信令与SIP扩展协议、STUN消息、TURN消息有机的融合在一 起。SIP信令采用扩展协议与SIP应用服务器配合通信,使得不带SDP的SIP信令不需要发 送STUN、TURN消息就完成了穿越,只有带SDP的SIP信令才需要发送STUN、TURN消息,提取 响应中的有效信息。该方法时SIP信令完全在直通的情况下进行通信,且媒体流也是在直 通情况下不能使用时才采取中转的方式,大大提高了通信双方的效率,同时也保证了通信 的实时性。而且,使用STUN协议和TURN协议无需对现有网络中的硬件设备进行更改,并且 能够实现穿越多级串联的NAT。


图1为本发明基于SIP软终端的私网穿越系统的功能框图;图2为本发明的基于SIP软终端的私网穿越方法流程图;图2a为图2所述的网络学习过程的流程示意图;图2b为本发明基于SIP软终端的注册用户建立会话的流程示意图;图3为本发明基于SIP软终端的NAT穿越系统的具体交互过程示意图之一(针对 非对称NAT消息);图4为本发明基于SIP软终端的NAT穿越系统的具体交互过程示意图之二(针对 对称NAT消息)。
具体实施例方式下面结合附图及本发明的实施例对本发明的方法作进一步详细的说明。本发明的基本思想由于网络环境极其复杂,单纯的使用一种穿越方法,并不能使 SIP信令和媒体流得到完善有效的穿越。如果单独使用STUN协议与SIP信令结合,SIP信 令和媒体流只能穿透非对称型的网络,遇到对称型网络时,仍然无法建立正常的连接;如果 单独使用TURN协议与SIP信令结合,虽然可以穿透任何类型的NAT网络,但是SIP信令和 媒体流都需要经过TURN服务器的中转,大大增加了报文的时延和丢包的可能,因而降低了 音视频的实时性。因此,鉴于以上现况的考虑,本发明提出一种同时利用SIP信令的特性与 STUN协议和TURN协议有机结合的私网穿越系统和方法,并根据STUN协议和TURN协议的技 术特点以及SIP消息的特殊性,将两者有机地融合在一起,完成SIP信令和媒体流的穿越。图1为本发明基于SIP软终端的私网穿越系统的功能框图,如图1所示,SIP软终 端系统主要分为四个模块,分别为私网穿越模块10、SIP信令代理模块11、JMF模块(Java 媒体处理模块)12和音视频编解码模块13 ;其中,所述私网穿越模块10,作为整个SIP软终 端系统的一个模块,与SIP软终端中的其他模块协调工作,共同完成SIP终端会话的交互过 程。所述私网穿越模块10,即STUN/TURN客户端(Client)模块,作为SIP软终端的私 网穿越模块,用于与STUN服务器(Server)和TURN服务器(Server)交互,以获取有效信息。 当SIP UA模块即SIP信令代理模块11需要该信息时,私网穿越模块10将所述有效信息反 馈给SIP UA。这里,所述的有效信息,包括通过STUN客户端和服务器之间交互得到的内部网络 中的私有地址所映射的公网地址以及网络中存在的NAT类型;或通过TRUN客户端和服务器 之间的交互使内网的主机获取一个公网地址(但此公网地址并非STUN协议中得到的其NAT 出口地址,而是TURN服务器的地址,也就是中继服务器的地址)。所述SIP信令代理模块(即SIP UA模块)11,作为整个软终端系统中SIP信令的 代理模块,所有SIP信令的交互过程都由SIP UA模块11完成,当启动SIP软终端时,SIP UA模块11就开始监听SIP的各信令端口,准备接收和发送各种SIP信令。JMF模块(即Java媒体处理模块)12,用以捕获音、视频设备的音视频流,然后调 用音视频编解码器进行编码,最终打包成实时传输协议(RTP)包发送给对端通信方。音视频编解码模块13,用以对所述音、视频流的编解码。这里,如果SIP软终端处在私网的环境中,SIP UA模块11会调用私网穿越模块10 获取有效信息,进行SIP信令的交互,会话建立后由JMF模块12和音视频编解码器模块13 负责发送和接收、呈现音视频。本发明的利用SIP信令的特性与STUN协议、TURN协议有机结合的高效穿越方法, 根据SIP信令的交互过程可划分为三个部分SIP信令交互前的网络NAT类型学习过程、 SIP信令和STUN信令以及TURN信令融合的过程、媒体流端口的保持过程。图2为本发明的基于SIP软终端的私网穿越方法流程图,如图2所示,该方法包括 如下步骤步骤21、网络NAT类型的学习过程。
这里,该过程如图2a所示,包括在发送SIP注册消息前,首先向公网的STUN服务 器的IP1和端口 P0RT1发送STUN请求消息;判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口 IP 地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,说明本地主机 处于公网中,此时则停止发送STUN请求。如果STUN响应中携带的出口 IP地址和端口与本 地主机不一致,则说明本地主机处于NAT后面,保存此次NAT的出口 IP地址,然后继续向 STUN服务器的IP1和P0RT2发送STUN请求,记录STUN响应中出口 IP地址和端口号。对比前一次和本次获得的端口号,如果两个端口号一致,则说明该网络是非对称 型的NAT网络,则将useStun标志位置为真,否则该网络则是对称型NAT网络,将useTurn 标志位置为真。该过程探测出了网络的NAT类型,对下一步SIP信令采用的NAT穿越机制提供了 依据。可见,所述网络NAT类型的学习过程,是整个私网穿越过程的基石,为第二个过程 (SIP信令和STUN信令、TURN信令融合的过程)发送哪种类型的消息提供了依据。SIP信 令和STUN信令、TURN信令融合过程是最关键的一个过程,SIP信令和媒体流能否穿越NAT 主要取决于该过程获取的信息是否为有效信息。而第三个过程,即媒体流端口的保持过程, 也是必不可少的一部分,因为即使第二个过程都是通过的有效信息,但是由于NAT的时效 和防火强问题,缺少第三个过程的音视频流也不能顺利地接收和呈现。步骤22、SIP信令和STUN信令、TURN信令融合的过程。这里,所述的SIP信令,包含SIP消息头和SIP消息体两部分。SIP消息头中包含 SIP携带了的IP地址和端口号,用于通信双方建立信令会话;而SIP消息体SDP——会话描 述协议中携带的是通信双方接收音视频的地址和端口号。如果SIP消息头中有一方携带了 私网地址,通信方会按照SIP消息头中携带的私网地址进行回复,私网地址在Internet网 中是无法路由的,从而导致双方无法建立会话连接。为了保证会话连接的实时性,不带SDP 的SIP信令不需要STUN信令和TURN信令的协助,而是应用SIP扩展协议的一部分,在需要 协商接收媒体地址时即需要发送带SDP的SIP信令的时候再配合STUN信令和TURN信令修 改SDP中所携带的私网地址。SIP软终端要想和SIP应用服务器进行通信,必须先在应用服务器注册。必须保证 SIP软终端注册的地址信息是公网地址才行,否则当SIP应用服务器发送邀请加入会话的 消息时,SIP软终端将无法接收到请求。为了解决这个问题,该方法采用SIP的扩展协议, 在发送的SIP消息头的VIA域加上RP0RT字段,消息头中其他字段仍然填写的是本地地址 和端口,这样使SIP应用服务器不仅将接收到SIP注册消息的来源地址和端口号(即网络 层的IP地址和传输层的端口号)填写到回复信令的VIA字段的R0RT和RECEIVED字段中, 而且把该地址注册为客户端的地址。此地址必然是公网地址,因为如果该客户端处于公网 之中,来源地址和端口必然和SIP消息头中携带的客户端的本地地址是一致的都是公网地 址;如果该客户端处于私网中,来源地址和端口与SIP消息头中携带的地址是不一致的,来 源地址和端口是通过NAT网关修改后的对外暴露的公网地址和端口。通过对SIP消息做最 小的修改,保证了注册地址的正确性,从而保证SIP应用服务器肯定能通过该地址找到其 对应的SIP客户端。由于地址的转换是有时效性的,这种保证只能保证短时间内的通信。如果长时间不通过NAT网关上的映射对端口向外界发送消息,这种映射关系将会自动取消, 即注册的公网地址也同时失效了。为了保证注册的公网地址和端口一直有效,间隔一段时 间就发送一次注册包,保持和刷新私网用户注册的地址,使SIP应用服务器可以在任意时 刻通过该注册地址找到私网中的SIP客户端。私网用户周期性发送注册消息的行为要从启 动SIP客户端一直持续到SIP客户端退出应用程序为止。图2b为本发明基于SIP软终端的注册用户建立会话的流程示意图,如图2所示, SIP应用服务器得到了 SIP客户端的注册地址后,会在需要和客户端建立会话时向客户 端发起invite请求,客户端收到invite请求后会恢复180RING和带SDP的SIP消息,对 180RING消息无需做任何修改,但是对带SDP的SIP消息需要在发送前从STUN信令或TURN 获取有效信息,来修改此消息。如果此信令仍向SIP注册消息那样只在VIA域加RP0RT字段,会话仍然无法建立, 因为SIP应用服务器会根据此SIP消息的中的CONTACT字段进行回复ACK消息,如果填写 的是本地地址,回复的ACK消息也无法进行路由,完整的连接无法建立,因此提取SIP应用 服务器发送过来的INVITE消息中的TO域中地址填写到将要发送的带SDP的SIP消息的 CONTACT域中去,INVITE消息中的TO域的地址是SIP客户端注册的地址,填写该地址可以 确保SIP信令的交互过程顺利完成。只修改CONTACT域仅保证了 SIP信令的交互过程,由于 SDP中填写的接收音视频端口还是本地地址和端口,媒体流仍然无法穿透NAT。此时,单纯 靠SIP客户端和应用服务器的交互信息,无法完成SDP的正确修改,需要STUN协议和TURN 协议进行协助。在发送带SDP的SIP信令之前,根据上一个过程学习到的网络参数信息来 判断是否需要发送额外的信令。SIP UA查询isPublic标志位,如果上一个过程将isPublic标志置为真的话,说明 处在公网中,不需要发送额外的信令,只需都填写本地址和端口即可;若查询到isPublic 标志位为isfalse,则查询useTurn和useStun的标志位,如果得到的网络参数是useStun 为真,则优先使用以后需要接收音、视频流的地址和端口,并向STUN服务器发送STUN请求, 将得到响应的音、视频流的本地址所映射的出口 NAT地址提交给SIP UA, SIP UA将这些地 址分别填写在SDP的音、视频地址处;如果得到的网络参数是useTurn为真,则象使用STUN 协议一样,只是此时从响应中得到的地址是TURN服务器为客户端在其上分配的端口,将此 地址填写到SDP中就意味着SIP客户端以后接收到的音、视频流都是通过TURN服务器中转 过来的,因此,使用TURN协议的优先级要比STUN协议低。STUN协议的方式是直通的方式, 没有经过任何中转,其效率和实时性最高,但是却不能穿透对称NAT,但此时TURN协议就弥 补了 STUN的缺陷。因此,该过程能够使STUN和TURN协议配合使用,相辅相成,同时又使其SIP消息 有机的融合在一起。步骤23、媒体流端口的保持过程。这里,第二个过程完整了 SIP信令的穿越过程,但是媒体流的穿越仍然没有全部 完成。SIP终端通常接收音视频的端口和发送音视频不是一组,如果SIP终端不主动使用实 际接收音视频的地址向将来要向其发送媒体流的主机和服务器发送数据包的话,NAT和防 火墙将会阻止音视频流进来。因为NAT和防火墙会阻止那些内网主机从来没有主动发过数 据包的外网主机发送进来的数据包,它们会认为这破坏了内网的安全性。
为了音视频流可以正常通信,必须在NAT和防火墙之间打通一条通道。该方法中 采用使用启动两个线程重复绑定实际用于接收音、视频的端口,然后间隔一段时间就向通 信方发送简单的UDP包,这些简单的UDP包不会影响其它的真正的音视频包,其只负责在 NAT和防火墙之间打通一条通信通道。周期性的发送简单的UDP包,不仅在防火强上打通 进出流媒体的通道,而且也维持了内网主机在NAT网关上的映射。会话结束时,停止两个 发包的线程,如果采用的是TURN方式,需要再绑定接收音视频的端口向TURN Server发送 Rfresh消息,使TRUN Server释放为TURN Client分配的相关资源。图3为本发明基于SIP软终端的NAT穿越系统的具体交互过程示意图之一(针对 非对称NAT消息),如图3所示,所述系统将SIP的交互和私网穿越模块有机的结合在一起, 协调地完成一个建立会话、接收音视频和呈现音视频的过程。该过程包括如下步骤(l)SIP UA调用NetworkConfigure类中的determineAddressO 方法探测网络NAT 的类型,该方法是NAT穿越系统暴露给SIP UA的接口方法;(2)接口方法中再调用STUN Client向STUN Server的IP1和P0RT1地址发送 STUN Binding 请求;(3)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地 址,查看如果该解析地址和发送STUN请求的地址和端口是否一致,如果一致将isPublic = ture,如果按不一致,将该解析地址保存下来;(4) STUN Client 向 STUN Server 的 IP1 和 P0RT2 地址发送 STUN Binding 请求;(5)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址, 发现该解析地址与第一次的请求得到的地址一致,因此将useStim = true ;(6)返回探测类型的字符串表示;(7)构造SIP注册消息,在SIP消息头的VIA域中添加RP0RT字段,发送SIP注册 消息;(8) SIP Server将收到SIP注册消息后,解析SIP注册消息,发现SIP消息头中VIA 字段中有RP0RT字段,将这两个地址和端口填写在恢复的401消息的VIA域的RP0RT字段 和RECEIVED字段,SIP Server回复401鉴权消息;(9)构造SIP注册消息,在SIP消息头的VIA域中添加RP0RT字段,发送SIP注册 消息;(10) SIP Server鉴权成功,将SIP消息的来源IP地址和UDP端口(公网地址)注 册为该SIP UA的地址,恢复2000K消息;(11)开始建立会话,SIP Server根据SIP UA注册的地址发送invite响应;(12)将SIP Server发送的invite消息的to域地址填写到将要发送到的180ring 消息中,发送180ring消息;(13)调用 NetworkManagerServiceImp 1 类的 QueryStunServer 方法,查询音频端 口对应的出口 NAT地址;(14) STUN Client 用本地 IP 和音频端 口 向 STUN Server 发送 STUN Bindingrequest;(15) STUN Server 向 STUN Client 返回 STUN Binding Response ;(16)将从响应中解析出的音频的出口 NAT地址反馈给SIP UA ;
(17)调用 NetworkManagerServiceImp 1 类的 QueryStunServer 方法,查询视频端 口对应的出口 NAT地址;(18) STUN Client 用本地 IP 禾P 视频端口向 STUN Server 发送 STUN Bindingrequest;(19) STUN Server 向 STUN Client 返回 STUN Binding Response ;(20)将从响应中解析出的视频的出口 NAT地址反馈给SIP UA ;(21)将SIP Server发送的invite消息的to域地址填写到将要发送到的2000K 消息中,并且获取的音视频地址和端口填写在SIP SDP中,发送带SDP的2000K消息中;(22) SIP Server返回带SDP的ACK消息,SIP会话建立过程完成。图4为本发明基于SIP软终端的NAT穿越系统的具体交互过程示意图之二(针对 对称NAT消息),该过程包括如下步骤(l)SIP UA调用NetworkConfigure类中的determineAddressO 方法探测网络NAT 的类型,该方法是NAT穿越系统暴露给SIP UA的接口方法;(2)接口方法中再调用STUN Client向STUN Server的IP1和P0RT1地址发送 STUN Binding 请求;(3)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址, 查看该解析地址和发送STUN请求的地址和端口是否一致,如果一致将isPublic = ture ; 如果按不一致,将该解析地址保存下来;(4) STUN Client 向 STUN Server 的 IP1 和 P0RT2 地址发送 STUN Binding 请求;(5)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址, 发现该解析地址与第一次的请求得到的地址不一致,因此将useTurn = true ;(6)返回探测类型的字符串表示;(7)构造SIP注册消息,在SIP消息头的VIA域中添加RP0RT字段,发送SIP注册 消息;(8) SIP Server将收到SIP注册消息后,解析SIP注册消息,发现SIP消息头中VIA 字段中有RP0RT字段,将这两个地址和端口填写在恢复的401消息的VIA域的RP0RT字段 和RECEIVED字段,SIP Server回复401鉴权消息;(9)构造SIP注册消息,在SIP消息头的VIA域中添加RP0RT字段,发送SIP注册 消息;(10) SIP Server鉴权成功,将SIP消息的来源IP地址和UDP端口(公网地址)注 册为该SIP UA的地址,恢复2000K消息;(11)开始建立会话,SIP Server根据SIP UA注册的地址发送invite响应;(12)将SIP Server发送的invite消息的to域地址填写到将要发送到的180ring 消息中,发送180ring消息;(13)调用 Ne tworkManager Serv i ce Imp 1 类的 QueryTurnServer 方法,查询音频端 口对应的中转服务器地址和端口;(14)TURN Client 用本地 IP 和音频端口向 TURN Server 发送 TURNallocate request ;(15) TURN Server分配SIP UA音频端口对应的在TURN Server本地的中转地址,分配地址成功,向 TURNClient 返回 TURN allocate successful Response ;(16)将从响应中解析出的音频的中转服务器地址反馈给SIP UA ;(17)调用 NetworkManagerServiceImp 1 类的 QueryTurnServer 方法,查询视频端 口对应的中转服务器地址和端口;(18)TURN Client 用本地 IP 和视频端口向 TURN Server 发送 TURN allocaterequest ;(19)TURN Server分配SIPUA视频端口对应的在TURN Server本地的中转地址,分 配地址成功,向 TURNClient 返回 TURN allocate successful Response ;(20)将从响应中解析出的视频的出口 NAT地址反馈给SIP UA ;(21)将SIP Server发送的invite消息的to域地址填写到将要发送到的2000K 消息中,并且获取的音视频地址和端口填写在SIP SDP中,发送带SDP的2000K消息中;(22) SIP Server返回带SDP的ACK消息,SIP会话建立过程完成;并开始发送音视 频;(23)会话结束时SIP终端向SIP UA发送bye消息;(24) SIP UA向SIP Server发送ACK消息,回收本次会话使用的各种资源;(25) SIP UA 再回收资源时调用 refreshAddress(AudioPort)方法;(26) TURN Client 用本地的 IP 和音频端 口 向 TURN Server 发送 TURNrefresh 消 息;(27) TURN Server释放原来音频端口对应的中转端口,向TURN Client发送TURN refresh successful 消息;(28) SIP UA 再回收资源时调用 refreshAddress(videoPort)方法;(29) TURN Client 用本地的 IP 和视频端 口 向 TURN Server 发送 TURNrefresh 消 息;(30)TURN Server释放原来视频端口对应的中转端口,向TURN Client发送TURN refresh successful 消息。综上所述,本发明基于SIP软终端的私网穿越方法,简化了 STUN协议和TURN协议 中的消息流交互过程。STUN消息只需要STUN binding request和STUN binding response, TURN 消息中只需要 Allocate request、AllocateResponse、Refresh request、Refresh Response消息,协议中规定的其他STUN和TURN消息对SIP穿越没有任何帮助,其如果加上 还会增大SIP消息的交互时间。在该方法中实现STUN消息和TURN消息并没有完全按照规 范实现,简化了消息内容,只保证能获取有效信息。另外,根据网络中各种NAT的特性,本发明提出了一种简单有效的探测NAT类型的 方法。由于STUN方式只是对对称的NAT是无效的,因此我们无需判断出该网络具体是哪种 的非对称型NAT,只需知道是否是对称的NAT即可,这样大大减少了 STUN CLIENT和STUN SERVER交互的过程,减少了探测网络所需的时间。以往的方法往只采用其中一种与SIP信令进行结合,而本发明综合运用了两种独 立与任何关于建立音视频会话的穿越方法,将STUN协议与TURN协议协调搭配,相辅相成。 既避免了单独使用STUN协议时对网络选择性有效的方法,又避免了单独使用TURN协议、需 要同时中转信令和媒体流造成的时延问题。
12
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
一种基于会话初始协议SIP软终端的私网穿越系统,其特征在于,该系统主要包括私网穿越模块、SIP信令代理模块(SIP UA模块)、Java媒体处理模块(JMF模块)和音视频编解码模块;其中,私网穿越模块,作为整个SIP软终端系统的一个模块,与SIP软终端中的其他模块协调工作,共同完成SIP终端会话的交互过程;用于与STUN服务器和TURN服务器交互,以获取有效信息,当SIP UA需要所述信息时,私网穿越模块将所述有效信息反馈给SIP UA;SIP UA模块,作为整个软终端系统中SIP信令的代理模块,所有SIP信令的交互过程都由SIP UA模块完成,当启动SIP软终端时,SIP UA模块就开始监听SIP的各信令端口,准备接收和发送各种SIP信令;JMF模块,用以捕获音、视频设备的音视频流,然后调用音视频编解码器进行编码,最终打包成实时传输协议RTP包发送给对端通信方;音视频编解码模块,用以对所述音、视频流的编解码。
2.根据权利要求1所述的基于SIP软终端的私网穿越系统,其特征在于,所述的有效信 息,包括通过STUN客户端和服务器之间交互得到的内部网络中的私有地址所映射的公网 地址以及网络中存在的NAT类型;或通过TRUN客户端和服务器之间的交互使内网的主机获 取一个公网地址。
3.根据权利要求2所述的基于SIP软终端的私网穿越系统,其特征在于,所述的通过 TRUN客户端和服务器之间的交互使内网的主机获取一个公网地址为中继服务器的地址。
4.一种基于SIP软终端的私网穿越方法,其特征在于,该方法包括如下步骤A、网络地址转换NAT类型的学习过程的步骤;B、SIP信令和STUN信令、TURN信令融合过程的步骤;C、媒体流端口的保持过程的步骤。
5.根据权利要求4所述的基于SIP软终端的私网穿越方法,其特征在于,所述步骤A进 一步包括A1、在发送SIP注册消息前,首先向公网的STUN服务器的IP1和端口 P0RT1发送STUN 请求消息;A2、判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口 IP 地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,此时停止发送 STUN请求;如果STUN响应中携带的出口 IP地址和端口与本地主机不一致,则说明本地主 机处于NAT后面,保存此次NAT的出口 IP地址,然后继续向STUN服务器的IP1和端口 P0RT2 发送STUN请求,记录STUN响应中出口 IP地址和端口号;A3、对比前一次和本次获得的端口号,如果两个端口号一致,则说明该网络是非对称型 的NAT网络,则将useStun标志位置为真;否则,该网络则为对称型NAT网络,将useTurn标 志位置为真。
6.根据权利要求4所述的基于SIP软终端的私网穿越方法,其特征在于,所述步骤B进 一步包括B1、当SIP应用服务器得到SIP客户端的注册地址后,在需要和客户端建立会话时向 客户端发起invite请求,客户端收到invite请求后恢复180RING和带SDP的SIP消息,对 180RING消息无需做任何修改,但是对带SDP的SIP消息需要在发送前从STUN信令或TURN获取有效信息,来修改此消息;B2、SIP UA查询isPublic标志位,如果上一个过程将isPublic标志置为真的话,则, 只需都填写本地址和端口即可;若查询到isPublic标志位为isfalse,则查询useTurn和 useStun的标志位;B3、如果得到的网络参数useStim为真,则优先使用以后需要接收音、视频流的地址和 端口,向STUN服务器发送STUN请求,将得到响应的音、视频流的本地址所映射的出口 NAT 地址提交给SIP UA,SIP UA将这些地址分别填写在SDP的音、视频地址处;如果得到的网络 参数是useTurn为真,则象使用STUN协议一样,只是此时从响应中得到的地址是TURN服务 器为客户端在其上分配的端口,将此地址填写到SDP中就意味着SIP客户端以后接收到的 音、视频流都是通过TURN服务器中转过来的。
7.根据权利要求4所述的基于SIP软终端的私网穿越方法,其特征在于,步骤C所述媒 体流端口的保持过程的步骤具体为启动两个线程重复绑定实际用于接收音、视频的端口, 然后间隔一段时间就向通信方发送简单的UDP包,周期性的发送简单的UDP包,不仅在防火 强上打通进出流媒体的通道,而且也维持了内网主机在NAT网关上的映射;当会话结束时, 停止两个发包的线程,如果采用的是TURN方式,需要再绑定接收音视频的端口向TURN服务 器发送Rfresh消息,使TRUN服务器释放为TURN客户端分配的相关资源。
全文摘要
本发明公开一种基于会话初始协议(SIP)软终端的私网穿越系统和方法,该系统包括私网穿越模块、SIP信令代理模块、Java媒体处理模块和音视频编解码模块。该方法将SIP信令与SIP扩展协议、STUN消息、TURN消息有机的融合在一起;SIP信令采用扩展协议与SIP应用服务器配合通信,使得不带SDP的SIP信令不需要发送STUN、TURN消息就完成了穿越,只有带SDP的SIP信令才需要发送STUN、TURN消息,提取响应中的有效信息。应用本发明能够在公网与私网之间保持直通的情况下进行通信,大大提高了通信双方的效率,同时也保证了通信的实时性,并且能够实现穿越多级串联的NAT。
文档编号H04L29/12GK101860536SQ20101018720
公开日2010年10月13日 申请日期2010年5月31日 优先权日2010年5月31日
发明者刘传昌, 王月, 程渤, 章洋, 陈俊亮 申请人:北京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1