科学技术与工程
Science科学Technology技术and与Engineering工程
Vol.6c
No.11Jun.2006
1671-1815(2006)11-1556-052006Sci.Tech.Engng.6卷
针对SIP的STUN解决方案的设计与实现
郭常清
(湖南大学软件学院,长沙410082)
摘要从SIP消息的特SIP是一个基于文本的应用层协议,但SIP协议本身无法实现让SIP消息安全地穿过NAT和防火墙。
点出发,提出一种无需扩展SIP协议的应用层解决方案,引入STUN协议,取得IP地址和端口的映射关系,修改SIP和SDP消息的内容来保证通信连接,从而实现对NAT的穿越。关键词
VoIP协议(SIP)网络地址翻译器STUN
中图法分类号TP393;文献标识码A
目前,VoIP技术在世界范围内已获得广泛应用,而基于SIP[1](SessionInitiationProtocol[RFC2543],会话初始化协议)的软交换技术已成为VoIP技术研究的一个新的热点。
行了详述。
1SIP技术简介
——服务SIP协议采用基于文本格式的客户端—器方式,以文本形式表示消息的语法、语义和编码,客户机发起请求,服务器进行响应。SIP独立于底层协议———TCP、UDP或SCTP,采用自己的应用层可靠机制来保证消息的可靠传递。SIP消息中使用的SDP(SessionDescriptionProtocol[RFC2327],会话描述协议)用于SIP端点之间媒体通道建立所需参数的描述。
一个基本的SIP呼叫一般包括以下几个头域:
SIP[1]是IETF提出的在IP网络上进行多媒体
通信的应用层控制协议。可用于建立、修改、终结多媒体会话和呼叫。其特点是简单、便于扩展和扩充,且SIP借鉴了许多已有的Internet协议,是实现增值综合业务的理想手段,具有很好的发展潜力。
由于我国广泛使用的宽带城域网、企业网中普遍采用NAT[2](NetworkAddressTranslator[RFC1631],网络地址翻译器),SIP是一个基于文本的应用层协议,建立会话所需的地址信息描述均存在于SIP消息中。而包含丰富地址信息的SIP消息处于应用层,
Call-ID、Request-URI、Via、From、To、Cseq、Content-
这几个头域中携带Length、Content-Type和Contact。
了会话过程的基本地址信息,通过它们即可完成一个较完整的SIP呼叫。文中将详述对这几个头域的改写。RFC2543中对SIP请求(Request)定义了
NAT只对TCP/UDP和IP包头中的地址和端口进行
翻译,从而造成载荷内的地址和端口与IP包头的源地址和源端口不一致,会导致NAT外和NAT内的用户之间无法从SIP消息中得到有效的地址信息,
无法完成正常的会话建立过程。
为解决以上问题,文中采用STUN[3](Simple
INVITE、ACK、OPTIONS、BYE、CANCEL和REGISTER等6个方法。通过INVITE、ACK、BYE和REGISTER等几个方法即可完成一个相对完整的SIP呼叫过
程。同样,RFC2543对SIP响应(Response)定义了相关的回答,与基本连接直接相关的有100(Trying)、
TraversalofUDPThroughNAT[RFC3489])实现对NAT的
穿越,将STUN取得的(IP:端口)映射直接写入SIP
消息来建立正确的连接。系统采用Microsoft主推的
180(Ringing)、200(OK)和404(Notfound)等,文中
将对以上信息进行分析。
RTCClientAPI进行开发,以满足SIP软交换系统
的全球统一标准,在文中对解决方案和实现方法进
2006年1月6日收到
2STUN穿越原理及系统实现方案
2.1
开发环境简介
系统所采用的开发环境如图1所示。
11期郭常清:针对SIP的STUN解决方案的设计与实现1557
因此,除了消息本身,SIP所控制的媒体流的传输也无法完成。
2.3STUN所定义的NAT类型分类
STUN协议用来帮助位于NAT之后的实体发
现NAT的存在,判断NAT的类型,从而得到由NAT分配的绑定映射地址。STUN无需对NAT进行改变,适用于处理在应用程序实体与公网间有多重
NAT的情况。
在实际应用中,UDP在不同类型的NAT中处
图1硬件拓扑图
理是不一样的。根据NAT工作方式的不同,STUN协议将NAT分为四类。
PC#1的IP配置为192.18.7.128,在此机器上运
行STUNClient;在PC#2上安装两块网卡,IP分别
配置成192.18.7.1和172.18.7.124,PC#2充当NAT由PC#3充Server,由PC#1和PC#2共同组成私网。
当STUNServer,安装两块网卡,IP分别配置为172.18.7.10和172.18.7.11,鉴于STUN协议要求使用四个(IP:端口)对来完成对NAT类型的判断,使用端口3478、3479,即可得到(172.18.7.10:3478)(172.18.7.10:3479)(172.18.7.11:3478)(172.18.7.11:
FullconeNAT:是指所有来自相同内部IP地址
和端口的请求都映射到某一个相同的外部IP地址
和端口上。此外,任意的外部主机可以通过发送信息包到内部主机对应的外部IP地址上来发送信息包(在PC#2上安装软件WinRouteLite4.2,可模拟出此环境)。
RestrictedconeNAT:是指所有来自相同内部IP地址和端口的请求都映射到某一个相同的外部
与FullconeNAT不同的是,一个IP地址和端口上。
外部主机只能在内部主机曾经发送过信息包给它的情况下,才能够发送信息包到该内部主机(IP必须一致,成功,
端口号可以不一样,10.0.0.1:6666->
3479)等四个(IP:端口)对,PC#4充当公网用户,IP
配置为172.18.7.125。分别在PC#1和PC#4上运行
所开发的RTCClient进行通话。
2.2NAT所带来的问题
NAT顾名思义就是实现了网络地址的翻译,目
前广泛应用于私有地址域与公有地址域的转换以缓解IPv4地址匮乏的问题。由于NAT的存在,那些使用到IP地址的高层应用将受到限制,如图1所示,以PC#1和PC#4之间建立SIP连接的情况为例,当NAT内的PC#1向公网上的PC#4发送
172.18.7.10:3478,172.18.7.10:3478->10.0.0.1:6666172.18.7.10:3479->10.0.0.1:6666也成功)
(在PC#2上安装软件WinGateV5.0.2,可模拟出此
环境)。
PortrestrictedconeNAT:类似于restrictedcone
也就是说,只有在内NAT,但是限制的还包括端口。
部主机(通过IP地址和端口号)给外部主机发送过信息包的情况下,该外部主机才可以发送信息包给该内部主机,并需要明确地表明原来接收内部主机信息时的IP地址和端口号(Restrictedcone
INVITE请求时,请求的头为:
INVITE:PC#1@172.18.7.125SIP/2.0
Via:SIP/2.0/UDP192.18.7.128
……(略)
INVITE消息的源IP地址经过NAT后,被翻译为
然而在SIP协议中,PC#4不会172.18.7.124:45040。
按此地址返回100(Trying)响应,而是按Via中的由于这是个私有地址,发192.18.7.128:29362返回。
回的响应无法送到PC#1中,连接无法建立。
同样地,对于SIP所控制的媒体流的传输,有关地址和参数信息保存在SIP消息的SDP消息体中。
NAT不需要相同的端口号,10.0.0.1:6666->172.18.7.10:3478,172.18.7.10:3478->10.0.0.1:6666成功,172.18.7.10:3479->10.0.0.1:6666不成功)(在PC#2上安装软件Sygate4.0,可模拟出此环境)。
SymmetricNAT:指的是所有来自相同内部IP
地址和端口到同一目的地的请求都映射到某一个相同的外部IP地址和端口上。假如相同的主机使用相同的源IP地址和端口号发送信息包到另一目的
1558科学技术与工程6卷
地,那么将会映射到另一外部地址上。而且,只有当外部主机接收到内部主机的信息包后才能发送信息包回给该内部主机(10.0.0.1:6666->172.18.7.10:
REQUEST属性只存在于绑定请求中。这两个属性
分别用于判定客户端是处于RestrictedconeNAT或
是PortrestrictedconeNAT后面。它们指示服务器使用另外的IP地址和端口号来发送绑定响应。这个属性是可选项。
(4)CHANGED-ADDRESS,它位于绑定响应当中,假如客户端需要和“改变IP”“改变端口号”,它通知客户端改变后所用的源IP地址和端口号。
(5)SOURCE-ADDRESS,它只位于绑定响应当中,它表明响应是由什么地方所发送的,源IP和端口号是什么。在探测二次NAT配置中非常有效。
由以上所述可以得出,在实际的网络环境中,共有6种可能的情况:
(1)在公众internet上,(2)在拦截UDP的防火墙内,
(3)可以允许UDP出去,而响应必须回到请求的主机上(很像symmetricNAT,但是没有地址翻译,叫这种为symmetricUDPFirewall),
(4)Full-coneNAT,(5)SymmetricNAT,
(6)RestrictedconeorPortrestrictedconeNAT。正确识别NAT类型是实现穿越的关键,该过程的原理如图2所示。
现结合硬件拓扑图1和判别原理图2解释判
3478,外部地址为115.68.45.123,10.0.0.1:6666->172.18.7.11:3479,采用的外部地址为115.68.45.134)
(STUN无法穿越此类NAT)。
2.4
STUN技术绑定原理简介
STUNClient:客户端是一个发送STUN请求的实体。STUN客户端可以运行在终端系统上(end
system),譬如PC机,或者是网络中的一个元素,譬
如一个会议服务器。
STUNServer:服务器是接收STUN请求,发送STUN响应的实体。一般来说,STUN服务器都附属
在公用因特网上。
STUN协议是一种简单的C/S协议。客户端发
送请求到服务器,然后服务器给予响应。请求有两种,一种是绑定请求,通过UDP发送;另一种是共享秘密请求,通过TLSoverTCP传送。STUN绑定请求被用于发现NAT的存在,并且发现NAT所产生的对应公共IP地址和端口号。绑定请求通过UDP协议发送到服务器上,当绑定请求到达服务器后,说因此,服务不定已经通过了一层或多层的NAT了。
器所收到的请求的源地址肯定就是由最靠近服务器的NAT所提供的对应地址,STUN服务器复制源地址和端口号到绑定响应中去,并且按照源地址和端口号发回响应。经过多层的NAT后,响应还是会回到客户端上的。
技巧在于利用STUN协议来发现NAT的存在,判断出类型,并得到和利用它们所分配的绑定。
几个主要的STUN属性定义如下。
(1)MAPPED-ADDRESS(IP地址和端口号),它总是位于绑定响应中,代表了服务器所收到的绑定请求中的源IP地址和端口号。如有NAT存在,该(IP:端口)就是内部(IP:端口)所对应的外部映射。
(2)RESPONSE-ADDRESS(IP地址和端口号),它在绑定请求中,代表需要送到的IP地址和端口号。(不一定需要有,没有的话,服务器会回送到请求的源地址和端口)。
(3)CHANGE-REQUEST,它包括两个标志负责来控制发送响应的IP地址和端口号。这两个标志分别是“改变IP”和“改变端口号”。CHANGE-
图2类型判别原理图
11期郭常清:针对SIP的STUN解决方案的设计与实现1559
断过程。
该流程使用三个测试。在测试I上,客户端发送
果,如图3所示。
STUN绑定请求到服务器上(没有设定CHANGE-REQUEST属性的标记,也没有RESPONSE-
这导致服务器发送响应到发出请ADDRESS属性)。
求的IP和端口号。在测试II中,客户端发送绑定请求(带有CHANGE-REQUEST属性中的和“改变IP”的标记)。在测试III中,客户端会发“改变端口号”
送仅带有标记的绑定请求。“改变端口号”
客户端(192.18.7.128:29362)先开始测试I,在
STUNServer上使用(172.18.7.10:3478),假如该测
试没有产生任何响应,那么客户端就会知道不能使用UDP连接。假如产生了响应,客户端就需要检测
MAPPED-ADDRESS属性。假如得到的地址和端口
号和发送信息包的IP地址和端口号一致的话,就证明并没有经过NAT转换。然后进行测试II。
此时STUNServer发送响应时使用(172.18.7.11:3479),假如收到一个响应,那么客户
端就会知道它拥有与internet开放的接口(至少,它位于一个功能类似full-coneNAT的防火墙后面,但是缺乏了地址翻译功能)。假如收不到响应,那么客户端就会知道它位于symmetricUDPfirewall的后面。
那么当IP地址和端口号并不符合通过测试I所得到响应的MAPPED-ADDRESS属性,那就证明它必定位于NAT背后。然后进行测试II(此时STUN
图3映射绑定关系图
由图3可知,得到五对绑定的映射地址,例如:内部(IP:端口)为(192.18.7.128:29362),外部为(172.18.7.124:45040),应在后台持续运行此程序,使
STUNClient不断向STUNServer发送请求,保证映射
地址的实时更新,才能保证会话连接的长时间有效。
2.5使用所取映射改写SIP消息
1)对Via头域的改写
Via纪录请求所通过的路径。
原为Via:SIP/2.0/UDP192.18.7.128:29362,改为Via:SIP/2.0/UDP172.18.7.124:45040。由内网用户发出的INVITE、ACK、BYE和
Server上发回响应的是(172.18.7.11:3479)),假如
收到响应的话,客户端就会知道它处于full-cone假如没有收到响应,再进行测试I,但是NAT后面。
这次,将使用从响应中CHANGED-ADDRESS属性所得到的IP和端口号来进行测试I,即使用(172.18.7.11:3479)。假如返回的MAPPED-
REGISTER等4个请求消息和100(Trying)、180(Ringing)、200(OK)等3个回答中的Via头域均应
进行以上修改。
2)对SDP消息体的修改
SDP消息体中描述了与会话及相关媒体特性的
有关内容。与连接直接相关的头域为:
“Connectionc=”,描述主机的IP地址。“Mediam=”接收端口以及接收媒体流的类型信息。
原为c=INIP192.18.7.128,
ADDRESS属性中的IP和端口号与第一次测试I所
得到的不一样,就证明它处于symmetricNAT后面。
假如地址和端口号相同的话,就证明客户端处于
RestrictedNAT或PortrestrictedNAT后面。为了确定究竟是处于哪个后面,将要进行测试III。即让
假如得到STUNServer上使用(172.18.7.11:3478)。
一个响应,就是处于RestrictedNAT后面,反之,就是PortrestrictedNAT。
类型判断结束后,将返回映射端口的绑定结
m=audio29362RTP/AVP0,
改为c=INIP172.18.7.124,
m=audio45040RTP/AVP0。
由公网用户返回的200(OK)中的SDP消息体中的
相应部分应进行同样的修改.
1560科学技术与工程6卷
3)对Contact头域的修改
Contact头域通常标明能到达用户的下一个
重定向等操作密切相关。URL,与注册、
原为Contact:〈sip:pc#1@192.18.7.128:29362〉改为Contact:〈sip:pc#1@172.18.7.124:45040〉对REGISTER中的Contact头域,应进行同样的修改。
协议,完全可以在网络层实现对有效数据的定位,从而完成对文本数据的解析和修改。同时,采用在底层对SIP消息进行改写的方法,避免了将消息先送往应用层,然后再返回底层完成发送,可以提高效率。
参
123
考文献
4)对Content-Length头域进行修改。
由于SIP消息被改写,将导致消息体长度发生改变,应对相关的INVITE及200(OK)等消息的
HandleyM,SchulzrinneH,SchoolerE,RosenbergJSIP:Sessioninitiationprotocol.RFC2543,March1999
EgevangK,FrancisP.TheIPnetworkaddresstranslator.(NAT).RFC1631,May1994RosenbergJ,
WeinbergerJ,
MahyR.STUN:Simpletraversalof
userdatagramprotocol(UDP)throughnetworkaddresstranslators(NATs).RFC3489,March2003
Content-Length进行改写。
3结论
本文提出的解决方案实现于应用层,无需对协
45
SrisureshP,KuthanJ,RosenbergJ.Middleboxcommunication
议进行扩展。可以直接利用现有的SIP协议栈等资源。最根本的依据是SIP本身是一个纯文本形式的
architectureandframework.IETF,Feb2001
RosenbergJ,WeinbergerJ,SchulzrinneH.SIPExtensionforNATTraveral.IETF,Nov212001
ImplementationtheTraversingofNATinSIP-basedVoIPSystem
GUOChangqing
(DepartmentofSoftware,HunanUniversity,Changsha410082)
[Abstract]SIPisatext-basedapplication-layerprotocol.Itcan'tbeusedinNATorfirewallenvironment.
AccordingtothespecialtiesofentitiesofSIPmessages,anapplicationlayersolutionwithoutexpandingSIP,by
achievingthemappedrelationofIPaddressandPortswithSTUNandoverwritingtheSIPmessagesandSDPmessagestoassurethecommunicationconnectionarepresented.InthiswaythesystemcanimplementthetraversingoftheNAT.[Keywords]VoIP
sessioninitiationprotocol
networkaddresstranslator
STUN
因篇幅问题不能全部显示,请点此查看更多更全内容