随着互联网技术及多媒体技术的不断发展,利用因特网传送语音、视频、数据等多媒体技术成为现在研究的热点。VOIP技术应用就是其中一个重要的发展方向,它正逐渐渗透到大众的生活之中。
VOIP技术的核心信令传协议主要是SIP。SIP,即会话初始化协议,是在应用层的控制协议,用于建立、修改和终结一个或多个参与者的多媒体会话。具有可扩展性、移动性、灵活性强、独立于传输层等特点。
在互联网飞速发展和联网设备爆炸式增长的今天,IPv4地址空间资源已经非常紧缺,现行的地址类型分配方式也在一定程度上造成了IP地址资源的浪费。在这种网络地址资源匮乏而IPv6网络又不能马上普及的情况下,可以使用网络地址转换技术(NAT)。由于基本NAT只对IP地址进行转换,而SIP是应用层的控制协议,所以SIP消息和媒体流穿越NAT是不能被转换的。现在NAT中也部署了很多防火墙,从而加大了SIP穿越NAT结构网络的难度。
因此,SIP穿越NAT的技术成为了一项关键而又紧迫的技术。本文中提出了基于SBC的穿越NAT方案,简单有效地解决了SIP在NAT中的穿越问题。
2 基于SBC的穿越NAT方案
2.1 基于SBC穿越NAT方案的基本原理
SBC(SessionBorderController)称为会话边界控制器,SBC放置在IP网络边缘,作用为实现内外网的连接、互通和保护网元。SIP基于SBAC穿越NAT解决方案的基本思路就是通过对内部私网终端的呼叫信令和媒体进行中继来实现穿越NAT。SBC一般可以分为SBE(signalingborderelement)信令边缘控制单元和MBE(mediaborderelement)媒体边缘控制单元两种。SBC控制MBE,为其选择最短路径,提供均衡负载等。它们之间的通信时基于ITU-TH. 248协议。H.248协议与SIP协议的映射关系见表1:
表1 H.248协议与SIP协议的映射关系
呼叫状态 协议 | 注册 | 发起呼叫 | 呼叫处理 中 | 给主叫放回铃音 | 被叫摘机 | 主被叫挂机 |
H.248 | SVC_CHG | Add | Pending Response | Modify
| Notify Modify | Subtract |
SIP | REGISTER | INVITE | 100 | 180 | 200 | BYE |
基本原理为内部私网用户将呼叫控制信令传送到信令边缘控制单元SBE,并由其对此控制信令进行解析,将内部私网终端的信息和SDP中的私有IP地址、端口信息存放起来。接下来就是修改SIP协议的头部信息及SDP信息,将SIP协议头部信息中的内部私网IP地址和端口修改为SBE对外的公网IP地址和端口,也将SDP中的内部私网IP地址和端口修改为MBE对外的公网地址和端口。然后将呼叫控制消息发送到对端,对端接收到呼叫控制消息后会回送响应消息。当SBE接收响应消息后会对对端的IP地址和端口进行处理,将其修改成MBE对内的IP地址和端口,最后再发给内部私网用户。SIP信令消息、媒体流就可以通过SBC在内外网用户间进行中继,从而完成NAT的穿越。
2.2 NAT穿越流程
2.2.1 用户注册
私网外呼和公网内呼的NAT穿越,都需要进行私网用户在SBE的注册。注册的过程是由REGISTER消息和200OK响应来实现的,流程如下:
私网用户将SIP应用程序或设备进行网络注册,配置为信令边缘控制单元,并向SBE发送REGISTER注册请求。SBE收到注册请求REGISTER后,进行用户鉴权。如果为合法用户就将其信息记录下来,包括用户名(本文中以Jack为例,下同)、私网用户地址(10.0.0.10)和端口号(5060),以及NAT转换的地址(172.16.10.5)和端口号(10324)。
接下来就是修改SIP的头部信息,将Request-URI中的SBE地址用注册服务器地址代替。Request-URI为该消息的处理者,还要将SIP请求的头部信息Via及Contact中的私有IP地址用SBE对外的公网IP地址替换,当然REGISTER注册请求中相关的信息也应该保持相同,包括branch的参数、Tag的参数、Call-ID、Cseq号码。最后是修改Expires,此头域表示的是注册信息保持有效时间,修改时要保证NAT绑定的有效性。
完成以上步骤,便可通过SBE将注册信息发送给注册服务器。如注册成功,SIP注册服务器就会返回“200OK”响应消息。如注册不成功,则会返回“401Unauthorized”响应要求SBE进行认证,再从SBE发送第二个REGISTER注册请求。完成注册后,SIP注册服务器也会返回“200OK”响应消息给SBE。SBE则会对照用户信息修改后发送给私网用户。10.0.0.10:5070172.16.10.5:10324192.168.10.10:5070这个过程中SBE建立的一条信令消息映射。
2.2.2 私网外呼的NAT穿越
私网外呼的NAT穿越顾名思义就是内部私网用户呼叫外部公网用户的穿越NAT。下面根据私网外呼的NAT穿越流程图1来描述穿越过程。
图1 私网呼叫的NAT穿越流程

