SIP穿越NAT解析问题探讨

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

【转】SIP穿越NAT解析问题探讨

SIP穿越NAT解析

下面对SIP协议产生NAT穿透问题,作一些解释;及提出解决的办法。

1、大致有4种类型的NAT。

a) Full Cone 完全圆锥体

b) restricted cone 受限制的圆锥体

c) port restricted 端口受限制的圆锥体

d) symmetric 对称的

其中a,b,c 也称作非对称的NAT。

2、SIP终端在NAT后面,其工作有可能出现问题。原因是SIP信令走的路径,和媒体流走的路径不一样。

3、Full Cone 完全圆锥体NAT

因特网上的任何PC,可以发送数据包到IP:port对;而NAT将这个IP:port对(公网上的)映射到内网的IP:port对(私有网络的)。

4、restricted cone 受限制的圆锥体NAT

NAT外面的PC,只有那些内网中已有PC与之联系过的PC,才能通过这个映射进来。例如,我通过内网的一台机器,IP 地址是10.1.1.1:123,与PC(a)联系,则PC(a)也可以通过这个NAT的映射,联系到我。而PC(b)则不行。

10.1.1.1:123 ---NAT ---> 202.70.65.78:10000 ------pc(a)

如果pc(b)也发送数据到202.70.65.78:10000,则不会有数据送到10.1.1.1:123。

补充说明:

如果我也联系过pc(b),则pc(b)也可以进来了。

10.1.1.1:123 ---NAT ---> 202.70.65.78:10000 ------pc(b)

如果pc(b)也发送数据到202.70.65.78:10000,则数据送到10.1.1.1:123。

5、port restricted 端口受限制的圆锥体NAT

除了4的条件外,即不但要检测pc(a)的源IP地址,还要检测其端口是否与前面也一样。

10.1.1.1:123 --->NAT---->202.70.65.78:10000 -----> pc(a)[213.123.324.34:8000]

这个NAT只会接收从IP地址 213.123.324.34 且端口为 8000来的数据,让进入到10.1.1.1:123。

6、对称的NAT 这是关系描述最简单的一个

10.1.1.1:1000 ----NAT -----> 200.123.123.34:1234 ----pc(a)

10.1.1.1:1000 ----NAT -----> 200.123.123.34:2222----pc(b)

这种NAT的IP:port对,对每个外部的程序,都是不同的。因而每一个外部的程序,都有自己的映射(NAT分配的IP:port对)。而前面的三种,多个外部程序,可能共用一个NAT的IP:port对。

7、RTP的问题

在RTP的消息正文内,有UA能够成功通信所需要的一些信息。这种消息正文,就叫做SDP消息。

问题在于,SIP终端(UA)可能对NAT一无所知。因而在SDP中包含的IP地址,通常使用内部的IP地址,也就是SIP终端知道的IP。这样,当通信的对方想与SIP终端通信时,就查看SDP消息中的IP地址,但是什么也没有得到,因为这里使用的是内部IP地址。

下面举个例子说明:

INVITE sip:040600@192.168.20.2:5060 SIP/2.0.

Record-Route: <sip:143.248.130.35;ftag=3a7ceb24a6ac50c4;lr=on>.

Via: SIP/2.0/UDP 143.248.130.35;branch=z9hG4bK758e.976609c7.0.

Via: SIP/2.0/UDP

192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d.

From: "Iqbal" <sip:040618@sip.dom.com>;tag=3a7ceb24a6ac50c4.

To: <sip:040600@sip.dom.com>.

Contact: <sip:040618@223.178.140.109:1024>.

Supported: replaces.

Call-ID: .

CSeq: 8717 INVITE.

User-Agent: Grandstream HT487 1.0.5.18.

Max-Forwards: 16.

Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.

Content-Type: application/sdp.

Content-Length: 343.

.

v=0.

o=040618 8000 1 IN IP4 192.168.20.3.

s=SIP Call.

c=IN IP4 192.168.20.3.

t=0 0.

m=audio 38660 RTP/AVP 0 8 4 18 2 15 99.

a=sendrecv.

a=rtpmap:0 PCMU/8000/3.

a=rtpmap:8 PCMA/8000/3.

SIP消息的标题头,类似于邮件的标题头。从后往前看,从From行开始,看到第一个Via行,这是SIP终端自己认为的IP地址,例如192.168.20.3。但是SIP代理服务器是聪明的,它知道这个消息是从哪里发过来的,它添加了rport和接收到的标志:

Via: SIP/2.0/UDP

192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d.

