posts - 297,  comments - 1618,  trackbacks - 0
 

RFC3581——SIP中的rport机制

记录人:阿蜜果

日期:2010-5-28

1.    介绍

RFC3581的下载地址:http://www.ietf.org/rfc/rfc3581.txt

该协议比较简短,主要用于描述rportresponse-port)机制。

1.1 NAT分类

NAT:网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

NAT常用的分类如下:

Full Cone NAT(完全圆锥型)

Address Restricted Cone NAT(地址限制圆锥型 )

Port Restricted Cone NAT(端口限制圆锥型)

Symmetric NAT(对称型)

1.1.1 完全圆锥型NAT

在完全圆锥型NATFull Cone NAT)中,NAT会将客户机地址{X:y}转换成公网地址{A:b}并绑定。任何包都可以通过地址{A:b}送到客户主机的{X:y}地址上。如图所示:
  

1.1.2 地址限制圆锥型NAT

地址限制圆锥型NATAddress Restricted Cone NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P}的包才能和主机{X:y}通信。如下图所示:
   

1.1.3 端口限制圆锥型NAT

端口限制圆锥型NAT(Port Restricted Cone NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P,q}的包才能和主机{X:y}通信。如下图所示:
   

1.1.4 对称型NAT

对称型NATSymmetric NAT)会将客户机地址{X:y}转换成公网地址{A:b}并绑定为{X:y}|{A:b}<->{P:q}。对称型NAT只接受来自{P:q}incoming packet,将它转给{X:y} ,每次客户机请求一个不同的公网地址和端口,NAT会新分配一个端口号{C,d} 。如下图所示:
    

1.2问题描述

1.2.1 SIP Proxy无法穿过NAT回送SIP信令

因为SIP信令中的FromContact头域记录的是私网地址和端口,NAT无法识别和转换。如图所示:
  

1.2.2 使用UDP Hole Punching的问题

       

这个内网的NAT上打了一个方向为211.136.91.58,(这就是称为UDP Hole Punching的技术)以后211.136.91.58就可以通过这个洞与内网的192.168.1.223联系了,但是其他的IP不能利用这个洞。

在没有活动的时候,这个Hole会过期:

NAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系。

SIP代理无法穿越

SIPUDPTCP上操作。当在UDP中使用的时候,对请求的响应被发送给请求所来自的地址,端口字段带在请求的Via头字段中。一半以上的信息(例如:IP地址)带在 IP包头中,还有一半的信息(例如:端口信息)带在SIP消息头中。SIP这样做的原因是为了监听所有的信息,包括请求消息和响应消息。

但是这种方式在客户端在 NAT中的情况不适用,在NAT的环境中,回应可能发送不过去,因为与在请求中找到的地址不一样,而且此前也没有方法让客户端来得到源端口信息。

2.    NAT的常用解决方案

解决NAT穿越有很多中解决方案,常用的有:

2.1 ALGApplication Level Gateway

可以识别SIP信令,能够适当地修改数据包。ALG可以是单独的连接于外网和内网之间的设备,也可以是内置于防火墙内的插件。

FW/NAT发现外网呼叫信令为SIP时,将其转发到ALG(应用层网关),通过ALG建立起内网伪地址终端与外网终端的通信连接。

使用ALG需要对现有设备升级改造。例如思科的路由器都支持配置ALG