私网外呼NAT穿越的开始是由内部私网用户Jack发送一个INVITE消息给SBE,INVITE消息中含有主叫方请求会话及媒体类型及参数。SBE有访问控制功能,先对其身份进行检验,如为合法用户就向MBE发送Add消息,SBE和MBE之前是用H.248进行通信的;MBE接收到SBE发来的Add消息后,为Jack分配一个实时传输端口(RTP端口),MBE开始监听并返回事务应答消息(Reply)给SBE。在事务应答消息Reply中含有MBE提供的本地实时传输IP地址和端口,SBE的工作就是将其提取并替换INVITE消息中会话描述部分的实时传输IP地址和端口,SIP协议的头部信息Via及Contact中的私有IP地址用SBE对外的公网IP地址替换。最后,SBE将INVITE消息发送给SIPproxy:California.com和Ttelcom.com,最终到达公网用户TOM处。
公网用户TOM接收到INVITE请求消息后,向SBE回送“200OK”信息。SBE根据SIP的头部信息判断应答消息的类型,然后向MBE发送Modify消息;MBE接收后为公网用户TOM分配一个RTP端口,MBE启动监听并返回事务应答消息(Reply)给SBE。SBE将MBE分配的RTP地址和端口提取,并替换TOM向SBE响应消息中会话描述部分的IP地址和端口,这时SIP协议的头部信息应该方向修改,达到消息一致的目的。最后将修改后的“200OK”响应消息回送给私网用户Jack。这样私网用户Jack就能通过MBE与公网用户TOM进行通信了。
通话结束时,可以由任何一方进行挂机,如图中例子,由私网用户挂机,即主叫方向SBE发送BYE请求。SBE接收到BYE请求后,向MBE发送一个Subtract请求(Subtract为BYE的映射)。MBE接收到Subtract请求后,回收分配的实时传输RTP端口号,并清除RTR转发流程,完成后回送Reply响应。SBE接收到Reply响应后,将BYE信息中的SIP头部信息进行修改后,发给公网用户TOM,公网用户TOM回送“200OK”响应,这样会话便结束了。
2.2.3 公网内呼的NAT穿越
公网内呼的NAT穿越顾名思义就是外部公网用户呼叫外部私网用户的穿越NAT。下面根据公网内呼的NAT穿越流程图2来描述穿越过程。
图2 公网内呼的NAT穿越流程

私网外呼NAT穿越的开始是由公网用户TOM向本身的SIPProxy(公网SIP代理服务器为192.168.10.79)发送INVITE请求消息。INVITE中的RequestURI就是私网用户Jack在SIPProxy上注册的SIPURI。私网SIPProxy在流程图中为192.168.10.78,SIPURI为Jack@california.com。公网代理服务器接收到INVITE请求消息后,转发至私网用户的SIPProxy中。私网用户的SIPProxy上私网用户注册的地址信息为192.168.10.10,也就是SBE对外的IP地址。私网用户的SIPProxy将INVITE请求消息转发给SBE。SBE先对其身份进行检验,如合法用户就向MBE发送Add消息。MBE接收到SBE发来的Add消息后,开始监听并返回事务应答消息(Reply)给SBE。SBE先确定被叫方用户名,得知该私网用户后,查找它的NAT转换IP地址及端口。根据查找到的IP地址及端口,通过NAT将INVITE请求消息发送给私网用户。
私网用户接收到INVITE请求消息后,返回“200OK”给SBE。SBE根据SIP的头部信息判断应答消息的类型,然后向MBE发送Modify消息;MBE接收后为私网用户Jack分配一个RTP端口,MBE启动监听并返回事务应答消息(Reply)给SBE,进行SIP头部信息修改后,SBE就将“200OK”响应消息回送给公网用户TOM。这样公网用户就能与私网用户进行通信了。
通话结束时,例如,流程图中为公网用户先挂机,公网用户会向SBE发送BYE请求。SBE接收到BYE请求后,向MBE发送一个Subtract请求。MBE接收到Subtract请求后,回收分配的实时传输RTP端口号,并清除RTR转发流程,完成后回送Reply响应。SBE接收到Reply响应后,将BYE信息中的SIP头部信息进行修改后,发给私网用户Jack,私网用户Jack返回“200OK”响应,这样会话便结束了。公网内呼NAT的穿越的SIP消息修改和工作流程与私网外呼NAT的穿越基本一致。
3 结语
本文提出了一个基于SBC的SIP协议穿越NAT的解决方案,此方案最大的优点就在于:不用对现有的NAT设备进行升级改动,也不需要内部网络主机、NAT和防火墙支持其他的应用协议;网络环境更是无任何要求,只需在内部网络中进行简单设置即可完成穿越。
基于SIP协议穿越NAT的方案,在未来发展中还有很多需要改进的地方,包括安全性和可靠性等方面。在安全性方面,如何在SIP穿越NAT中加入安全措施是未来发展最需要完成的工作;在可靠性方面,对自定义协议的支持是未来的发展方向。
参考文献
[1]Jonathan Davidson,James Peters,Manoj Bhatia,et al.VOIP技术框架[M]..高艳,译.北京:人民邮电出版社,2012.
[2]DianeTeare.CCNPROUTE学习指南[M].袁国忠,译.北京:人民邮电出版社,2011.
[3]Jeff Doyle,Jennifer Carroll.TCP/IP路由技术:第一卷[M].葛建立,吴剑章,译.北京:人民邮电出版社,2007.
[4]Kevin WallaceCisco.VOIP学习指南[M].刘丹宁,卢铭,译.北京:人民邮电出版社,2010.
[5]梅小山.基于SIP的NAT穿越方案的研究和实现[D].西安:长安大学,2009.