也就是说,SIP代理服务器,知道发消息的SIP终端的公网地址是223.178.140.109:1024。

这样,SIP代理服务器是可以与SIP终端通信的,因为它知道SIP终端的公网地址。

但是,可怜的老式的RTP被阻塞了,因为它的标题头如下:

v=0.

o=040618 8000 1 IN IP4 192.168.20.3.

s=SIP Call.

c=IN IP4 192.168.20.3.

t=0 0.

m=audio 38660 RTP/AVP 0 8 4 18 2 15 99.

a=sendrecv.

a=rtpmap:0 PCMU/8000/3.

a=rtpmap:8 PCMA/8000/3.

SIP终端期望从端口 port m=38660 且IP地址IP c= 192.168.20.3来接收RTP数据,而这个192.168.20.3:38660,就是通信的对方试图发RTP数据的目的地址。

这就是SIP电话振铃总是能够听到,而接起来却没有声音的原因。

8 解决办法 告诉SIP终端,不要如此傻地工作,而要想办法知道NAT分配给自己的端口映射。

并将公网的IP地址:端口放到SDP消息中。这样,SIP终端就问NAT....。或者是问公网的某个服务器,NAT分配给自己的映射是什么。

9 问NAT。 这种办法就是使用UPnP协议,另外去参见UPnP的资料。

10 问公网上的某个服务器。 如STUN服务器。

SIP终端发送一个探测数据包,到公网上的服务器。公网上的服务器会发回数据包,会包含有关NAT的详细信息。有了这些信息,SIP终端就会知道它是否在NAT后面。这种探测方法,可以用于上面4种NAT,都有效。例如SIP终端从10.1.1.1:1000发送一个数据包,则SDP消息中包含的是m=1000 and c=10.1.1.1。但是,如果SIP终端先进行NAT探测,则会知道NAT会分配公网的IP:端口是212.134.123.23:12345。则 SIP终端直接在SDP消息写m=12345,c=212.134.123.23。

产生的问题 因为NAT的端口分配是动态的,因而有可能会改变。这样,在发送了NAT探测消息后,要很快地发送出SIP消息。而且,SIP终端发送数据的端口和接收数据的端口要是一样的。

注意受限制的圆锥体(包括端口受限制的圆锥体)NAT,它不让回来的消息进来,除非SIP终端先发了一个数据包给它。因而,SIP终端需要先发一个数据包给对方。这样以后对方来的数据,就可以进入NAT内部了(不过,不需要为这个操作担心,有办法的)。

上面的办法在对称的NAT后面,不能够工作。因为,对称的NAT,它在分配给SIP终端外部的IP:port时,每次都变化(不同的对方不一样)。也就是SIP终端在探测NAT时,得到的IP:port,与它后来发SIP消息时,分配的IP:port不一样。这样,对方来的语音数据就进不来,因为对方得不到正确的IP:port。

11、上面描述的过程,其实就是采用STUN协议时,解决问题的过程。就是SIP终端向STUN服务器发探测NAT的数据包。

12、对称的NAT 解决办法 就是在公网上放一个中转语音流的服务器。这个中转语音流的服务器有时就是一个Out Bound proxy。注意,这个中转语音流的服务器,可能会成为瓶颈。由于语音要经过中转语音流的服务器,所以路径增长了,音质会变差。所以,对称的NAT,要SIP能够工作,总之是个麻烦。

不过,目前大多数的NAT,都可以做“虚拟服务器的端口转发”,即将SIP工作需要的端口转发到SIP终端上去。如果在NAT设备上,做了“虚拟服务器的端口转发”,则NAT会保留SIP工作需要的端口,专用于SIP终端,这样SIP终端就相当于是在一个Full Cone完全圆锥体的NAT后面,SIP用STUN工作没有问题。SIP终端需要的端口数是这样确定的,一个端口用于SIP信令,比如5060。RTP端口的数量,取决于通话的路数。一路通话需要2个RTP端口。每增加一路通话,则需要多2个端口。

只支持一路通话的SIP话机,需要NAT映射3个端口。

前面三种的NAT,可统称为非对称的NAT。非对称的NAT,都可以用STUN协议穿过NAT。

将对称的NAT,通过端口转发的方式,变为完全圆锥体的NAT,是解决NAT问题的最好办法。首先应当用这种办法来解决。没有办法映射端口,再想其它的办法。当然,建议大家不要买那种不能够映射端口的宽带路由器,那样的路由器太差了。

