几种方式解决SIP穿越NAT的总结Word下载.docx

上传人:b****2 文档编号:15019981 上传时间:2022-10-26 格式:DOCX 页数:13 大小:528.63KB
下载 相关 举报
几种方式解决SIP穿越NAT的总结Word下载.docx_第1页
第1页 / 共13页
几种方式解决SIP穿越NAT的总结Word下载.docx_第2页
第2页 / 共13页
几种方式解决SIP穿越NAT的总结Word下载.docx_第3页
第3页 / 共13页
几种方式解决SIP穿越NAT的总结Word下载.docx_第4页
第4页 / 共13页
几种方式解决SIP穿越NAT的总结Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

几种方式解决SIP穿越NAT的总结Word下载.docx

《几种方式解决SIP穿越NAT的总结Word下载.docx》由会员分享,可在线阅读,更多相关《几种方式解决SIP穿越NAT的总结Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

几种方式解决SIP穿越NAT的总结Word下载.docx

如下图SIP呼叫不成功示意图

分析:

1d:

211.83.100.100:

23766s:

192.168.1.166:

1010

2d:

211.83.100.166:

9993

3.d:

9993s:

23766

4.d:

1010s:

5.d:

211.83.100.110:

23788s:

2020

6.d:

3399s:

23788

7.d:

8.d:

1010s:

9.d:

10.d:

11.d:

12.d:

d:

13.d:

192.168.1.166s:

23788A对Binvite时在SDP中带上了RTP协商的端口和私网IP,B回复200OK时告知RTP时的端口和私网地址,B收到A的RTP包后回复,因为RTP包记录是私网地址,所以RTP包被丢弃。

目前主流的几种解决方式有ALG、STUN、TURN、ICE,我们分别来介绍它们的工作原理及工作流程。

1.ALG

1.1工作原理

ALG是指能识别特定应用层协议(如SIP、H.323或MGCP协议)的防火墙。

它不是简单地查看分组首部信息来解决数据分组是否可以通过,而是更深层地分析负载内容的数据,也就是应用层的数据。

SIP和H.323协议都在负载中放了重要的控制信息。

通过分析哪一个端口需要打开。

防火墙动态的打开那些被应用的端口,而所有别的端口依然安全地保持关闭状态。

ALG是支持VOIP应用最简单的一种方式,但该方案的缺点非常明显:

每增加一种新的应用都将需要对NAT/Firewall进行升级。

在安全要求上还需要作一些折衷,因为ALG不能识别加密后的报文内容,所以必须保证报文采用明文传送,这使得报文在公网中传送时有很大的安全隐患。

SIP响应消息用于对请求消息进行响应,指示呼叫或注册的成功或失败状态。

在请求与响应报文中需要进行ALG处理的地址字段类型主要有:

Via、Record_Route、Contact、SDP。

ALG处理流程为如下三个步骤:

首先,ALG根据会话标识的协议类型对报文进行解码,若解码发现报文为不需要做ALG或解码发现为错误字段时退出,解码发现需进行字段转换时进一步处理;

其次,ALG查找接口上的NAT配置,根据NAT配置转换报文中的IP地址、端口、call-id等信息并建立关联表,关联表记录了载荷地址的转换关系;

最后,ALG调整报文载荷中的长度字段,如sipmessageheader的content-length字段标识messagebody的长度,ALG对messagebody中的地址转换后,messagebody长度可能变化,content-length字段值需要置为变化后的值。

1.2工作流程示意图

14.d:

ALGNAT对A发给B的RTP包中的内容进行解码,发现私网地址就转换为公网IP,并做映射建立关联表,最后调整报文载荷中的长度字段。

23788

A对Binvite时在SDP中带上了RTP协商的端口和私网IP,B回复200OK时告知RTP时的端口和私网地址,B收到A的RTP包是经过ALGNAT修改后的数据包,就知道目的地址发给211.83.100.166:

2.STUN

2.1工作原理

STUN的全称是SimpleTraversalofUDPThroughNAT,即UDP对NAT的简单穿越方式。

是一种网络协议它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。

这些信息被用来在两个同时处于NAT路由器之后的主机之间建立UDP通信。

该协议由RFC3489定义。

1)应用程序(即STUNCLIENT)向NAT外的STUNSERVER通过UDP发送请求STUN消息询问自身的转换后地址,

2)STUNSERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUNCLIENT在NAT上对应的外部端口。

响应消息通过NAT发送给STUNCLIENT,

3)STUNCLIENT通过响应消息体中的内容得知其在NAT上对应的外部地址,并且将其填入以后呼叫协议的UDP负载中,告知对端,同时还可以在终端注册时直接注册这个转换后的公有IP地址,这样就解决SIP穿越NAT的通信建立问题以及作为被叫时的问题。

4)本端的接收地址和端口号为NAT外的地址和端口号。

由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。

2.2网络结构图

2.3工作流程示意图

A:

192.168.0.10ANAT:

192.168.1.1211.83.100.100

STUNSERVER:

211.83.100.110

B:

192.168.11.11BNAT:

192.168.11.1211.83.100.120

1111s:

192.168.0.10:

3d:

2020s:

2020

4d:

5d:

211.83.100.120:

2222s:

192.168.11.11:

3030

6d:

4040

7d:

4040s:

2222

8d:

3030s:

2222

A与B接收到STUN的响应消息就得到信令和媒体流在NAT上的映射地址,并将这些地址写到SIP消息中的Via,Contact字段以及SDP中的媒体流传送地址,代替原有的私网地址。

如A的SDP带的端口为10000,B的SDP带的端口为20000,A、B相互告知对端它的端口,最后终端注册时直接用这个转换后的公有IP地址注册。

所以端口10000BNAT是打开的,端口20000ANAT是打开的,所以RTP包可路由。

9d:

8888

10d:

8888s:

2.4需要注意

1)NAT/PAT对于地址转换关系是有一定生命期的,某个地址转换后在一段时间内没有被使用将会被清除,当这个业务流再次出现时,将会建立一个新的地址转换关系,这就意味着STUN的询问过程以及终端的注册过程都需要再执行一遍才能保证通信的正确。

解决这个问题一个比较通行的方案是采用某种方式保持NAT/PAT的转换关系,例如在NAT/PAT生命期内重复注册一次,比如NAT/PAT的生命期是3分钟,那么就将注册重复周期设置为2分钟。

2)另外STUNserver并非指一个专用的服务器,而是指一种功能、一个协议,我们可以在softswitch或者任何一个需要此功能的服务器上内置此协议,后面代码也包含一个简单的Server实现。

3)但是在NAT采用对称模式(symmet

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1