VOIP NAT穿越之SIP信令穿越
来源:互联网 发布:拼多多比淘宝好做吗 编辑:程序博客网 时间:2024/04/30 15:38
本文原创自 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穿越 之媒体穿越。
- VOIP NAT穿越之SIP信令穿越
- VOIP NAT穿越之SIP信令穿越
- [SIP]SIP之穿越NAT
- [SIP]SIP之穿越NAT
- [SIP]SIP之穿越NAT
- SIP穿越NAT SIP穿越防火墙-SBC
- SIP穿越NAT SIP穿越防火墙
- SIP穿越NAT SIP穿越防火墙
- NAT助VoIP穿越防火墙
- SIP穿越NAT&FireWall解决方案
- SIP穿越NAT&FireWall解决方案
- SIP穿越NAT&FireWall解决方案
- SIP穿越NAT&FireWall解决方案
- VOIP 通信 NAT穿越系列专题之NAT基本原理介绍及与VOIP关系
- NAT穿越之STUN
- VoIP穿越NAT和防火墙的方法
- VoIP穿越NAT和防火墙的方法
- VoIP穿越NAT和防火墙的方法
- Struts2中java.lang.OutOfMemoryError: PermGen space的解决办法
- XML现在已经成为一种通用
- C# 访问与设置Windows环境变量
- versions 破解
- view plainprint?
- VOIP NAT穿越之SIP信令穿越
- .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法
- using System;
- android apk 从签名到发布
- 出现HP Loadrunner Virtual User Generator 已停止工作,原因可能是设置了工具 > 常规选项-->显示选项卡, 选择回放期间显示运行时查看器和自动排列窗
- 网络编程之TCP协议整理
- 截图用的坐标修正函数
- 云计算存储与平台架构
- iostat分析IO性能