基于SIPNAT 穿透研究 <br />1 引言<br />VoIP 是新一代网络时代发展起来的最具代表性和发展前<br />途的应用技术之一。SIP 作为VoIP 中的一种信令控制协议,具<br />有很大的增长潜力。因此为了更好地推广VoIP 业务的发展,解<br />决好SIP 穿越NAT问题将是一个重大的研究课题。本文主要<br />是在STUN 方法的基础上,针对其无法穿越对称型NAT 的缺陷<br />展开研究的,提出了一个改进的新方案。<br />2 SIP 协议、NAT 相关技术及STUN 简介<br />2.1 阅读详情

相关推荐

SIP ALG穿透NAT的实现

SIP ALG穿透NAT的实现 摘 要: 为解决SIP应用穿透NAT问题,剖析了NAT工作原理,并针对SIP协议信令过程的特点,提出了采用ALG设备解决NAT的穿透问题,具体设计了ALG的结构和相关实现算法,并给出了详细的实现方案。  关键词: 会话发起协议(SIP) 网络地址转换(NAT) 会话描述协议(SDP) 信令   会话发起协议SIP[1](Session ...

weixin_34216036的博客 1596

NAT原理类型与SIP穿透

NAT原理类型与SIP穿透,基本原理讲解 以视频方式讲解,方便理解

Freeswitch结合Coturn实现NAT穿透的SIP通话配置

本文详细介绍了如何配置Freeswitch与Coturn服务器,以解决公网环境下SIP通话因NAT穿透导致的注册成功但无法通话或通话不稳定的问题。通过部署Coturn提供STUN/TURN服务,并正确配置Freeswitch的SIP Profile(如ext-rtp-ip、ice策略等),可实现复杂网络(包括对称型NAT和移动网络)下的可靠媒体流传输。文章包含从服务器部署、关键参数详解到客户端配置与问题排查的完整实战指南。

weixin_28396629的博客 66

SIPNAT穿透方法浅析

1、SIP协议的NAT有四种模型。 a) Full Cone 完全圆锥体 b) restricted cone 受限制的圆锥体 c) port restricted 端口受限制的圆锥体 d) symmetric 对称的 其中a,b,c 也称作非对称的NAT。 2、SIP终端NAT后面,其工作有可能出现问题。原因是SIP信令走的路径,和媒体流走的路径不一样。 3、Full Con

dingpeng1978的专栏-凤舞九天 6706

SIP穿越NAT的几种方式

SIP穿越NAT的几种方式 多媒体会话信令协议是在准备建立媒体流传输的代理之间交换信息的协议,媒体流与信令流截然不同,它们所采用的网络通道也不一致。由于协议自身设计上的原因,使得媒体流无法直接穿透网络地址转换/防火墙(NAT/Firewall)。因为它们生存期的目标只是为了建立一个在信息中携带IP地址的分组流,这在遇到NAT/Firewall时会带来许多问题。而且这些协议的目标是通过建立P2P(Peer to Peer)媒体流以减小时延,而协议本身很多方面却与NAT存在兼容性问题,这也是穿透 NAT/F.

TOMSER123 4418

RFC3581——SIP中的rport机制

http://my.oschina.net/u/147624/blog/33203 1.    介绍 RFC3581的下载地址:http://www.ietf.org/rfc/rfc3581.txt 该协议比较简短,主要用于描述rport(response-port)机制。 1.1 NAT分类 NAT:网络地址转换(NAT,Network Address Tr

blade2001的专栏 1606

音视频开发学习(-)续,协议

stun, turn, ice协议概述 stun,turn,ice是ietf提出的处理voip网络中nat穿越问题的协议族。     stun 可以处理大部分nat问题,turn是stun协议的一个增强版,专用于处理对称形nat问题,而ice则是综合stun及turn的产物,是一个框架,综合运用STUN和TURN的结构,它提供可靠的VoIP或视频通话配置以及媒体传输,通过一个SIP供给/应

dinglearner的专栏 867

PJSIP核心架构深度剖析:理解SIP、RTP、NAT穿越的完整框架

PJSIP是一个功能强大的开源SIP协议栈,它提供了完整的VoIP解决方案,包括SIP信令、RTP媒体传输以及NAT穿越等核心功能。本文将深入剖析PJSIP的核心架构,帮助新手和普通用户理解SIP、RTP、NAT穿越的完整框架。 ## PJSIP架构概览 PJSIP采用分层架构设计,各个模块职责清晰,协同工作以提供完整的VoIP功能。从整体上看,PJSIP的架构可以分为应用层、协议层和传输层等

gitblog_00297的博客 1056

