几种方式解决SIP穿越NAT总结讲解

更新时间:2023-07-12 07:34:12 阅读: 评论:0

SIP穿越NAT的几种方式
多媒体会话信令协议是在准备建立媒体流传输的代理之间交换信息的协议,媒体流与信令流截然不同,它们所采用的网络通道也不一致。由于协议自身设计上的原因,使得媒体流无法直接穿透网络地址转换/防火墙(NAT/Firewall)。因为它们生存期的目标只是为了建立一个在信息中携带IP地址的分组流,这在遇到NAT/Firewall 时会带来许多问题。而且这些协议的目标是通过建立P2P(Peer to Peer)媒体流以减小时延,而协议本身很多方面却与NAT存在兼容性问题,这也是穿透 NAT/Firewall的困难所在。而NAT仍是解决当前公用IP地址紧缺和网络安全问题的最有力手段,所以解决NAT穿越成为首要问题。
以SIP通信为例,呼叫建立和媒体通信的建立是依赖SIP消息首部和SDP消息所描述的地址和端口信息进行的,呼叫双方分别在内网和外网上,内网是通过NAT设备连接到外网,由于NAT设备工作在IP和TCP/UDP层,所以它不对SDP等应用层数据进行NAT变换,因此会造成寻址失败,从而导致呼叫无法正常建立。另外,VOIP设备的主要通信协议(如SIP和H.323)要求终端之间使用IP地址和端口号来建立端到端的数据侦听外来的呼叫,而防火墙却通常被配置阻止任何不请自到的数据分组通过。需要网络管理者打开防火墙上的一个端口
来接收呼叫建立数据分组,例如5060端口(SIP的通信端口),但IP语音和视频通信协议还要求打开许多别的端口接收呼叫控制信息来建立语音和视频通信,这些端口号事先并不知道,是动态分配的,也就是说网络管理者为了允许语音和视频通信将不得不打开防火墙上所有的端口,防火墙就失去了存在的意义。所以当前的问题还有需要解决监听端口的问题。如下图SIP呼叫不成功示意图
分析:
1 d:211.83.100.100:23766 s:192.168.1.166:1010
2 d:211.83.100.100:23766  s:211.83.100.166:9993
3.d:211.83.100.166:9993 s:211.83.100.100:23766
4.d:192.168.1.166:1010 s:211.83.100.100:23766
5.d:211.83.100.110:23788 s:211.83.100.100:2020
6.d:211.83.100.100:3399 s:211.83.100.110:23788
7.d:211.83.100.166:9993 s:211.83.100.100:23766
8.d:192.168.1.166:1010  s:211.83.100.100:23766
9.d:211.83.100.100:3399 s:211.83.100.110:23788
10.d:211.83.100.166:9993 s:211.83.100.100:23766
11.d:192.168.1.166:1010  s:211.83.100.100:23766
12.d:211.83.100.110:23788 s:192.168.1.166:1010
  d:211.83.100.110:23788 s:211.83.100.166:9993
13.d:192.168.1.166 s:211.83.100.110:23788 A对B invite 时在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处理的地址字段类型主要有:ViaRecord_RouteContactSDP
ALG处理流程为如下三个步骤:
首先,ALG根据会话标识的协议类型对报文进行解码,若解码发现报文为不需要做ALG或解码发现为错误字段时退出,解码发现需进行字段转换时进一步处理;其次,ALG查找接口上的NAT配置,根据NAT配置转换报文中的IP正能量的话励志的语句地址、端口、call-id等信息并建立关联表,关联表记录了载荷地址的转换关系;最后,ALG调整报文载荷中的长度字段,如sip message headercontent-length字段标识message body的长度,ALGmessage body中的地址转换后,message body长度可能变化,content-length字段值需要置为变化后的值。
1.2工作流程示意图
分析:
1 d:211.83.100.100:23766 s:192.168.1.166:1010
2 d:211.83.100.100:23766  s:211.83.100.166:9993
9.d:211.83.100.166:9993 s:211.83.100.100:23766
10.d:192.168.1.166:1010 s:211.83.100.100:23766
11.d:211.83.100.110:23788 s:211.83.100.100:2020
12.d:211.83.100.100:3399 s:211.83.100.110:23788
13.d:211.83.100.166:9993 s:211.83.100.100:23766
14.d:192.168.1.166:1010  s:211.83.100.100:23766
9.d:211.83.100.100:3399 s:211.83.100.110:23788
10.d:211.83.100.166:9993 s:211.83.100.100:23766
11.d:192.168.1.166:1010  s:211.83.100.100:23766
12.d:211.83.100.110:23788 s:192.168.1.166:1010纳兰容若
高泽冶  d:211.83.100.110:23788 s:211.83.100.166:9993
ALG NAT对A发给B的RTP包中的内容进行解码,发现私网地址就转换为公网IP,并做映射建立关联表,最后调整报文载荷中的长度字段。
13.d:211.83.100.166:9993 s:211.83.100.110:23788
A对B invite 时在SDP中带上了RTP协商的端口和私网IP,B回复200OK时告知RTP时的端口和私网地址,B收到A的RTP包是经过ALG NAT修改后的数据包,就知道目的地址发给211.83.100.166:9993
14.d:192.168.1.166:1010 s:211.83.100.166:9993
我们的朋友遍天下2.STUN
2.1工作原理
STUN的全称是Simple Traversal of UDP Through NAT,即UDP对NAT的简单穿越方式。2016放假是一种网络协议它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。
1)应用程序(即STUN CLIENT)向NAT外的STUN SERVER通过UDP发送请求STUN 消息询问自身的转换后地址,
2)STUN SERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN CLIENT在NAT上对应的外部端口。响应消息通过NAT发送给STUN CLIENT,
3)STUN CLIENT通过响应消息体中的内容得知其在NAT上对应的外部地址,并且将其填入以后呼叫协议的UDP负载中,告知对端,同时还可以在终端注册时直接注册这个转换后的公有IP地址,这样就解决SIP穿越NAT的通信建立问题以及作为被叫时的问题。
4)宏是什么本端的接收地址和端口号为NAT外的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。
2.2网络结构图
2.3工作流程示意图
A:192.168.0.10    A NAT:192.168.1.1    211.83.100.100
STUN SERVER:211.83.100.110
B:192.168.11.11  B NAT:192.168.11.1    211.83.100.120
三体吧
分析:
1 d:211.83.100.110:1111 s:192.168.0.10:1010
2 d:211.83.100.110:1111 s:211.83.100.100:2020
3 d:211.83.100.100:2020 s:211.83.100.100:2020
4 d:192.168.0.10:1010 s:211.83.100.100:2020
5 d:211.83.100.120:2222 s:192.168.11.11:3030 
6 d:211.83.100.120:2222 s:211.83.100.120:4040
7 d:211.83.100.120:4040 s:211.83.100.120:2222 
8 d:192.168.11.11:3030 s:211.83.100.120:2222
A与B接收到STUN的响应消息就得到信令和媒体流在NAT上的映射地址,并将这些地址写到SIP消息中的Via,Contact字段以及SDP中的媒体流传送地址,代替原有的私网地址。如A的SDP带的端口为10000,B的SDP带的端口为20000,A、B相互告知对端它的端口,最后终端注册时直接用这个转换后的公有IP地址注册。所以端口10000 B NAT是打开的,端口20000 A NAT是打开的,所以RTP包可路由。

本文发布于:2023-07-12 07:34:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1092193.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:地址   端口   消息   建立   媒体   报文   协议   进行
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图