2.2 MidComIETF MIDCOM(Middlebox Communications

允许第三方(MIDCOM Agent )成为受FW/NAT信任的实体,然后代表FW/NAT做出决定,强迫其开放端口传送媒体流或数据流。这些受信任的实体通过“MidCom”定义的新协议与FW/NAT进行通信。

协议的识别不由Middlebox完成,而是由外部的MIDCOM Agent完成。

使用MidCom需要对现有设备升级改造。

2.3 STUN(Simple Traversalof UDP Through Network)

 
      IETF RFC 3489
定义了如何确定由NAT分配的公网地址和端口,不需要改造现有NAT

主要特色

能够让客户端发现NAT的存在以及类型;

能够让客户端发现NAT的绑定生命周期;

可以工作在多NAT串联环境下;

非常简单的协议,易于实现,负载低;

STUN服务器可以位于公网任何地方。

适用范围

不适用于Symmetric NAT

对于Non- Symmetric NAT都适用;

如果双方都位于同一个NAT之后,就不适用。

2.4 SBC(Session Border Controller)

             
   
Signaling Solution

Ø SBC可以帮助SIP信令穿越已经存在的FW/NAT,而不需要对现有的FW/NAT设备做任何改变;

Ø 对于SIP终端,SIP终端设备会周期性发送注册消息到SBC

Media Traversal Solution

SBC可以把相应的媒体流发送到防火墙上的相关IP地址和端口,然后正确地使媒体流到达防火墙后的用户侧。

3     rport机制讲解

3.1 方案描述

获得IP地址是在Via头中带上received参数。为了得到端口信息,也参考了这种方式,即在Via头中带上rport属性来指明端口信息。

当在客户端和服务器之间是NAT的时候,请求可能会在NAT中创建(或刷新)一个绑定,为了让客户端收到响应信息,在事务处理的过程中这个绑定必须保持存在。大多数的NAT绑定有超过1分钟的超时时间,这超过了non-INVITE事务的持续时间,因而对non-INVITE事务的请求的响应只能在绑定存在的时候存在。INVITE事务倒是不存在这个问题。

为了保持这个绑定,客户端应该在每隔20s左右重发INVITE请求,这种重发机制需要发生在收到一个临时的响应后。

当然刚才所说的大概1分钟的超时时间也不是确定的,有时候会比这长,此时重发机制可以发慢一点,否则,可以发快一点。这些问题可参考RFC3489

如果是支持rport机制的服务器,它需要在接收到的请求中检查Via头是否包含一个没有值的rport参数。如果有,它需要在回应中带上rport的值,这与received的处理类似。

为了穿越对称性的对称性的NAT,响应需要发送到相同的IP地址和端口。当服务器在多端口或接口的请求上监听请求时,它必须记住请求是从何处发的。对一个稳定的Proxy,在一个传输的持续时间中,记住这些东西是没有问题的。但是对于不稳定的Proxy,它不存储请求和响应中的状态信息,为了达到本规范的要求,它需要将地址和端口信息加密到Via头字段中,在响应信息到达的时候,它能提取加密的信息并将它放到响应中。

rport机制需要终端支持该种机制,因此应用情况比较受限。但是在笔者的应用场景(呼叫中心)中,主要要解决的问题是坐席能在NAT环境中穿越,给服务器发送信息。因为坐席所使用的SIP软电话是本公司开发的,所以可以保证是支持rportreceived的。

3.2 实例

下面举一个发送REGISTER信息的实例,在请求信息的Via头中包含了没有值的rport参数,如下所示:

REGISTER sip:124.40.120.188:5060 SIP/2.0
Via: SIP/
2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport
Max
-Forwards: 70
Contact: <
sip:19988888888@192.168.2.65:12344;rinstance=7cd1c532e92fdb0e>;expires=0
To: "
19988888888"<sip:19988888888@124.40.120.188:5060>
From: "
19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call
-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
1 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User
-Agent: eyeBeam release 1105a stamp 56793
Content-
Length: 0

    发送到的服务器支持rport机制,它看到请求中的rport后,将通过分析UDP包信息得到的的NAT的公网地址(124.42.4.203)和端口信息(15500)分别作为receivedrport属性带给客户端:

SIP/2.0 200 OK
Via: SIP
/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport=15500;received=124.42.4.203
From: 
"19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
To: 
"19988888888"<sip:19988888888@124.40.120.188:5060>;tag=0005-058-7d6dc90516ae2e21
Call
-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
4 REGISTER
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
Contact: 
<sip:124.40.120.188:5060>
Content
-Length: 0

   客户端在得到响应信息后,知道了所使用的公网地址和端口,在而后定期重发的REGISTER信息中,Contact变换成124.42.4.203: 15500,例如新发的REGISTER信息变为:

REGISTER sip:124.40.120.188:5060 SIP/2.0
Via: SIP
/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport
Max
-Forwards: 70
Contact: 
<sip:19988888888@124.42.4.20315500;rinstance=7cd1c532e92fdb0e>;expires=0
To: 
"19988888888"<sip:19988888888@124.40.120.188:5060>
From: 
"19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call
-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
2 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User
-Agent: eyeBeam release 1105a stamp 56793
Content
-Length: 0

 4.    参考文档

神州泰岳应用开发事业部郑昀《SIP穿越NAT
   
RFC3581http://www.ietf.org/rfc/rfc3581.txt

posted on 2010-05-28 23:37 阿蜜果 阅读(6361) 评论(1)  编辑  收藏 所属分类: 协议电信知识


FeedBack:
# re: 【电信知识】RFC3581——SIP中的rport机制
2011-12-18 18:20 | Yaping Cao
每次用到什么知识或者理论在网上一搜就搜到你的博客啦,哈哈,受教了,也多谢博主,哈哈,天天开心~  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(255)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2164950
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