SIPNAT问题阐述及其解决方案分析(2)

 3.服务器端解决方案  服务器端解决方案主要包括:B2BUA(Back-to-BackUserAgent)、服务器端RTP中继。  B2BUA是一个接收请求并充当UAS处理请求的逻辑实体,主要是通过两个UA以Back-to-Back的工作模式控制经过它的呼叫。B2BUA与SIP代理服务器不同,B2BUA可以接收呼叫,并能对其进行修改,以其它形式代表发起呼叫的UA向终端目标发起呼叫,并能充当呼叫双

2686

FreeSWITCH关于穿越NAT的那点事儿

NAT的种类:Full Cone NAT(全锥型NAT)、Restricted Cone NAT(限制锥型NAT)、Port Restricted Cone NAT(端口限制锥型)、Symmetric NAT(对称型NAT)。 四种类型的区别请自行百度,网上讲的很详细,本地NAT的类别,可借助于工具或自行检测。 FreeSWITCH帮助终端穿越NAT的解决方案: 1、SIP穿越 FreeSWITCH默认使用ACL来判断对方是否处于NAT环境中,配置: <param name="apply-

Lce的专栏 3692

NAT类型与NAT穿越技术总结

一、NAT百科相关内容:NAT 即 Network Address Translation,是一种将私有(保留)地址转化为合法IP地址的转换技术,不仅完美地解决了lPv4地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机 ,目前广泛应用。NAT可以分为静态NAT(static nat)、NAT池(pooled nat)和 端口复用NAT(PAT Port Addre

u012888602的博客 3296

BFCP在SIP双流中的应用

作者:johney_zhou 链接:https://www.jianshu.com/p/a51bd7380894 关键词: SIP BFCP交互流程NAT双流SDP 摘要: 我司三代高清SP4开始支持BFCP功能,下文为初探BFCP协议,如有出错欢迎大家多提意见。 案例描述 将BFCP应用于SIP双流中,主要是用BFCP消息来控制SIP双流的开启与关闭。针对SIP双流,在实现过程中我们...

xiaojun11的专栏 4822

SIP信令机制到SDP会话描述(深度解析

起始行是每个SIP消息的第一行,用于标识该消息的基本性质。根据消息类型的不同,起始行分为“请求行”和“状态行”。示例:参数说明:- Method :表示请求的操作类型,如INVITE、REGISTER等;- Request-URI :指示目标用户的地址,通常为SIP URI格式(sip:user@domain);- SIP-Version :当前固定为 SIP/2.0 ,代表使用的协议版本。此结构借鉴了HTTP的设计思想,但语义更侧重于会话生命周期管理而非资源获取。

u011563926的专栏 1922

RFC3581——SIP中的rport机制(一)

转自http://www.blogjava.net/amigoxie/archive/2010/05/28/322182.html  1.    介绍 RFC3581的下载地址:http://www.ietf.org/rfc/rfc3581.txt 该协议比较简短,主要用于

资料库 1689

FTP穿越NAT

NAT是一种常见的网络协议,可以达到节省公网IP地址和隐藏内部网络结构等目的。NAT通过对IP报文头部的IP地址和TCP/UDP端口进行转换,创建NAT会话表,完成数据的转发。 有一些特殊的协议或者应用,它们的报文不是TCP/UDP报文,或者其报文的数据部分包含了IP地址或端口信息。对于这些特殊报文不能按照普通的方法进行有效的转换。下面介绍一种常见的协议FTP,如何穿越NAT。 FTP基于TCP,是一种双通道协议。所谓双通道,是指要完成一次完整的FTP业务会涉及到控制连接和数据连接两个通道。 FTP有主动和

qq_23930765的博客 1357

Freeswitch NAT穿越实战:从ext-ip失效到STUN、rtpengine与ICE的根治方案

在实时音视频通信领域,NAT(网络地址转换)是影响SIP与RTP媒体流可靠传输的核心挑战。其原理在于私有网络设备对IP地址与端口的重写,导致信令与媒体路径不一致。解决NAT穿越的技术价值在于保障VoIP、视频会议等服务的连通性与音视频质量,是构建稳定企业通信与互联网音视频应用的基础。应用场景广泛覆盖云端部署、远程办公、移动终端接入及复杂企业网络环境。本文聚焦于Freeswitch这一开源通信平台,针对其传统`ext-rtp-ip`与`ext-sip-ip`参数在对称型NAT下失效的典型问题,深入剖析SIP/

weixin_30384217的博客 292
上一篇: 使用SIPP来进行SIP压力测试
下一篇: RFC3581-关于rport字段 的阅读笔记(一)
dnvodcwan
博客等级 码龄24年 18粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值