VOIP NAT穿越之SIP信令穿越

5 篇文章 0 订阅

本文原创自 http://blog.csdn.net/voipmaker  转载注明出处。

本文是VOIP通信NAT系列专题的第三篇,

本文论述NAT对SIP协议穿越的影响,SIP协议是基于文本的,而他的一些地址是保存在消息头传输,NAT设备在没开启ALG情况下不会修改消息头地址,

多数客户端填写的地址都是内网地址,这就导致消息路由问题,SIP 信令穿越涉及两部分,一个是注册,另一个是INVITE(呼叫),涉及的消息头为contact头和via头,

contact头是告知对方自己直接可达的地址,via头告知对方,此消息是从哪个地址,哪个端口送过来,接收端响应时根据via地址做响应,先说register, 客户端注册时

会把自己的地址端口填写到contact头,但这个地址在nat环境下并不管用,注册的作用是告知服务器自己的可达地址,后面有呼叫送给他时服务器直接送到这个地址即可,

而客户端填写的私有地址在nat环境下并不可达,服务器后续呼叫直接送这个地址是失败的,解决这个问题需要客户端支持 sip outbound, 其原理是服务器发现如果客户端是在nat环境下,则记录接收到register请求的地址和端口,而不是contact地址和端口。 这个地址和端口通常是NAT设备给客户端映射的外部端口,而NAT设备维护这个映射是 有时间限制的,为确保这个映射一直开启就需要客户端周期性发keep-alive包,包的类型有多种,有的直接周期发register,有的发options, rfc5626规范要求TCP用回车换行发送,UDP则用stun 的bind request 保持NAT 映射处于活跃状态。 这就解决了呼叫客户端问题, SIP穿越的另一个问题是响应发送给谁,前面提到,响应者会根据via头做 response,但via头通常是内网地址,NAT环境下是不可达的,RFC 3581解决了这个问题,通过在via头中增加 rport和received字段支持此扩展,rport在发起请求者的包中是空的,接收到收到后发现有这两个头,接收端会检测实际收到的包的地址和端口,把这两个值填写到recived和rport中,告知请求发起者,同时在响应请求时把响应向这个地址和端口发送,通常这个地址和端口是NAT设备映射的地址和端口。

至此SIP信令穿越问题完美解决。

下一篇文章讲述VOIP NAT穿越 之媒体穿越。


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值