一种基于ICE的SIP穿越Symmetric NAT设备的方法
【专利摘要】本发明一种基于ICE的SIP穿越Symmetric NAT设备的方法包括:步骤S1,通信双方先后收集候选地址,互换地址信息并根据优先级排列形成地址检测列表;步骤S2,双方先后进行连通性检测,根据主机地址到中继地址的地址对连通性检测过程中是否产生服务器映射候选地址来判断所处的网络拓扑是否存在Symmentric NAT,步骤S3,确定Symmentric NAT方源端口选择策略以及预测Symmentric NAT方分配的端口值;步骤S4,对Symmentric NAT方以预测的端口值进行连通性检查,本发明不仅保留了ICE的优点,还能适应各种NAT环境,而且利用NAT自身特性,不需要STUN服务器探测NAT类型,巧妙地克服了ICE在Symmentric NAT下的不足,从而保证了服务质量,本发明不必改变现有网络的拓扑结构,很好地解决了NAT穿越的灵活性和有效性的问题。
【专利说明】
_种基于丨GE的SI P穿越Symmetr i c NAT设备的方法
技术领域
[0001]本发明属于媒体数据网络传输技术领域,尤其涉及一种基于ICE的SIP穿越Symmetric NAT设备的方法。
【背景技术】
[0002]近年来,由于互联网技术和智能移动设备的迅速发展,实时网络音视频通信VoIP(Voice over IP)成为移动社交发展必不可少的需求。然而NAT (Network AddressTranslator)设备和技术的使用,使得SIP无法直接穿越NAT与处于不同局域网的对端进行通信,严重影响了音视频的P2P实现。因此如何有效穿越Symmetric NAT是VoIP在下一代网络中P2P面临的一个重要难题。针对基于SIP的NAT穿越问题,业界出现了很多穿越技术,如 STUN 或 TURN、ICE、UpnP等。其中 ICE( Iteractive ConnectivityEstablishment,交互式连接建立)结合了 STUN和TURN两种穿越方式,是一种运用最为广泛的综合穿越策略。
[0003]ICE是一种灵活可靠的方案,综合利用已有的STUN和TURN等协议并对其进行适当的扩展实现NAT穿越的,可以适用于各种网络拓扑下的NAT穿越,对部署了Symmetric NAT的网络,使用TURN进行中转。ICE框架实现流程大致如下:1、客户端收集本地候选者地址;2、将收集的候选地址告诉对方;3、客户端按优先级排列本地和远程候选者地址,形成地址对;4、对候选地址对做连通性检查;5、如果地址对连通检查成功,通知应用层直连成功。
[0004]SlPCSess1n Initiat1n Protocol,会话初始协议),是一种应用层的控制协议,由IETF的MMUSIC工作组开发而来,可用于创建、修改、更新和结束多媒体用户交互式会话,其中的会话可以是IP电话、多媒体会议。相对于另外一种主要的VoIP信令H.323,SIP在网络组建、会话建立时间、扩展性、灵活性、实现成本等方面都有较大优势,常用与SDP(Sess1n Descript1n Protocol,会话描述协议)应用于多媒体的通信系统中。
[0005]SIP与ICE的结合使用的流程如图1所示。ICE将几个协议结合在一起,在两个客户端之间能提供几条候选路径,这在最大程度上保证了两端通信成功的几率。并且它还提供了在几条通信路径中给出优先顺序的能力,让使用中继(中继的方式代价比较昂贵)的传输方式的优先级降到最低,只有在其他路径都行不通的情况下,才会启用该路径。然而基于ICE的SIP穿越NAT具有一定的局限性,对于主机限制最严格的Symmetric NATJCE采取将穿越NAT收发数据通过TURN服务器中转策略,导致效率低、丢包、服务器负荷大等问题。
[0006]针对该缺陷,一些专利提出了不同的解决方案。然而大多数专利解决SymmetricNAT穿越的问题均在采用STUN协议探测出当前双方设备所处NAT类型的基础上。比如现有技术中公开了申请号为201210160837.3的中国专利“一种VoIP中基于ICE的快速私网穿越方法”,该方法首先进行NAT类型检测,将检测结果分为对称型NAT环境或非对称型NAT环境;还有公开了申请号为201510357675.6的中国专利“一种NAT穿透方法和装置”,该方法首先进行NAT类型检测,检测到一端是Port Restricted Cone另一端是Symmentric,或是两端都是Symmentric,则做相应处理;以及公开了申请号为201010204840.1的中国专利“穿越NAT设备的方法”和公开了申请号为201510352773.0的中国专利“一种基于SIP和ICE的音视频通信方法”等等。这些方案虽然成功解决了Symmetric NAT设备的穿越,然而也引入了不少问题。
[0007]探测通信两端的NAT设备类型,其实现依据为RFC 3489。而在RFC(5389)已经移除了 NAT类型探测的能力,主要原因是目前网络类型纷繁复杂,越来越多的实践发现,在多层NAT下,类型的探测不总是有效的,这势必会引进不稳定因素。同时RFC 3489探测NAT类型方案指出必须借助一个具有双网卡双公网IP的STUN服务器,搭建满足该要求的STUN服务器无疑会增加成本。同时,目前使用ICE时,均不需要事先探测NAT类型,客户端忽略他们各自的网络拓扑结构。而上述解决方案中对于ICE能进行穿越的非Symmetric NAT网络拓扑,也需要增加复杂的NAT类型探测过程,无疑会增加不必要的延迟开销。
【发明内容】
[0008]针对上述存在的问题,本发明提出一种基于ICE的SIP穿越Symmetric NAT设备的方法,
所述NAT穿透方法包括:步骤SI,通信双方先后收集候选地址,互换地址信息并根据优先级排列形成地址检测列表;步骤S2,双方先后进行连通性检测,根据主机地址到中继地址的连通性检测过程中是否产生prf Ix候选地址来判断所处的网络拓扑,如果检测到Symmentric NAT的存在,则跳转到步骤S3,该NAT类型发现机制对于不管是在一个NAT设备后面或者多个NAT后面,允许客户端发现对端以及自身所在网络拓扑结构的信息;步骤S3,确定Symmentric NAT方源端口选择策略以及预测Symmentric NAT方分配的端口值;步骤S4,对Symmentric NAT方以预测的端口值进行连通性检查。
[0009]本发明的客户端遵循原ICE流程,收集主机候选地址、srfIx候选地址以及中继候选地址,并将这些信息通过信息服务通知到对方;在做连通性检查时候,若客户端发现所在网络拓扑结构信息中存在Symmentric NAT,则使用端口预测模型确定端口分配规律,并向预测出来的端口发送STUN Bind请求包,同时端口预测模型对其它应用程序端口占用进行了简单地规避,大大提高直连的几率。本发明不仅保留了 ICE的优点,能适应各种NAT环境,而且利用NAT自身特性,不需要STUN服务器探测NAT类型,巧妙地克服了 ICE在Symmentric NAT下的不足,即无需中继可实现媒体流的通信,从而保证了服务质量。本发明是基于客户端的解决方案,这样只需升级客户端,不必改变现有网络的拓扑结构,很好地解决了 NAT穿越的灵活性和有效性的问题。
【附图说明】
[0010]图1为SIP与ICE结合使用的流程图;
图2为本发明的系统框架图;
图3为本发明音视频呼叫流程图;
图4为本发明的流程示意图;
图5为本发明中相关端口的对应关系图; 图6为本发明中会话发起方的音频组件一候选地址列表;
图7为本发明中应答方的音频组件一候选地址列表;
图8为本发明中被叫端B音频排序后的检测地址列表;
图9为本发明中主叫端A音频排序后的检测地址列表;
图10为本发明中non-symmetric NAT情况下被叫端B音频通道连通性检测过程;
图11为本发明中non-symmetric NAT情况下主叫端A音频通道连通性检测过程;
图12为本发明中non-symmetric NAT情况下被叫端B收到主叫端A的STUN Bind请求后的检测过程;
图13为本发明中symmetric NAT情况下被叫端B音频通道连通性检测过程;
图14为本发明中NAT类型发现机制的流程图;
图15为本发明被叫端B处于的Symmentric NAT映射端口情况I ;
图16为本发明被叫端B处于的Symmentric NAT映射端口情况2;
图17为本发明中端口预测流程图;
图18为本发明成功预测端口后的连通性检测流程图。
[0011]以下结合实施例和附图对本发明做进一步详述。
【具体实施方式】
[0012]为更好地理解本发明,对某些术语说明如下:
STUNCSess1n Traversal Utilities for NAT):NAT 会话穿透效用;
TURNCTraversal Using Relay NAT):通过Relay方式穿越NAT;
Agent:是在请求/应答交换中与协议实现相关的,在一个请求/应答交换中,有两个相关的Agent;
Peer:从一个会话中的某个Agent的角度看,它的peer就是另一个Agent,进一步说,从请求者的角度看,它的peer就是应答者,从应答者的角度看,它的peer就是请求者;nominated pair:最终选取进行音视频传输的地址对;
val id pair:能使通信双方能互通的有效地址对,选取优先级最高的一条作为nominated pair;
打洞:内部主机ip和端口通过NAT访问目的主机,在NAT上留下映射的过程;穿越:处于外网的目的主机经过NAT到达内部主机的过程,穿越能成功,是在内部主机已在NAT上针对目的主机打洞的基础上;
Host candidate地址:主机候选地址,是通过绑定了特定端口到主机某个接口获取的;srflx candidate地址:服务器映射候选地址,是通过从主机候选地址发送一个STUN请求到STUN服务器获取的,S卩Agent的网络包经过一重或多重NAT穿透后,由STUN服务器观察到的经过NAT转换后的地址;
relay candidate地址:中继候选地址,是通过从主机候选地址发送一个STUN分配请求到TURN服务器而获取的一个候选传输地址,中继候选地址是常驻TURN服务器的,并且TURN服务器向后转播数据包到Agent,中继候选地址实际是TURN服务器为STUN请求的发起方在本机上分配的代理地址,所有被路由到该地址的网络包将会被转发到服务器反向地址,继而穿透NAT发送到终端,因此如名字所示,它是TURN服务器完成中继功能的地址。
[0013]首先说明本发明的原理,简述NAT涉及以下三个方面的NAT参数:
1.四种NAT类型
1)Full Cone (全锥型)NAT
一旦一个内网地址iAddr:1Port被映射到一个外部地址eAddr:ePort,来自内网地址iAddr:1Port的任何数据包将通过外部地址eAddr: ePort发送且任何外部主机能够通过eAddr: ePort这个外部地址发送数据包到内网地址iAddr:1Port ;
2)Restricted Cone(限制维型)NAT
一个内网地址iAddr:1Port被映射到一个外部地址eAddr: ePort,来自内网地址iAddr:1Port的任何数据包将通过外部地址eAddr: ePort发送,且仅只有接收到主机(iAddr:1Port)通过外部地址eAddr: ePort发送的数据包的外部主机通过该主机的任何端口发送到外部地址eAddr: ePort的数据包才能够被正确的转发到内网地址iAddr:1Port.也就是说主机有关端口无关;
3)Port Restricted Cone(端口限制维型)NAT
类似于address restricted cone NAT ,但是端口号有限制;一旦一个内网地址iAddr:1Port被映射到一个外部地址eAddr:ePort,来自内网地址iAddr:1Port的任何数据包将通过外部地址eAddr:ePort发送,仅只有接收到主机(iAddr:1Port)通过外部地址eAddr: ePort发送的数据包的外部主机通过该主机的相同端口发送到外部地址eAddr:ePort的数据包才能够被正确的转发到内网地址iAddr:1Port;
4)Symmetric(对称型)NAT
来自相同内部ip和port发送到相同目的地ip和port的请求被映射到唯一的外部ip和port地址;如果相同的内部主机采用相同的ip和port地址发送到不同的目的地,那么重新分配映射地址,只有先前收到内部主机发送的包的外部主机才能够发送返回包到内部主机。
[0014]针对前面三种NAT类型(S卩cone NAT)只要通信双方彼此知道对方的内部地址和外部地址的映射关系,然后通过UDP打洞的方式就可以建立相互连接的通信;但是第四种也就是Symmetric NAT的话,由于每次向不同目的地发送数据包时采用不同的外部地址,也就没办法通过直接的方式建立P2P连接。
[0015]2.源端口选择策略
NAT设备在传递由内网发送至外网的报文时,会对该内网报文的原端口进行转换,将转换后的端口称为源端口;在选择源端口时所采用的策略即称为源端口选择策略。通常的源端口选择策略有三种,一种是选择原端口型,即选择源端口与内网报文的原端口相同;另一种是递增选择型,即以一定的等差值递增选择源端口 ;最后一种是随机选择型。
[0016]3.NAT老化时间
基于硬件的限制,NAT设备不可能无限制地创建NAT连接;因此,已经创建的NAT通道将设置一个老化时间,以便及时释放资源。这个老化时间就是NAT老化时间。
[0017]通过上述对NAT的了解,造成基于ICE架构的直连效率过低,是因为没有很好地处理两端是Symmentric类型,或是一端Port Restricted Cone另一端是Symmentric类型的情况。如果能及时发现网络拓扑中存在Symmentric NAT,并预测Symmentric NAT的分配端口,那么就能处理Symmentric NAT直连。
[0018]如图2所示,本发明的系统中服务器处于公网,该服务器由SIP服务器、TURN服务器、STUN服务器组成,通信双方的两个客户端分别处于NAT后面,该客户端由SIP UA、端口预测模块、NAT类型发现模块、TURN客户端以及STUN客户端组成。
[0019]如图3所示,其中圆角矩形为在原呼叫流程新增的操作。通信双方各自包含音频RTP和RTCPJli^ RTP和RTCP这四条多媒体通道,RFC5245中规定的ICE组件一和二分别为音视频RTP、RTCP通道。ICE可根据客户端选择是否需要RTCP通道。以下先讨论只含组件一的流程,组件数为二时类似。
[°02°] 如图4所示,本发明一种基于ICE的SIP穿越Symmetric NAT设备的方法,包括如下步骤:
步骤S1、通信双方先后收集候选地址,互换地址信息并根据优先级排列形成地址检测列表;
(1)收集候选地址
主叫端A需要收集的对象包括本地传输地址和来源传输地址,本地传输地址通常由主机上I个物理接口绑定I个端口而获得,端口采用portl表示,主叫端A还将访问STUN和TURN服务器,对于每一个本地传输地址,会话者都可以从服务器上获得I组来源传输地址,通过访问STUN及TURN服务器获得的地址分别称为服务器映射候选地址(srf Ixcandidate)以及中继候选地址(relay candidate),服务器映射候选地址通过使用主机本地传输地址向STUN服务器发送STUN Bind请求获得,中继候选地址随机使用本地空闲端口port2发送Al locate请求给TURN服务器获得,经过NAT后,映射端口用port9,port 10表示,同理假设视频组件一通道获取服务器映射候选地址和中继候选地址随机使用的本地空闲端口分别为口01^3以及口01^4,通过嫩1'后,映射端口为口01'1:11401'1:12,相关端口对应关系如图5所示;
采用IPTURN代表TURN服务器的中继IP,且假设TURN服务器给主叫端A分配的中继端口为portAl,则会话发起方所获候选地址列表如图6所示;
(2)启动STUN服务器
主叫端A获得一组传输地址(包括本地传输地址和来源传输地址)后,将在本地传输地址启动STUN服务器,这意味着发送到来源地址的STUN服务将是可达的,与传统的STUN服务不同,客户端不需要在任何其它IP或端口上提供STUN服务,也不必支持TLS,ICE用户名和密码已经通过信令协议进行了交换;
客户端将在每个本地传输地址上同时接受STUN请求包和媒体包,所以发起者需要消除STUN消息与媒体流协议之间的歧义,可以通过查看接收到的包的属性字段“V=”,因为RTP与RTCP包总是以0bl0(v=2)打头,而STUN是ObOO,对于每个运行STUN服务器的本地传输地址,客户端都必须选择相应的用户名和密码;用户名要求必须是全局惟一的,用户名和密码将被包含在初始化消息中传送至响应者,由响应者对STUN请求进行鉴别;
(3 )确定传输地址的优先级
STUN服务器启动后,下一步就是确定传输地址的优先级;优先级反映了 UA在该地址上接收媒体流的优先级别,取值范围在O到I之间,通常优先级按照被传输媒体流量来确定;流量小者优先,而且对于相同流量的,物理接口产生的本地传输地址具有最高的优先级,然后是STUN来源地址; (4)构建初始化信息
初始化消息由一系列媒体流组成,每个媒体流都有一个缺省地址和候选地址列表;缺省地址通常被映射到SIP信令消息传递地址上,而候选地址列表用于提供一些额外的地址;对于每个媒体流来说,任意Peer之间实现最大连通可能性的传输地址是由公网上TURN服务器提供的地址,客户端将其编成一个缺省地址;同时客户端将可用的传输地址编成一个候选地址列表并且为每个候选元素分配一个会话中惟一的标识符,该标识符以及上述的优先级都被编码在候选元素的id属性中,一旦初始化信息生成后即可通过INVITE消息发送至被叫端B;
(5)响应处理
连通性检测和地址收集:被叫端B接收到初始化信息后,会同时做几个事情:首先,执行步骤(I)中描述的地址收集过程,所获得的候选地址列表如图7所示;接着选取自己的地址与对方进行两两配对,删除重复的地址对后和NAT映射地址一起作为发送检测数据包源地址的地址对,按照特定的优先级公式计算候选地址的优先级,并进行排序形成地址检测列表,如图8所示。
[0021 ]图8中每行最前面的数字为根据优先级排序后的序号,IPTURN为TURN服务器的中继IP,包含中继地址的地址对处于地址列表中每个组件的最后,如序号3、4、5。
[0022]步骤S2、通信双方先后进行连通性检测,然后根据主机地址到中继地址的地址对在连通性检测过程中是否产生服务器映射候选地址来判断所处的网络拓扑中是否存在symmetric NAT;
(1)当形成地址检测列表后,应答方会按照优先级依次从检测地址列表中选取地址对,并将地址对的左边地址作为源地址,右边地址作为目的地址,发送STUN Bind请求,该请求要求必须包含Username属性和Password属性,属性值为从SDP包的“alt”属性中得到的用户名和密码,该STUN Bind请求消息与收集地址时的STUN Bind请求消息不一样,ICE添加了几个新的属性,从而扩展了 STUN Bind请求消息:优先级PR1RITY,USE-CANDI DATE,应答方ICE-CONTROLLED,发起方ICE-CONTROLLING,由于有Controlling Agent和ControIledAgent之分,所以主叫端与被叫端的处理有很多不相同的地方,Controlling Agent会在所有的发送的请求里都带上Flag标志,即Flag=I,而Controlled Agent不用带Flag标志,即Flag=0,USE-CANDIDATE的值即为该Flag的值,Controlling Agent将会话发起端最先谈判成功的地址对选择为媒体传输通道;
在被叫端B开始进行连通性检测时,将同时构建初始化信息发送给主叫端A,主叫端A在收到信息后,也按照相同的流程形成连通性地址检测列表,如图9所示,并进行连通性检测;
(2)NAT类型发现机制
本发明提出的NAT类型发现机制发生在ICE的连通性检测过程中,假设通话的双方为主叫端A和被叫端B,且处于不同局域网内,下面依照双方所处NAT均不存在symmetric NAT的non-symmetric NAT情况、有一方存在symmetric NAT情况、或者双方均为symmetric NAT的情况来分别说明:
1.non-symmetric NAT情况
被叫端B先于主叫端A对每一个地址对发送STUN Bind请求,如图10所示,被叫端B先对优先级最高的第一个地址对(内网IPB: portl ’ _>内网IPA: port I)进行连通性检测,由于主叫端A与被叫端B处于不同的局域网内,所以由被叫端B主动发出的STUN Bind请求包到达不了主叫端A,接着被叫端B对第二个地址对进行连通性检测,因为主叫端A所处的NAT存在,且主叫端A没有主动向被叫端B发送过请求信息,所以被叫端B以主叫端A的服务器映射地址作为目的地址发送的STUN Bind请求信息会被A’NAT丢弃,无法送达主叫端A内部,但是该地址对的连通性检测使被叫端B针对主叫端A的映射地址进行了打洞操作,接着被叫端B进行下一个地址对的连通性检测,将STUN Bind请求发送至主叫端A的中继端口,通过TURN服务器的中转一定能到达主叫端A内部,保证了通信的百分百建立,主叫端A收到该请求后,将立即发送应答信息,被叫端B收到该应答信息,则将该地址对作为一个val id pair,同时继续进行下面地址对的连通性检测。
[0023]主叫端A会稍后于被叫端B进行连通性检测,如图11所示,同理,主叫端A检测列表中第一个地址对中的STUN Bind请求无法到达被叫端B,然而在进行第二个地址对的检测时,由于上述被叫端B已经进行了打洞操作,即被叫端B主动向主叫端A的映射地址发送过请求包,所以,当主叫端A以被叫端B的服务器映射地址作为目的地址发送STUN Bind请求包时,能够顺利通过B ’ NAT,到达被叫端B内部,被叫端B收到该请求包后,也将产生一个STUNResponse给主叫端A,在主叫端A收到被叫端B发来的应答后,将立即结束连通性检测过程,并将该地址对作为nominated pair,被叫端B发送应答的同时将STUN Bind消息中的源地址和目的地址提取出来,并找到相对应的地址对(序号I)重发STUN Bind请求,如图12所示,由于主叫端A在上述过程中也进行了打洞操作,所以,被叫端B重发STUN Bind请求能到达主叫端A内部,同时收到主叫端A的应答,收到应答后,被叫端B结束连通性检测过程,将该地址对也作为valid pair,最终在所有valid pair中选出优先级最高的地址对作为nominatedpair,毫无疑问,nominated pair即为该地址对,与主叫端A达成一致;
2.symmetric NAT情况
由上述分析可知,ICE能很好地处理non-symmetric NAT情况,但是对于网络拓扑中一端是Port Restricted Cone,另一端是Sy_entric NAT,或是两端都是Symmentric NAT的情况,由于NAT的特性,主叫端A序号为I的地址对的STUN Bind请求也无法到达被叫端B,导致最终通信的双方选择nominated pair均包含中继地址,无法实现音视频数据的点对点传输,提出NAT发现机制解决该问题。
[0024]先假设被叫端B处于symmetric NAT下,而主叫端A处于Cone NAT下,SymmentricNAT不同于Cone NAT的最主要的特性是:NAT下同一主机地址发送请求去往不同目的地,映射的ip不一样,若B’NAT为Symmentric NAT,那么进行序号I地址对的连通性检测时,如图13所示,通过B,NAT映射出去的端口将不为port9,,记为New_port I,因为此时目的地址不是STUN服务器的地址(IPTURN: 3478),而是主叫端A的服务器映射地址;同理进行序号2地址对的连通性检测时,通过B,NAT映射出去的端口也不为port9,,且不为New_port I,记为New_port2,因为此时目的地址为IPTURN:portAl,即主叫端A的中继地址,而不是IPTURN:3478,而若B’NAT为Cone NAT,图中New_portl= New_port2= port9’;
通过上述分析,如果被叫端B在进行序号2地址对连通性检测时,主叫端A将收到该STUNBind请求消息,并可从其SOURCE-ADDRESS参数中获得该STUN Bind请求消息的来源地址,即为被叫端B通过NAT后的外网映射地址,如果该地址不同于被叫端B的三个候选地址,将该地址称为服务器映射候选地址(prflx candidate),如果产生了服务器映射候选地址,那么主叫端A可判断通信对端所处的NAT类型必定为Symmentric NAT,反之为Cone NAT;同时被叫端B也将收到主叫端A发回的应答,并从该STUN Respond消息中的MAPPED-ADDRESS参数得到自身通过NAT后的外网映射地址,如果该地址不同于自身三个候选地址中的任意一个,则可以判定,客户端自身所处的NAT类型一定为Symmentric NAT,反之为Cone NAT;
如图14所示,本发明提出的NAT类型发现机制能很好地判断当前通信双方所处的网络拓扑中是否存在Symmentric NAT。
[0025]步骤S3、确定Symmentric NAT方源端口选择策略以及预测Symmentric NAT方分配的端口值;
(I)当主叫端A和被叫端B的私网地址网络号一样时,如主叫端A为192.168.0.66/24,客户端B为192.168.0.56/24,被叫端B处于的Symmentric NAT映射端口情况如图15所示,图中compl代表组件一,图中①③线段对应的端口为音、视频内网绑定端口收集服务器映射地址时在NAT上所留下的端口,分别为port9’和portll ’,其中内网占用端口 portl’与port3 ’为音、视频通道收集的内网端口;②与④线段对应的端口为音、视频通道收集中继地址时在NAT上所留下的端口,分别为portlO’与portl2’ ;ICE进行连通性检测时,是音视频地址对交替进行检测,因此⑤⑥线段对应的端口为音、视频通道进行序号I连通性检测在NAT上所留下的端口,即portl3’、portl4’为被叫端B发送STUN Bind请求至主叫端A的服务器映射地址所留下来的端口,也正是需要预测的端口,成功穿越Symmentric NAT的关键;⑦⑧线段对应的端口为音、视频通道进行序号2连通性检测在NAT上留下的端口,S卩portl5 ’、portl6 ’为被叫端B发送STUN Bind请求至主叫端A的中继地址所留下来的端口,除port 13’、port 14’外,其余六个端口均为已知。
[0026]当主叫端A收到INVIT E请求后,解析出对被叫端B的映射端口信息P ο r 19 ’?portl2’,如图17所示,其通信对端的端口预测流程如下所示:
Stepl.如果通过NAT类型发现机制得出对端为Symmetric NAT,此时即已经获得port 15 ’ 及port 16 ’ 的值,转Step3 ;若对端NAT类型为Cone NAT,则转Step2 ;
Step2.不改变原ICE流程,直至连通成功;
Step3.通过port9’?portl2’可以得出NAT的源端口选择策略:如果portl2’_ portll’=portll’- portlO’= portlO’- port9 ’,车专 Step4;如果 port9 ’ = portl’,portlO’ =port2’,portll’= port3’,portl2’= port4’,即内外网端口分配一致,转 Step5,否则,转Step6;
Step4.NAT的源端口选择策略为递增选择型,可得等差值为,用comp_cnt表示使用ICE的组件数,若且,转Step7,否则转Step8;
Step5.NAT的源端口选择策略为选择原端口型,选择原端口型对称NAT的特点为,第一次使用端口进行发包时,NAT会映射出与内网端口一致的外网端口,若第二次再使用该内网端口往不同目的地发包,则会呈现出递增选择型对称NAT的特点,以一定的等差值分配端口,端口被占用后的等差值为:,则,,转Step9;
Step6.源端口选择策略为随机型,选择TURN服务器中转策略;
Step7.在ICE流程过程中未出现其它应用程序的端口占用问题,,,转Step9
StepS.在ICE流程中出现了其它应用程序占用NAT外网端口问题。则创建大小为的数组portl3[n]Nportl4[n],jJi!jportl3[0]=portl4[0]=portl5,-,portl3[l]=portl4[l] =ροΓ?Ιδ'-2,portl3[n-l]= portl4[n_lhportlS’ _η,车专SteplO;
Step9.主叫端A以内网IPA: port I为源地址,IPB: portl3 ’为目的地址以及IPA: port3为源地址,IPB:portl4’为目的地址发送STUN Bind请求;
Stepl0.主叫端A 以内网 IPA: port I为源地址,分别以 IPB: port 13 [O]?IPB: port 13 [n-1]为目的地址,以及IPA:port3为源地址,分别以IPB:portl4[0> IPB:portl4[n_l]为目的地址发送STUN Bind请求;
(2)主叫端A和被叫端B的私网地址网络号不一样时,如主叫端A为192.168.0.66/24,而被叫端 B 为 10.0.173.188/24或为 192.168.1.20/24。
[0027]由于当前主叫端A与被叫端B的私网地址网络号不一样,那么在进行序号为O的地址对连通性检测时,根据路由原理,发送的STUN Bind请求会到达最外层NAT,并在NAT上留下映射,占用一个端口,此时Symmentric NAT映射端口情况如图16所示,其通信对端的端口预测流程与第一种情况一致,除了将判断递增选择型源端口选择策略的Symmentric NAT上的端口是否有被其余应用程序占用时条件由“且”改为“且”;
步骤S4JtSymmentric NAT方以预测的端口值进行连通性检查,直至成功通过直连方式发送音视频流;
主叫端A在预测出对端端口 port 13 ’与port 14 ’之后,立即发送STUN Bind请求包,如图17所示,成功收到被叫端B发回的应答后,即代表预测成功,最终的音视频传输路径将不经过TURN服务器中转,成功实现Symmentric NAT下的音视频数据的点对点传输。
[0028]本发明的实施例中只选取组件数为I,且主叫端A处于任意Cone NAT,被叫端B处于Symmentric NAT的情况。然而对于主叫端A与被叫端B均处于Symmentric NAT,以及主叫端A为Symmentric NAT,被叫端B处于任意Cone NAT,以及组件数为二时,调整相关公式参数,本发明均能很好的实现Symmentrie NAT源端口选择策略为递增选择型和选择原端口型时的穿越。
[0029]以上所述,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【主权项】
1.一种基于ICE的SIP穿越SymmetricNAT设备的方法,系统中服务器处于公网,该服务器由SIP服务器、TURN服务器、STUN服务器组成,通信双方的两个客户端分别处于NAT后面,该客户端由SIP UA、端口预测模块、NAT类型发现模块、TURN客户端以及STUN客户端组成,其特征在于包括如下步骤: 步骤S1、通信双方先后收集候选地址,互换地址信息并根据优先级排列形成地址检测列表; 步骤S2、通信双方先后进行连通性检测,根据主机地址到中继地址的地址对连通性检测过程中是否产生服务器映射候选地址来判断所处的网络拓扑是否存在Symmentric NAT; 步骤S3、确定Symmentric NAT方源端口选择策略以及预测Symmentric NAT方分配的端口值; 步骤S4 JtSymmentric NAT方以预测的端口值进行连通性检查,直至成功,通过直连方式发送音视频流。2.根据权利要求1所述的一种基于ICE的SIP穿越SymmetrieNAT设备的方法,其特征在于具体包括如下步骤: 步骤S1、通信双方先后收集候选地址,互换地址信息并根据优先级排列形成地址检测列表: (1)收集候选地址 主叫端A需要收集的对象包括本地传输地址和来源传输地址,本地传输地址通常由主机上I个物理接口绑定I个端口而获得,端口采用portl表示,主叫端A还将访问STUN和TURN服务器,对于每一个本地传输地址,会话者都可以从服务器上获得I组来源传输地址,通过访问STUN及TURN服务器获得的地址分别称为服务器映射候选地址以及中继候选地址,服务器映射候选地址通过使用主机本地传输地址向STUN服务器发送STUN Bind请求获得,中继候选地址随机使用本地空闲端口 port2发送Allocate请求给TURN服务器获得,经过NAT后,映射端口用port9,port 10表示,同理假设视频组件一通道获取服务器映射候选地址和中继候选地址随机使用的本地空闲端口分别为port3以及port4,通过NAT后,映射端口为portll,portl2; 采用IPTURN代表TURN服务器的中继IP,且假设TURN服务器给主叫端A分配的中继端口为portAl,则会话发起方获取候选地址列表; (2)启动STUN服务器 主叫端A获得一组包括本地传输地址和来源传输地址的传输地址后,将在本地传输地址启动STUN服务器,这意味着发送到来源地址的STUN服务将是可达的,与传统的STUN服务不同,客户端不需要在任何其它IP或端口上提供STUN服务,也不必支持TLS,ICE用户名和密码已经通过信令协议进行了交换; 客户端将在每个本地传输地址上同时接受STUN请求包和媒体包,所以发起者需要消除STUN消息与媒体流协议之间的歧义,可以通过查看接收到的包的属性字段“V=”,对于每个运行STUN服务器的本地传输地址,客户端都必须选择相应的用户名和密码;用户名要求必须是全局惟一的,用户名和密码将被包含在初始化消息中传送至响应者,由响应者对STUN请求进行鉴别; (3 )确定传输地址的优先级 STUN服务器启动后,下一步就是确定传输地址的优先级;优先级反映了 UA在该地址上接收媒体流的优先级别,取值范围在O到I之间,优先级按照被传输媒体流量来确定,流量小者优先,而且对于相同流量的,物理接口产生的本地传输地址具有最高的优先级,然后是STUN来源地址; (4)构建初始化信息 初始化消息由一系列媒体流组成,每个媒体流都有一个缺省地址和候选地址列表;缺省地址被映射到SIP信令消息传递地址上,而候选地址列表用于提供一些额外的地址;对于每个媒体流来说,任意Peer之间实现最大连通可能性的传输地址是由公网上TURN服务器提供的地址,客户端将其编成一个缺省地址;同时客户端将可用的传输地址编成一个候选地址列表并且为每个候选元素分配一个会话中惟一的标识符,该标识符以及上述的优先级都被编码在候选元素的id属性中,一旦初始化信息生成后即可通过INVITE消息发送至被叫端B; (5)响应处理 即进行连通性检测和地址收集:被叫端B接收到初始化信息后,先执行步骤(I)中描述的地址收集过程获得候选地址列表;接着选取自己的地址与对方进行两两配对,删除重复的地址对后和NAT映射地址一起作为发送检测数据包源地址的地址对,按照特定的优先级公式计算候选地址的优先级,并进行排序形成地址检测列表; 步骤S2、通信双方先后进行连通性检测,根据主机地址到中继地址的地址对连通性检测过程中是否产生服务器映射候选地址来判断所处的网络拓扑是否存在Symmentric NAT: (1)当形成地址检测列表后,应答方会按照优先级依次从检测地址列表中选取地址对,并将地址对的左边地址作为源地址,右边地址作为目的地址,发送STUN Bind请求,该请求包含Username属性和Password属性,属性值为从SDP包的“alt”属性中得到的用户名和密码,该STUN Bind请求消息与收集地址时的STUN Bind请求消息不一样,ICE添加了几个新的属性:优先级 PR1RITY,USE-CAND IDATE,应答方 ICE-CONTROLLED,发起方 ICE-C0NTR0LLING,Controlling Agent将会话发起端最先谈判成功的地址对选择为媒体传输通道; 在被叫端B开始进行连通性检测时,将同时构建初始化信息发送给主叫端A,主叫端A在收到信息后,也按照相同的流程形成连通性地址检测列表,并进行连通性检测; (2)NAT类型发现机制 该NAT类型发现机制发生在ICE的连通性检测过程中,如果被叫端B在进行地址对连通性检测时,主叫端A收到该STUN Bind请求消息,并可从其SOURCE-ADDRESS参数中获得该STUN Bind请求消息的来源地址,即被叫端B通过NAT后的外网映射地址,如果该地址不同于被叫端B的三个候选地址,该地址称为服务器映射候选地址,如果产生了服务器映射候选地址,那么主叫端A可判断通信对端所处的NAT类型必定为Symmentric NAT,反之为Cone NAT;同时被叫端B也将收到主叫端A发回的应答,并从该STUN Respond消息中的MAPPED-ADDRESS参数得到自身通过NAT后的外网映射地址,如果该地址不同于自身三个候选地址中的任意一个,贝1J可以判定,客户端自身所处的NAT类型一定为Symmentric NAT,反之为Cone NAT; 步骤S3、确定Symmentric NAT方源端口选择策略以及预测Symmentric NAT方分配的端口值; (1)当主叫端A和被叫端B的私网地址网络号一样时,当主叫端A收到INVITE请求后,解析出被叫端B的映射端口信息,包括音、视频分别绑定内网端口portl ’与port3 ’收集服务器映射地址时在NAT上所留下的端口,记为port9’、portll’,以及音、视频通过内网端口记为port2’、port4’收集中继地址时在NAT上所留下的端口,分别记为口01*1:10’与。01'1:12’ ; 需要预测的端口为客户端B发送STUN Bind请求至客户端A的服务器映射地址所留下来的端口,记为portl3’、portl4’ ; 预测流程如下所示: Stepl.如果通过NAT类型发现机制得出对端为Symmetric NAT,此时即可以获得被叫端B发送STUN Bind请求至客户端A的中继地址在所处NAT上所留下来的端口,记该音频与视频所留下的端口分别为portl5’、portl6’,转Step3;若对端NAT类型为Cone NAT,则转Step2; Step2.不改变原ICE流程,直至连通成功; Step3.通过port9’?portl2’可以得出NAT的源端口选择策略:如果portl2’_ portll’=portll’- portlO’= portlO’- port9 ’,车专 Step4;如果 port9 ’ = portl’,portlO’ =port2’,portll’= port3’,portl2’= port4’,即内外网端口分配一致,转 Step5,否则,转Step6; Step4.NAT的源端口选择策略为递增选择型,可得等差值为,用comp_cnt表示使用ICE的组件数,若且,转Step7,否则转Step8; Step5.NAT的源端口选择策略为选择原端口型,选择原端口型对称NAT的特点为,第一次使用端口进行发包时,NAT会映射出与内网端口一致的外网端口,若第二次再使用该内网端口往不同目的地发包,则会呈现出递增选择型对称NAT的特点,以一定的等差值分配端口,端口被占用后的等差值为:,则,,转Step9; Step6.源端口选择策略为随机型,选择TURN服务器中转策略; St ep7.在I CE流程过程中未出现其它应用程序的端口占用问题,,,转St ep9 StepS.在ICE流程中出现了其它应用程序占用NAT外网端口问题,则创建大小为的数组portl3[n]Nportl4[n],jJi!jportl3[0]=portl4[0]=portl5,-,portl3[l]=portl4[l] =ροΓ?Ιδ'-2,portl3[n-l]= portl4[n_lhportlS’ _n,车专SteplO; Step9 ?主叫端A以内网IPA: port I为源地址,IPB: port 13’为目的地址以及IPA: port3为源地址,IPB:portl4’为目的地址发送STUN Bind请求; Stepl0.主叫端A以内网IPA:portl为源地址,分别以IPB:portl3[O]?IPB:port 13[n-1]为目的地址,以及IPA:port3为源地址,分别以IPB:portl4[0> IPB:portl4[n_l]为目的地址发送STUN Bind请求; (2)主叫端A和被叫端B的私网地址网络号不一样时,在进行序号为O的地址对连通性检测时,根据路由原理,发送的STUN Bind请求会到达最外层NAT,并在NAT上留下映射,占用一个端口,此时对端的端口预测流程与(I)一致,除了将判断递增选择型源端口选择策略的Symmentric NAT上的端口是否有被其余应用程序占用时条件由“且”改为“且”; 步骤S4 JtSymmentric NAT方以预测的端口值进行连通性检查,直至成功通过直连方式发送音视频流: 主叫端A在预测出对端端口之后,立即发送STUN Bind请求包,成功收到被叫端B发回的应答后,即代表预测成功,最终的音视频传输路径将不经过TURN服务器中转,成功实现 Symmentri c NAT下的音视频数据的点对点传输。
【文档编号】H04L12/26GK105827748SQ201610311912
【公开日】2016年8月3日
【申请日】2016年5月12日
【发明人】邓小娇, 侯刚, 蔡方谊, 易骏
【申请人】东莞市南星电子有限公司