基于ICE的SIP穿越NAT方法的研究*
2015-04-13王梦杰口何加铭
王梦杰口,何加铭
(1.宁波大学通信技术研究所,浙江宁波315211; 2.浙江省移动网应用技术重点实验室,浙江宁波315211)
1 引言
NAT[1]已应用于各种网络环境中,它是一种将 局域网IP地址转换为公共IP地址的地址转换技术[21。 NAT主要工作在网络层,当报文在经过NAT设备时’ 应用层中包含的地址信息不做任何修改,只修改网络 层和传输层中的报文信息,其中包含的地址信息也会 被修改。SIP协议是应用层协议,当SIP终端使用SIP信 令建立会话通信时,后续流媒体和信令的交互使用的 传输地址都是SIP[3]信令中描述的私网IP地址,而这个 私网IP地址不能在公网上进行路由,所以媒体通道不 能正常建立w。
为解决NAT穿越问题,IETF提出了一些NAT 穿越的技术规范,例如:ALGs (Application Layer Gateways)、中间盒技术、STUN (Simple Traversal of UDP through NAT) •, TURN (Traversal Using Relay NAT)等气这些方案都有局限性,只能根据不 同的网络情况选择合适的方案,没有很好地解决NAT 穿越问题。所以,目前需要一种全面综合性NAT穿越 方法,而ICE技术正好是一种NAT穿越的综合性解决 方案,它结合了STUN和TURN的穿越NAT方式使 之能在各种NAT情况下进行穿透。
本文详细介绍了ICE算法,并针对ICE在对称型 NAT穿越上提出了优化方案,使ICE穿越NAT的时间 更短,同时也改进了ICE连通性测试时间较长的不足。
2 NAT的类型和特点[6]
2.1 完全圆锥(Full Cone) NAT
内网主机从相同的IP地址和端口号发出的所有请 求都会被完全圆锥NAT映射成相同的外网IP地址和端 口号。同时,通过这个映射的外网IP地址和端口号, 任何外网主机都能够向这个内网主机发送数据包。
2.2 受限圆锥(Restricted Cone) NAT
内网主机从相同的IP地址和端口号发出的所有请 求都会被受限圆锥NAT映射成相同的外网IP地址和端 口号,但不同于完全圆锥NAT的是、只有内网主机先 向外网的某个主机地址发送数据后,才能接收到该外 网主机发送给内网主机的数据,而拒绝其他外网主机 发送的数据包,支持数据包过滤功能。
2.3 端口受限维形(Port Restricted Cone) NAT
在映射规则上,端口受限锥形NAT和受限圆锥 NAT—样,但是在接收数据包上面有差别,差别在于 加了端口号的限制,内网主机只会接收之前巳经发送 过信息的外网主机IP地址和固定端口号,其他的IP地 址和端口号发送的数据都不会被接收。
2.4 对称型(Symmetric) NAT
对称型NAT和前面的3种类型NAT在映射规则上 都不一样。只有当目的地址和端口号一样时,从相同 的内网IP地址和端口号发出的所有请求才会被映射为 相同的外网IP和端口号,否则映射的端口号会不同。 同样,内网主机只会接收之前已经发送过信息的外网 主机IP地址和固定端口号,其他的IP地址和端口号发 送的数据都不会被接收。
3 ICE技术介绍
3.1 ICE简介
交互式连通建立方式ICE[7]是一种适用于各种 NAT类型下的NAT穿越解决方案,它结合了STUN 和TURN的NAT穿越方式,不需要对NAT设备做任 何修改,且会根据上面的协议选择最好的NAT穿越方 式。针对SIP穿越NAT的问题,只需要对ICE扩展SDP (Session Description Protocol) [8〗的~"些附加属性。
3.2 ICE算法漸呈[910]
(1)候选地址信息收集
所有能够用于会话的地址和端口都要被会话发起 方收集起来,其中包括本机地址和端口、NAT映射地 址和端口、服务器中继地址和端口。一般而言,本机 地址和端口是主机上的一个物理接口绑定一个端口而 获得,NAT映射地址和端口是从STUN服务器获得, 而服务器中继地址和端口则是TURN服务器提供。
(2)候选地址优先级确定
候选地址的优先级反映了会话者在该地址上接受 媒体流的优先级别,所以需要对其优先级进行排序, 其取值范围从0到1。通常所收集的候选地址优先级从 高到低是:本机地址、NAT映射地址、服务器中继地 址。而缺省候选地址则按连通可能性的大小来判定优 先级,一般是:服务器中继地址、NAT映射地址、本 机地址
(3) 初始化消息创建
初始化消息由一系列媒体流组成,每个媒体流 包含候选地址列表和一个缺省地址。在SDP媒体描述 中,缺省IP地址在c属性行,缺省端口和媒体参数在m 属性行,而所有收集的候选地址都在a属性行。将SDP 媒体描述作为消息体嵌入到SIP数据包中,同时提供地 址信息和媒体参数用于建立媒体流,完成呼叫和媒体 惶道的建立。会话发起者通过信令通道将初始化消息 发送给接受者。
(4)响应处理
会话接受者接收到初始化请求后,首先,会执行 候选地址和端口的收集,其过程与上文中描述一样。 为减少呼叫建立的时间,候选地址的收集过程可以在 呼叫前完成;其次,会对这些候选地址进行优先级排 序,其规则与上文中描述一样;最后,会话接受者会 决定是否接受该会话通信,若拒绝则ICE过程将会被终 止,若接受则会话接受者会发送Accept消息给会话发 起者。Accept消息的创建过程与上文中类似。
(5)连通性检测
如果会话接受者不支持ICE方式,则Accept消息 中将不会包含候选地址列表信息,而只包含缺省的地 址信息,这样会话发起者将不会执行连通性检测。否 则,会话双方得到双方的候选地址列表信息后,首先 会进行地址信息的配对,保证一方的每个地址都会与 对方的所有地址组成一个配对;然后对这些地址对进 行优先级排序,形成一个连通性检测列表;最后会话 双方进行连通性检测,获得有效的候选地址对,该地 址对就是双方进行会话通信的传输地址S这个过程的 时间会根据候选地址的多少和网络情况而变化,一般 候选地址越少、网络情况越好,时间就会越短。
(6)附加ICE过程
在候选地址连通性检测的过程中,如果某些 STUN事物没有结束,或者会话双方在信息交换的过 程中提供了新的候选地址,则会话双方的候选地址收 集过程将会继续,
(7) ICE到SIP的映射
当SIP采用ICE方式穿越NAT时,必须映射ICE定 义的相关参数到SIP消息中,如候选地址信息。同时 扩展SDP属性,在SDP的Media块中定义一个新属性 "a=candidate"来支持ICE。Media块中可以有多个该 属性,它包含候选地址信息,SDP接受端可以用该地 址信息替换c、m属性行中的地址和端口。
4 ICE方案的优化
4.1 ICE的不足
ICE过程中的候选地址连通性检査在网络情况很 差时需要较长时间[111。因为连通性检査是在接收方拿 起听筒准备讲话的时候,如果测试时间过长,则接收 方用户说的话需要很长时间才能传回到发起方,这会 增加通话延时,影响通话质量。
如果通话双方是在对称型NAT下,ICE实际就是 使用TURN,通话双方的数据都要经过服务器中转, 这样避免不了TURN造成的语音延迟问题,且会给服 务器造成较大压力。
4.2 ICE改进方法
针对ICE方法的不足,提出以下改进方法:
(1)连通性测试时间过长的改进
ICE在连通性测试时,增加NAT类型检测功能, 如果会话一方位于对称型NAT后,而另一方位于对称 型NAT或端口限制型NAT后,则只对中继候选地址进 行连通性检查,不对本机地址、NAT映射地址作连通 性检查,节省连通性检查所消耗的时间。同时在连通 性测试的过程中,当发起方和接收方测试到一个可以 互通的地址时就产生应答消息。因为候选地址的连通 性检查是按照地址对的优先级来测试的,所以可以保 证连通的那个地址对一定是优先级最高的。
(2)对称型NAT下穿越方式的改进
通话双方在连通性检测时检测各自的NAT类型, 如果会话一方(设为A)在对称型NAT后,而另一方 (设为B)在完全圆锥NAT或受限圆锥NAT后,这时B 的NAT映射地址和端口是可以连通的,而A的NAT映 射地址和端口是不可连通的。此时让A发送消息到B的 NAT映射地址和端口,当B接受到A的数据时,解析出 源地址和端口》并将该地址作为A通信的NAT映射地 址和端口,之后B发送响应数据到该源地址和端口,从 而实现NAT的穿越,与A建立连接,实现数据通信。 如果是其他情况,则采用TURN的方式进行穿越。
5 改进后的ICE方法工作流程
假设会话发起方A和会话接收方B都位于对称型 NAT后.,现在SIP终端A要与终端B进行通信,A的内 网地址是192.168.1.100,外网地址是218.0.4.145,B的 内网地址是10..22.70.90,外网地址是115.236.94.200。 ICE服务器绑定了2个公网IP_,地址是132.177.123.5 和132.177.123.6,其中STUN服务的端口使用3478和 3479, TURN服务的端口使用5566。
5.1 候选地址收集
A发起请求,进行候选地址收集,B接受到消息, 同时也进行候选地址收集.候选地址收集过程如图1所 示:
图1 A、B收集候选地址过程
A、B双方收集到的候选地址列表如表1所示:
表1 A、B的候选地址列表
5.2 判断NAT类型,并进行连通性检测
NAT类型的判断根据STUN协议提出的NAT类型 检测算法[12】,当判断出A、B两端都是对称型NAT时, 则直接对服务器中继地址进行连通性检测,而不需要 对本机地址、NAT映射地址作连通性检测,此过程与 原ICE相比,减少了需要测试的地址对,缩短了连通性 测试时间。B的连通性检测如图2所示。
B在连通性检测完成后,会给A发送一组应答消 息,当A收到来自B的应答消息后,也开始执行连通性 检测,如图3所示。
A、B双方的连通性检测完成后,就会得到一 条A、B通信的线路。A发送到B的媒体流将使用 地址132.177.123.5=5566:,然后ICE服务器通过 端口 8888转发至B、而B到A的媒体流将发送至 132.177.123.5:8889,然后ICE服务器通过端口5566转 发至A。
图2 B的连通性检测
图3 A的连通性检测
5.3 ICE附加过程
在测试TURN地址连通性的过程中,A、B双方还 会收集中继候选地址。A、B的ICE附加过程如图4所示。
以上是基于改进后的ICE方式穿越双方都在对称 型NAT后的简化过程。而基于改进后的ICE方式穿越 非对称型NAT的过程则与原ICE方案类似。
6 优化后ICE方案的实现
图4 A、B的ICE附加过程
测试环境的搭建:服务器搭建在Ubumu系统上, 该服务器采用ICE技术,结合了STUN和TURN服务 器的功能,同时在该服务器上安装MySQL数据库, 建立了sdpinfo、candidate、p2paddress这3张表,.分 别记录SDP消息、候选地址和成功穿透后的地址对。 客户端A、B在Windows系统上进行测试。A的内网地 址是192.168.1.100,外网地址是218.0.4.145,B的内 网地址是10.66.4.38,外网地址是202.107.195.199。 ICE服务器绑定了2个公网IP,地址是115.236.94.208 和115.236.94.209,其中STUN服务的端口使用3478和 3479, TURN服务的端口使用5566。
在测试过程中,根据数据库中存储的数据信息, 得出A、B的候选地址列表如表2所示:
表2 A、B的候选地址列表
然后A、B双方进行NAT类型检测,结果测出A 在对称型NAT后,而B在受限锥形NAT后,根据改 进后的ICE方案,此时会让A向B的NAT映射地址发 送消息,B记录下这个地址,并作为A的最新NAT 映射地址,将应答消息发送到这个最新的地址和端 口。此时A、B就建立了连接,也即完成了连通性测 试,实现了NAT穿越。最后双方通信的地址对为: 218.0.4.145:65421< >202.107.195.199:53391..。
在实验过程中,改进后的ICE实现了一方在对称 型NAT后,而另一方在受限锥形NAT后时,不采用 TURN方式也可以穿越NAT、同时在实验中,A、B双 方并没有对所有的地址进行连通性检测,与原ICE方案 相比节省了一半的时间。
同时,对多种NAT情况下做实验测试,并与原 ICE进行比较,测试结果如表3所示。
表3 原ICE与改进ICE的实验对比
7 结束语
ICE方式与其他NAT穿越方式相比有较明显的优 势,克服了其他穿越方式的单一局限性,能够穿越 任何NAT、本文对ICE的改进主要体现在候选地址连 通性检测和穿越对称型NAT这2个方面。在连通性检 测时,只要测试到一个可以互通的地址就产生应答消息,同时针对一方位于对称型NAT后,而另一方位于 对称型NAT或端口限制型NAT后时,则只对中继候选 地址进行连通性检查,不对本机地址、NAT映射地址 作连通性检查。在穿越对称型NAT时,则根据NAT类 型的检测,判断出双方是否都在对称型NAT环境下, 再作出相应的穿越方案,既避免了对称型NAT卞完全采用TURN方式,同时又有效节省了连通性检测时间。
[1] Srisuresh P, Holdrege M. RFC2663. IP Network Address Translator (NAT) Terminology and Considerations [S]. IETF, 1999.
[2]王健婷,赵霞,刘杰,等.基于P2PSIP的NAT穿透方法的研 究[J].北京工商大学学报,2008,5(5): 615-618.
[3] Rosenberg J, Schulzrinne H, Camarillo G, et al. RFC3261. SIP: Session Initiation Protocol[S]. IETF, 2002.
[4]梅小山.基于SIP的NAT穿越方案的研究与实现p].西 安:长安大学,2009.
[5]朱光,张云华,卢娟.基于ICE的VoIP穿越NAT方案的研 究00.计算机应用与软件,2011,28(10): 223-224.
[6]曹申会.NAT穿越技术研究与实现[D].南京:南京邮电 大学’ 2013.
[7] Rosenberg J. RFC5245. Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Ofier/Answer Protocols[S]. IETF, 2010.
[8] Mandley M, Jacobson V,Perkins C. RFC4566. SDP: Session Description Protocol[S]. IETF, 2006.
[9]杜得荣,刘建明,李宏周,等.移动互联网环境下SIP穿越 NAT的研究[J].微电子学与计算机,2013,30(7): 112113.
[10]曾立,吴平,高万林,等.基于ICE方式SIP穿透Symmetric NAT技术研究[J].计算机工程与设计,2005,26(11): 3018-3019.
[11]刘磊.基于ICE方式的SIP穿越NAT技术的研究[D].天 津:天津大学’ 2007.
[12] Rosenberg J, Weinberger J, Huitema C, et al. RFC3489. STUN—Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)[S]. IETF, 2003.*