0
点赞
收藏
分享

微信扫一扫

NAT穿越技术详细介绍

扬帆远航_df7c 2022-08-07 阅读 136

目录

1、NAT介绍

1.1、NAT和防火墙的定义

1.2、NAT的四种类型

1.3、NAT类型检查

2、用于NAT穿越的STUN协议

2.1、STUN协议介绍

2.2、STUN协议的实现过程

3、用于NAT穿越的TURN协议

3.1、TURN协议介绍

3.2、TURN协议的实现过程

4、ICE穿越技术

4.1、ICE介绍

4.2、ICE实现过程


       本文收集并整理了关于NAT穿越的一些技术,介绍这些技术的实现过程,让大家对NAT穿越技术的相关内容有个初步的认识与了解。

1、NAT介绍

1.1、NAT和防火墙的定义

1.1.1、防火墙

       为了网络的安全性,公司一般都安装防火墙,它是一个放于私有网的设备,用来保护网络资源免受外部的恶意破坏。

       防火墙检查从外部进来的每个数据包的IP地址和目的端口号,它经常如此设置:如果防火墙内的一台计算机A向防火墙外的一台计算机B主动发出请求要数据,防火墙会让外部计算机B的数据包通过,而且当且仅当数据包的目的地址和端口号与防火墙内发起请求的计算机A的地址和端口号相同;如果计算机B发来的数据包仅仅目的地址是防火墙内发起请求的计算机A的地址,而端口号不是计算机A发出请求的那个端口号,防火墙也将会丢弃那个外来的数据包。

       防火墙总是被配置过滤掉所有不请自到的网络通信,有一个例外是在防火墙内提供Web Server供外部访问。在这种情况下,公司会配置防火墙允许目的地址是Web Server的IP地址且目的端口号为80的数据包通过,这就使得公司外部可以主动向公司的Web Server发起请求得到一些公司放在Server上的数据。

       防火墙又分软件防火墙和硬件防火墙。

1.1.2、NAT

       网络地址转换(NAT)是一个Internet标准,置于两网间的边界,其功能是将外网可见的IP地址与内网所用的地址相映射,这样,每一受保护的内网可重用特定范围的IP地址(例如192.168.x.x),而这些地址是不用于公网的。从外网来的含公网地址信息的数据包先到达NAT,NAT使用预设好的规则(其组元包含源地址、源端口、目的地址、目的端口、协议)来修改数据包,然后再转发给内网接收点。对于流出内网的数据包也须经过这样的转换处理。

       NAT服务有两个主要目的:

1.2、NAT的四种类型

       这里面涉及到几个概念,先介绍一下:

      四种NAT类型如下:

1.3、NAT类型检查

       前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1)、(IP-2,Port-2)并根据客户端的要求进行应答。NAT类型监测的步骤为:

2、用于NAT穿越的STUN协议

2.1、STUN协议介绍

       STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即简单UDP穿透NAT协议,是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。

       它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。STUN是一种Client/Server的协议,也是一种Request/Response的协议,默认端口号是3478。STUN具体内容可以参考RFC3489、RFC5389。

2.2、STUN协议的实现过程

       STUN协议的部署图如上,STUN协议实现穿越的流程如下: 

3、用于NAT穿越的TURN协议

3.1、TURN协议介绍

       TURN,在RFC5766中定义,英文全称Traversal Using Relays around NAT(TURN):Relay Extensions to Session Traversal Utilities for NAT(STUN),即使用中继穿透NAT:STUN的中继扩展。简单的说,TURN与STUN的共同点都是通过修改应用层中的私网地址达到NAT穿透的效果,异同点是TURN是通过两方通讯的“中间人”方式实现穿透。

       TURN方式解决NAT问题的思路与STUN相似,也是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURN Server上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。具体协议内容可以参考RFC5766。

3.2、TURN协议的实现过程

       如上图所示,假设Client A在私网,TURN server在公网,Peer A在另外一个私网,下面大概讲述一下Client A与Peer A的通信过程:

4、ICE穿越技术

4.1、ICE介绍

       ICE的全称Interactive Connectivity Establishment(互动式连接建立),由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。可参考RFC5245。

4.2、ICE实现过程

       如上图所示,假设通信双方同时处于对称式NAT内部,现在SIP终端A要与B进行VoIP通信。A所在的内部地址是10.0.1.9,外部地址是211.35.29.30;B的内部地址是192.168.1.6,外部地址是202.205.80.130;STUN/TURN服务器的地址是218.65.228.110。

       第1步:收集候选的传输地址。首先A发起对话请求,进行地址收集。这些地址包括:

A的地址搜集过程:

       第2步:启动STUN。会话发起者获得一组传输地址后,将在本地传输地址启动STUN服务器,这意味着发送到来源地址的STUN服务将是可达的。

       第3步:确定传输地址的优先级。本地传输地址>NAT映射公网地址>TURN服务器中继地址。

       第4步:构建初始化信息(Initiate Message)。A地址收集后,生成初始化信息。初始化消息由一系列媒体流组成,每个媒体流都有一个缺省地址和候选地址列表。缺省地址通常被Initiate消息映射到SIP信令消息传递地址上,而候选地址列表用于提供一些额外的地址。

       对于每个媒体流来说,任意Peer之间实现最大连通可能性的传输地址是由公网上转发服务器(如TURN)提供的地址,通常这也是优先级最低的传输地址。客户端将可用的传输地址编成一个候选地址列表(包括一个缺省地址),并且为每个候选元素分配一个会话中唯一的标识符。该标识符以及上述的优先级都被编码在候选元素的id属性中。一旦初始化信息生成后即可被发送。初始化消息如下:

       第5步:响应处理。包括地址收集和连通性检查。B收到初始化信息Initiate Message后,先做同样的地址收集过程,B地址收集过程如下:

然后进行连通性检测。

       第6步:连通性检测。连通性检查的基本原则是:

       B的连通性检测:

完成连通性检测后,B产生应答消息,其中包括B的三个候选地址(前三条)和B—>A可联通的地址(第四条,称之为到B的peer-derived地址),如下:

       A收到应答消息后开始类似B的连通性检测。A的连通性检测:

同B的连通性检测类似,对于B的私有地址和STUN映射公网地址的连通性检查结果都失败,而B的TURN中继地址和到B的peer-derived地址成功(本例中它们都具有相同的优先级0.4)成功。相同优先级下我们通常采用peer-derived地址,所以A发送到B的媒体流将使用218.65.228.110:5556地址,而B到A的媒体流将发送至218.65.228.110:8076地址。

       第7步:优化的连通性检测方案。从步骤5开始,B收到初始化信息Initiate Message后,先做同样的地址收集过程,然后把地址作为应答消息发送给A。这样A就有了B的地址,B也有了A的地址。A收到B的应答之后,开始连通性检测。步骤同上图,不一样的是,在第7条消息之后,B收到A的检测消息,先做消息8的应答,然后用被检测的地址(192.168.1.6:23766)向对端(218.65.228.110:5566)发送检测请求,如果同样能够得到应答,则说明这对地址是有效的,可用于媒体传输。这个过程也称之为四次握手:当通过地址对中的本地地址向地址对中远程地址发送一个STUN请求,并成功收到STUN响应,称该地址对是可接收的;当地址对中的本地地址收到地址对中远程地址的一个STUN请求,并成功地响应,则称该地址对为可发送的。若一个地址对是可接收的,同时又是可发送的,则称该地址对是有效的,即通过连通性检查。

举报

相关推荐

0 条评论