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

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

Info

Publication number
CN101860536A
CN101860536A CN 201010187201 CN201010187201A CN101860536A CN 101860536 A CN101860536 A CN 101860536A CN 201010187201 CN201010187201 CN 201010187201 CN 201010187201 A CN201010187201 A CN 201010187201A CN 101860536 A CN101860536 A CN 101860536A
Authority
CN
China
Prior art keywords
sip
address
stun
port
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 201010187201
Other languages
English (en)
Other versions
CN101860536B (zh
Inventor
章洋
程渤
刘传昌
陈俊亮
王月
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN201010187201.9A priority Critical patent/CN101860536B/zh
Publication of CN101860536A publication Critical patent/CN101860536A/zh
Application granted granted Critical
Publication of CN101860536B publication Critical patent/CN101860536B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开一种基于会话初始协议(SIP)软终端的私网穿越系统和方法,该系统包括私网穿越模块、SIP信令代理模块、Java媒体处理模块和音视频编解码模块。该方法将SIP信令与SIP扩展协议、STUN消息、TURN消息有机的融合在一起;SIP信令采用扩展协议与SIP应用服务器配合通信,使得不带SDP的SIP信令不需要发送STUN、TURN消息就完成了穿越,只有带SDP的SIP信令才需要发送STUN、TURN消息,提取响应中的有效信息。应用本发明能够在公网与私网之间保持直通的情况下进行通信,大大提高了通信双方的效率,同时也保证了通信的实时性,并且能够实现穿越多级串联的NAT。

Description

一种基于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数据包中的私有地址和端口对{x;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和端口PORT1发送STUN请求消息;
A2、判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口IP地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,此时停止发送STUN请求;如果STUN响应中携带的出口IP地址和端口与本地主机不一致,则说明本地主机处于NAT后面,保存此次NAT的出口IP地址,然后继续向STUN服务器的IP1和端口PORT2发送STUN请求,记录STUN响应中出口IP地址和端口号;
A3、对比前一次和本次获得的端口号,如果两个端口号一致,则说明该网络是非对称型的NAT网络,则将useStun标志位置为真;否则,该网络则为对称型NAT网络,将useTurn标志位置为真。
所述步骤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和端口PORT1发送STUN请求消息;
判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口IP地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,说明本地主机处于公网中,此时则停止发送STUN请求。如果STUN响应中携带的出口IP地址和端口与本地主机不一致,则说明本地主机处于NAT后面,保存此次NAT的出口IP地址,然后继续向STUN服务器的IP1和PORT2发送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域加上RPORT字段,消息头中其他字段仍然填写的是本地地址和端口,这样使SIP应用服务器不仅将接收到SIP注册消息的来源地址和端口号(即网络层的IP地址和传输层的端口号)填写到回复信令的VIA字段的RORT和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域加RPORT字段,会话仍然无法建立,因为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的交互和私网穿越模块有机的结合在一起,协调地完成一个建立会话、接收音视频和呈现音视频的过程。该过程包括如下步骤:
(1)SIP UA调用NetworkConfigure类中的determineAddress()方法探测网络NAT的类型,该方法是NAT穿越系统暴露给SIP UA的接口方法;
(2)接口方法中再调用STUN Client向STUN Server的IP1和PORT1地址发送STUN Binding请求;
(3)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址,查看如果该解析地址和发送STUN请求的地址和端口是否一致,如果一致将isPublic=ture,如果按不一致,将该解析地址保存下来;
(4)STUN Client向STUN Server的IP1和PORT2地址发送STUN Binding请求;
(5)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址,发现该解析地址与第一次的请求得到的地址一致,因此将useStun=true;
(6)返回探测类型的字符串表示;
(7)构造SIP注册消息,在SIP消息头的VIA域中添加RPORT字段,发送SIP注册消息;
(8)SIP Server将收到SIP注册消息后,解析SIP注册消息,发现SIP消息头中VIA字段中有RPORT字段,将这两个地址和端口填写在恢复的401消息的VIA域的RPORT字段和RECEIVED字段,SIP Server回复401鉴权消息;
(9)构造SIP注册消息,在SIP消息头的VIA域中添加RPORT字段,发送SIP注册消息;
(10)SIP Server鉴权成功,将SIP消息的来源IP地址和UDP端口(公网地址)注册为该SIP UA的地址,恢复200OK消息;
(11)开始建立会话,SIP Server根据SIP UA注册的地址发送invite响应;
(12)将SIP Server发送的invite消息的to域地址填写到将要发送到的180ring消息中,发送180ring消息;
(13)调用NetworkManagerServiceImpl类的QueryStunServer方法,查询音频端口对应的出口NAT地址;
(14)STUN Client用本地IP和音频端口向STUN Server发送STUN Bindingrequest;
(15)STUN Server向STUN Client返回STUN Binding Response;
(16)将从响应中解析出的音频的出口NAT地址反馈给SIP UA;
(17)调用NetworkManagerServiceImpl类的QueryStunServer方法,查询视频端口对应的出口NAT地址;
(18)STUN Client用本地IP和视频端口向STUN Server发送STUN Bindingrequest;
(19)STUN Server向STUN Client返回STUN Binding Response;
(20)将从响应中解析出的视频的出口NAT地址反馈给SIP UA;
(21)将SIP Server发送的invite消息的to域地址填写到将要发送到的200OK消息中,并且获取的音视频地址和端口填写在SIP SDP中,发送带SDP的200OK消息中;
(22)SIP Server返回带SDP的ACK消息,SIP会话建立过程完成。
图4为本发明基于SIP软终端的NAT穿越系统的具体交互过程示意图之二(针对对称NAT消息),该过程包括如下步骤:
(1)SIP UA调用NetworkConfigure类中的determineAddress()方法探测网络NAT的类型,该方法是NAT穿越系统暴露给SIP UA的接口方法;
(2)接口方法中再调用STUN Client向STUN Server的IP1和PORT1地址发送STUN Binding请求;
(3)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址,查看该解析地址和发送STUN请求的地址和端口是否一致,如果一致将isPublic=ture;如果按不一致,将该解析地址保存下来;
(4)STUN Client向STUN Server的IP1和PORT2地址发送STUN Binding请求;
(5)接收到STUN Server发送过来的STUN Binding Response,得到一个解析地址,发现该解析地址与第一次的请求得到的地址不一致,因此将useTurn=true;
(6)返回探测类型的字符串表示;
(7)构造SIP注册消息,在SIP消息头的VIA域中添加RPORT字段,发送SIP注册消息;
(8)SIP Server将收到SIP注册消息后,解析SIP注册消息,发现SIP消息头中VIA字段中有RPORT字段,将这两个地址和端口填写在恢复的401消息的VIA域的RPORT字段和RECEIVED字段,SIP Server回复401鉴权消息;
(9)构造SIP注册消息,在SIP消息头的VIA域中添加RPORT字段,发送SIP注册消息;
(10)SIP Server鉴权成功,将SIP消息的来源IP地址和UDP端口(公网地址)注册为该SIP UA的地址,恢复200OK消息;
(11)开始建立会话,SIP Server根据SIP UA注册的地址发送invite响应;
(12)将SIP Server发送的invite消息的to域地址填写到将要发送到的180ring消息中,发送180ring消息;
(13)调用NetworkManagerServiceImpl类的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)调用NetworkManagerServiceImpl类的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域地址填写到将要发送到的200OK消息中,并且获取的音视频地址和端口填写在SIP SDP中,发送带SDP的200OK消息中;
(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协议、需要同时中转信令和媒体流造成的时延问题。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (7)

1.一种基于会话初始协议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和端口PORT1发送STUN请求消息;
A2、判断响应中IP地址和端口与本地地址是否一致,如果STUN响应中携带的出口IP地址和端口与本地主机IP地址和端口号一致,则将isPublic标志位置为真,此时停止发送STUN请求;如果STUN响应中携带的出口IP地址和端口与本地主机不一致,则说明本地主机处于NAT后面,保存此次NAT的出口IP地址,然后继续向STUN服务器的IP1和端口PORT2发送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、如果得到的网络参数useStun为真,则优先使用以后需要接收音、视频流的地址和端口,向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客户端分配的相关资源。
CN201010187201.9A 2010-05-31 2010-05-31 一种基于sip软终端的私网穿越系统和方法 Expired - Fee Related CN101860536B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010187201.9A CN101860536B (zh) 2010-05-31 2010-05-31 一种基于sip软终端的私网穿越系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010187201.9A CN101860536B (zh) 2010-05-31 2010-05-31 一种基于sip软终端的私网穿越系统和方法

Publications (2)

Publication Number Publication Date
CN101860536A true CN101860536A (zh) 2010-10-13
CN101860536B CN101860536B (zh) 2014-05-07

Family

ID=42946194

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010187201.9A Expired - Fee Related CN101860536B (zh) 2010-05-31 2010-05-31 一种基于sip软终端的私网穿越系统和方法

Country Status (1)

Country Link
CN (1) CN101860536B (zh)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102137090A (zh) * 2010-11-10 2011-07-27 华为技术有限公司 一种登陆voip网络的方法及鉴权服务器
CN102664901A (zh) * 2012-05-15 2012-09-12 苏州工业园区云视信息技术有限公司 Sip呼叫中自适应穿越nat的方法
CN102917082A (zh) * 2012-10-10 2013-02-06 青岛海信传媒网络技术有限公司 穿透网络地址转换的消息推送方法及系统
CN103354558A (zh) * 2013-06-26 2013-10-16 四川九洲电器集团有限责任公司 一种基于xmpp服务器的打洞方法
CN103516729A (zh) * 2013-10-25 2014-01-15 深圳创维-Rgb电子有限公司 一种流媒体传输方法以及系统
CN105359487A (zh) * 2013-08-20 2016-02-24 华为技术有限公司 通过网络浏览器中的uri去引用监控nat行为
CN105721570A (zh) * 2016-02-04 2016-06-29 福建星网锐捷通讯股份有限公司 数据点对点传输方法及装置
CN105915658A (zh) * 2016-07-04 2016-08-31 上海优刻得信息科技有限公司 获取客户端ip地址的数据调用方法、数据传输方法
CN102932235B (zh) * 2012-10-09 2017-11-21 曙光信息产业(北京)有限公司 云计算环境下的即时通信方法和服务器系统
CN108234398A (zh) * 2016-12-15 2018-06-29 中国电信股份有限公司 多媒体通信方法和系统以及相关设备
CN109067659A (zh) * 2018-08-20 2018-12-21 普联技术有限公司 一种会话建立方法、路由器及会话系统
CN110178387A (zh) * 2016-11-18 2019-08-27 诺基亚技术有限公司 用于空间音频应用的位置流会话协商
CN112565234A (zh) * 2020-11-30 2021-03-26 武汉烽火众智数字技术有限责任公司 基于WebRTC的跨网传输系统及方法
CN114553822A (zh) * 2022-02-07 2022-05-27 邦彦技术股份有限公司 一种简易nat穿越的方法
CN115484311A (zh) * 2022-08-19 2022-12-16 重庆长安汽车股份有限公司 国标信令边缘代理系统的信令交互方法、装置及服务器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101166192A (zh) * 2006-09-08 2008-04-23 阿尔卡特朗讯公司 遵守sip协议的信令消息的nat地址转换设备穿越
CN101174999A (zh) * 2007-11-14 2008-05-07 中兴通讯股份有限公司 一种基于sip协议的全球眼设备穿越nat的方法
US7385975B2 (en) * 2003-12-11 2008-06-10 Institute For Information Industry Routing method and SIP server using the same

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7385975B2 (en) * 2003-12-11 2008-06-10 Institute For Information Industry Routing method and SIP server using the same
CN101166192A (zh) * 2006-09-08 2008-04-23 阿尔卡特朗讯公司 遵守sip协议的信令消息的nat地址转换设备穿越
CN101174999A (zh) * 2007-11-14 2008-05-07 中兴通讯股份有限公司 一种基于sip协议的全球眼设备穿越nat的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《小型微型计算机系统》 20070531 邓勇等 一种SIP穿越NAT的解决方案 第28卷, 第5期 *
《计算机工程》 20080930 刘春燕等 基于端口探测的SIP穿透NAT的设计与实现 第34卷, 第17期 *

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102137090B (zh) * 2010-11-10 2014-07-09 华为技术有限公司 一种登陆voip网络的方法及鉴权服务器
CN102137090A (zh) * 2010-11-10 2011-07-27 华为技术有限公司 一种登陆voip网络的方法及鉴权服务器
CN102664901A (zh) * 2012-05-15 2012-09-12 苏州工业园区云视信息技术有限公司 Sip呼叫中自适应穿越nat的方法
CN102932235B (zh) * 2012-10-09 2017-11-21 曙光信息产业(北京)有限公司 云计算环境下的即时通信方法和服务器系统
CN102917082A (zh) * 2012-10-10 2013-02-06 青岛海信传媒网络技术有限公司 穿透网络地址转换的消息推送方法及系统
CN103354558A (zh) * 2013-06-26 2013-10-16 四川九洲电器集团有限责任公司 一种基于xmpp服务器的打洞方法
CN103354558B (zh) * 2013-06-26 2016-03-16 四川九洲电器集团有限责任公司 一种基于xmpp服务器的打洞方法
CN105359487B (zh) * 2013-08-20 2019-06-11 华为技术有限公司 通过网络浏览器中的uri去引用监控nat行为的方法
CN105359487A (zh) * 2013-08-20 2016-02-24 华为技术有限公司 通过网络浏览器中的uri去引用监控nat行为
CN103516729A (zh) * 2013-10-25 2014-01-15 深圳创维-Rgb电子有限公司 一种流媒体传输方法以及系统
CN105721570A (zh) * 2016-02-04 2016-06-29 福建星网锐捷通讯股份有限公司 数据点对点传输方法及装置
CN105721570B (zh) * 2016-02-04 2019-06-25 福建星网锐捷通讯股份有限公司 数据点对点传输方法及装置
CN105915658A (zh) * 2016-07-04 2016-08-31 上海优刻得信息科技有限公司 获取客户端ip地址的数据调用方法、数据传输方法
CN105915658B (zh) * 2016-07-04 2019-07-23 优刻得科技股份有限公司 获取客户端ip地址的数据调用方法、数据传输方法
US11064453B2 (en) 2016-11-18 2021-07-13 Nokia Technologies Oy Position stream session negotiation for spatial audio applications
CN110178387A (zh) * 2016-11-18 2019-08-27 诺基亚技术有限公司 用于空间音频应用的位置流会话协商
CN110178387B (zh) * 2016-11-18 2021-09-07 诺基亚技术有限公司 用于空间音频应用的位置流会话协商
CN108234398A (zh) * 2016-12-15 2018-06-29 中国电信股份有限公司 多媒体通信方法和系统以及相关设备
CN108234398B (zh) * 2016-12-15 2021-01-08 中国电信股份有限公司 多媒体通信方法和系统以及相关设备
CN109067659A (zh) * 2018-08-20 2018-12-21 普联技术有限公司 一种会话建立方法、路由器及会话系统
CN112565234A (zh) * 2020-11-30 2021-03-26 武汉烽火众智数字技术有限责任公司 基于WebRTC的跨网传输系统及方法
CN114553822A (zh) * 2022-02-07 2022-05-27 邦彦技术股份有限公司 一种简易nat穿越的方法
CN115484311A (zh) * 2022-08-19 2022-12-16 重庆长安汽车股份有限公司 国标信令边缘代理系统的信令交互方法、装置及服务器
CN115484311B (zh) * 2022-08-19 2024-05-07 重庆长安汽车股份有限公司 国标信令边缘代理系统的信令交互方法、装置及服务器

Also Published As

Publication number Publication date
CN101860536B (zh) 2014-05-07

Similar Documents

Publication Publication Date Title
CN101860536B (zh) 一种基于sip软终端的私网穿越系统和方法
US7272650B2 (en) Communication protocols operable through network address translation (NAT) type devices
US7068655B2 (en) Network address and/or port translation
ES2364793B2 (es) Fijación de la ruta de flujos portadores de ip en una red de próxima generación.
US8484359B2 (en) Providing telephony services to terminals behind a firewall and/or a network address translator
CN101257433B (zh) 实现网络地址转换穿越的方法和系统
CN102685268B (zh) 一种VoIP中基于ICE协议的快速私网穿越方法
CN101606352B (zh) 下一代网络中用于非sip讲述者的服务网关代理
JP4695457B2 (ja) 関係者識別データの収集及び分配システム及び方法
US10601880B2 (en) Conference reconstruction in SIP networks
CN101902506A (zh) 一种sip呼叫穿越网络地址转换的方法和系统
CN101047548A (zh) 多个nat的私有网络内的通信
CN109995734A (zh) 一种基于SIP协议的WebRTC的通信方法
CN101883156B (zh) 穿越nat设备的方法
CN101114985A (zh) 编解码转换系统及方法
CN104994067A (zh) Sip网络访问rtsp监控网络的系统及方法
CN101471965B (zh) 本地传输地址分配方法、媒体网关及媒体网关控制器
AU2005217989A1 (en) Processing voice data in packet communication network with encryption
Chen et al. An effective IPv4–IPv6 translation mechanism for SIP applications in next generation networks
CN102137090A (zh) 一种登陆voip网络的方法及鉴权服务器
WO2010105547A1 (zh) 多域互通方法和系统及装置
US20150326734A1 (en) Sbc for cloud environment and method for operating sbc
TWI448184B (zh) 改良式sip通訊協定
CN116233091A (zh) 视频监控系统基于sip协议的分布式流媒体跨网段访问方法
GB2403626A (en) Communication through network address translation (nat) devices

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140507

Termination date: 20150531

EXPY Termination of patent right or utility model