本文原创自 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信令穿越的更多相关文章

  1. sip信令跟踪工具sngrep

    概述 在VOIP的使用过程中,最常见的问题就是信令不通和语音质量问题. 通常的问题跟踪手段包括日志分析.抓包分析. 抓包的工具有wireshark.tcpdump等等,如果是只针对sip信令的抓包,则 ...

  2. SIP信令跟踪工具HOMER

    概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具. HOMER是一款强大的.运营商级.可扩展的数据包和事件捕获系统,是基于HEP/EEP协议的VoIP/RTC监控应 ...

  3. 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia

    SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...

  4. SIP穿越NAT SIP穿越防火墙-SBC

    FireWall&NAT FireWall是一种被动网络安全防卫技术,位于网络的边界.在两个网络之间运行訪问控制策略.防止外部网络对内部信息资源的非法訪问,也能够阻止特定信息从内部网络被非法输 ...

  5. [转]SIP穿越NAT&FireWall解决方案

    原文链接(也是转载)http://blog.csdn.net/yetyongjin/article/details/6881491.我修改了部分错字.   SIP从私网到公网会遇到什么样的问题呢? 1 ...

  6. [转]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 ...

  7. 反弹,反向穿越防火墙,NAT网关等乱七八糟的术语

    反弹,反向穿越防火墙,反向穿越NAT网关等一切与反向有关的网络活动,往往都是指同一回事情. 以前的木马都是客户端(攻击者)控制服务器(用户),把配置好的服务器发给用户来攻击,叫做正向. 现在的木马代码 ...

  8. 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 ...

  9. Android Sip学习(三)Android Voip实现

    Android Sip学习(三)Android Voip实现   Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...

随机推荐

  1. [转]MYSQL 与 Oracle 之间的数据类型转换

    原文地址:http://www.cnblogs.com/guyueyanzi/archive/2010/02/27/1674788.html Table 2-4 Default Data Type M ...

  2. Java8中list转map

    第一种: 取list中某2个字段作为Map的K,V public Map<Long, String> getIdNameMap(List<Account> accounts) ...

  3. Spark算子总结(带案例)

    Spark算子总结(带案例) spark算子大致上可分三大类算子: 1.Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据. 2.Key ...

  4. Extjs4.x treepanel,treegrid 节点选择,选中某个节点

    //官方推荐 this.getModuleGrid().getRootNode().cascadeBy(function () { this.set("checked", fals ...

  5. Java学习笔记:具体解释传值和传引用

    传值和传引用 When you're passing primitives into a method ,you get a distinct copy of the primitive. When ...

  6. Nexus 7更换NFC控制器,导致不再支持读取Mifare Classic NFC 1k Tags

    In a review conducted by Anandtech, it was found that the Nexus 4 makes use of the Broadcom BCM20793 ...

  7. jquery 实现下拉菜单

    Jquery 是一个轻量的框架,个人认为非常好用,今天就写一个非常简单的例子,实现下拉菜单功能: 首先肯定要在页面引用jquery.js  版本不限 : 接下来把=================== ...

  8. css3动画属性系列之transform细讲scale缩放

    下面我们从3个方面开始介绍: 1.scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 | Y表示垂直方向的缩放倍数 Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的. ...

  9. 关于GO语言遇到illegal UTF-8 encoding 随手记录

    在使用汉字的时候会报错 解决方案 editpad++ 修改编码为UTF-8 保存就可以了~bingo

  10. why "Everything" is so fast?

    Everything并不扫描整个磁盘,只是读取磁盘上的USN日志,所以速度飞快.但因此缺点也明显:1.只支持NTFS格式的分区,因为USN日志是NTFS专有的.在FAT.FAT32格式分区上无法使用E ...