【转载】SIP穿越NAT的rport机制(Via中的rport 和 received 参数)

【转载】SIP穿越NAT的rport机制
2014年03月04日 15:07:00 irwin_chen 阅读数:8948

调试asterisk时发现从公网发来的INVITE的响应都不能正常返回到客户端,抓包发现响应都发到via头域中写明的那个port上去了,而实际asterisk是从NAT转换后的地址和端口接收的INVITE请求。最终发现需要在via中加入rport字段,使得asterisk使用rport机制路由响应。

具体的RFC文档参见RFC3581。

RPORT机制:
客户端需要在top most via上带上rport参数
服务端发现via中有rport参数时,将此via中加入received参数和rport参数,参数带的值分别是服务端看到的消息来源地址和端口(如果有NAT等地址转换设备,则即为转换后的IP和port)。
当有需要发送的响应时,按照rport中的端口发送SIP 响应。也就是说IP和端口均完全遵照从哪里来的,发回哪里去的原则。(如果没有rport字段时,服务端的策略是IP使用UDP包中的地址,即从哪里来回哪里去,但是端口使用的via中的端口)

RFC文档中的例子:

客户端发送INVITE形如:

INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP 10.1.1.1:4540;rport;branch=z9hG4bKkjshdyff

服务端收到后根据自己所得到的源地址和端口,重写via,如有必要添加自己的via转发

INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff

当需要给此请求发送响应时,发往received,rport两个参数记录的IP和PORT。NAT设备再把发往转换后地址192.0.2.1的包发往10.1.1.1地址。

SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值