VOIP NAT穿越之SIP信令穿越
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处。
本文是VOIP通信NAT系列专题的第三篇,
本文论述NAT对SIP协议穿越的影响。SIP协议是基于文本的,而他的一些地址是保存在消息头传输。NAT设备在没开启ALG情况下不会改动消息头地址,
多数client填写的地址都是内网地址,这就导致消息路由问题,SIP 信令穿越涉及两部分,一个是注冊。还有一个是INVITE(呼叫),涉及的消息头为contact头和via头,
contact头是告知对方自己直接可达的地址,via头告知对方,此消息是从哪个地址,哪个port送过来,接收端响应时依据via地址做响应,先说register, client注冊时
会把自己的地址port填写到contact头,但这个地址在nat环境下并无论用。注冊的作用是告知server自己的可达地址,后面有呼叫送给他时server直接送到这个地址就可以,
而client填写的私有地址在nat环境下并不可达。server兴许呼叫直接送这个地址是失败的。解决问题须要client支持 sip outbound, 其原理是server发现假设client是在nat环境下,则记录接收到register请求的地址和port。而不是contact地址和port。 这个地址和port一般是NAT设备给client映射的外部port,而NAT设备维护这个映射是 有时间限制的,为确保这个映射一直开启就须要client周期性发keep-alive包。包的类型有多种,有的直接周期发register,有的发options, rfc5626规范要求TCP用回车换行发送。UDP则用stun
的bind request 保持NAT 映射处于活跃状态。 这就攻克了呼叫client问题。 SIP穿越的还有一个问题是响应发送给谁。前面提到,响应者会依据via头做 response,但via头一般是内网地址。NAT环境下是不可达的,RFC 3581攻克了这个问题,通过在via头中添加 rport和received字段支持此扩展,rport在发起请求者的包中是空的,接收到收到后发现有这两个头,接收端会检測实际收到的包的地址和port,把这两个值填写到recived和rport中,告知请求发起者,同一时候在响应请求时把响应向这个地址和port发送,通常这个地址和port是NAT设备映射的地址和port。
至此SIP信令穿越问题完美解决。
下一篇文章讲述VOIP NAT穿越 之媒体穿越。
VOIP NAT穿越之SIP信令穿越的更多相关文章
- sip信令跟踪工具sngrep
概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...
- SIP信令跟踪工具HOMER
概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具. HOMER是一款强大的.运营商级.可扩展的数据包和事件捕获系统,是基于HEP/EEP协议的VoIP/RTC监控应 ...
- 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia
SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...
- SIP穿越NAT SIP穿越防火墙-SBC
FireWall&NAT FireWall是一种被动网络安全防卫技术,位于网络的边界.在两个网络之间运行訪问控制策略.防止外部网络对内部信息资源的非法訪问,也能够阻止特定信息从内部网络被非法输 ...
- [转]SIP穿越NAT&FireWall解决方案
原文链接(也是转载)http://blog.csdn.net/yetyongjin/article/details/6881491.我修改了部分错字. SIP从私网到公网会遇到什么样的问题呢? 1 ...
- [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
[转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...
- 反弹,反向穿越防火墙,NAT网关等乱七八糟的术语
反弹,反向穿越防火墙,反向穿越NAT网关等一切与反向有关的网络活动,往往都是指同一回事情. 以前的木马都是客户端(攻击者)控制服务器(用户),把配置好的服务器发给用户来攻击,叫做正向. 现在的木马代码 ...
- Open Source VOIP applications, both clients and servers (开源sip server & sip client 和开发库)
SIP Proxies SBO SIP Proxy Bypass All types of Internet Firewall JAIN-SIP Proxy Mini-SIP-Proxy A very ...
- Android Sip学习(三)Android Voip实现
Android Sip学习(三)Android Voip实现 Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...
随机推荐
- 综合出现NSScanner: nil string argument libc++abi.dylib: terminat错误的解决方案
在开发中出现了这个错误,断点查找很久,没找到问题所在的代码,google下,发现了下面这几点会产生这个错误: 首先,顾名思义,错误原因是我们在调用某个方法的时候,传入了一个空字符串(注意区别于字符串内 ...
- C# Null 赋值
在此之前,我们先看一段程序: class Program { static void Main(string[] args) { Childre ...
- 组播MAC地址_转
转自:组播MAC地址 MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置.MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally ...
- HttpWebRequest、HttpWebResponse获取网页
1,通过HttpWebRequest.HttpWebResponse获取一个流 request = (HttpWebRequest)System.Net.WebRequest.Create(this. ...
- 初入android驱动开发之字符设备(四-中断)
上一篇讲到android驱动开发中,应用是怎样去操作底层硬件的整个流程,实现了按键控制led的亮灭.当然,这是一个非常easy的实例,只是略微演变一下,就能够得到广泛的应用. 如开发扫描头,应用透过监 ...
- MSSQL跨服务器查询
1.因为此功能服务器安全配置的一部分而被关闭,所以我们先开启 reconfigure reconfigure 2.如果需要关闭,执行 reconfigure reconfigure 3.查询语句 SE ...
- C/C++中near和far的区别
C/C++中near和far的区别 关键字near和far受目标计算机体系结构的影响.目前编程中使用不多. near关键字创建一个指向可寻址内存低端部分的目标指针.这些指针占用内存的单一字节,并且他们 ...
- Linux共享库 zlog日志
[ global] strict init = false buffer min = buffer max = 2MB rotate lock file= /tmp/zlog.lock [format ...
- 关于Unity中的世界坐标和局部坐标
1.物体的局部坐标的方向(物体自身的方向) transform.forward. transform.right. transform.up 2.物体的世界坐标的方向 Vector3.forward. ...
- 【转】【Centos】Centos下用upstart管理自己的服务程序
Upstart是Ubuntu用来进行服务进程管理的服务,本文介绍如何利用upstart来通过Centos操作系统管理我们自己开发的应用程序. 什么时候要管理我们的应用程序?当我们开发出服务类的应用程序 ...