p2p网络中的NAT穿透技术----常见NAT穿越解决方案

转:http://blog.csdn.net/cllzw/article/details/46438257

常见NA丁穿越解决方案

    NAT技术在缓解IPv4地址紧缺问题、构建防火墙、保证网络安全等方面都发挥了重要

作用。然而,NAT设备的广一泛存在却给Internet上的主机,特别是处于不同内网中的主机进行P2P通信带来了障碍,限制了P2P的应用。NAT阻碍主机进行P2P通信的主要原因是NAT不允许公网主机主动访问内网主机,这使得Internet上具有公网IP地址的主机不能主动访问NAT之后的主机,而位于不同NAT之后的主机之间更是无法相互识别因而不能直接交换信息。因此,要在目前的网络环境中进行有效的P2P通信,就必须研究相应的方案来穿越NAT 。

    针对网络中的NAT穿越问题,目前业界主要有如下解决方案:ALG方式、MII3COM方

式、STUN方式、TURN方式、ICE方式、Full Proxy方式等。

    1..应用层网关(ALG)方式

    应用层网关(ALG , Application Layer Gateway )是指能识别指定协议(如H.323和SIP等)

的设备。在网络中增加了ALG设备可以很好地配合NAT完成应用协议消息中的地址字段翻

译。NAT和NAPT只能对IP报文的头部地址和TCPILIDP头部的端口信息进行转换,对于报文的数据部分可能包含IP地址或端口信息的特殊协议(如H.323, SIP. MGCP等),则无法实现有效的转换,而许多应用中需要对数据包负载中的数据进行分析转换。例如一个FTP服务器处于内网中,只有内网IP地址,该服务器在和公网主机建立会话的过程中,需要将自己的IP地址发送给对方,而这个地址信息放在IP报文的数据部分,现有的NAT设备是无法对它进行地址转换的,当公网主机接收到这个私有地址并使用它时,是不可能建立连接的。增加应用层网关ALG之后,就可以进一步分析数据包负载内的数据,即应用层的数据。所以,当网络中使用了NAT设备来屏蔽内部IP地址时,应用层网关ALG就可以同时实行对业务流对NAT的穿越了。ALG可以是单独地连接于公网和内网之闻的设备,也可以内置于NAT或防火墙设备中。

    ALG大部分的功能集成在NAT设备上,这导致了该方式的可扩展性不强,因为在进行

应用升级时,需要对NAT设备也进行升级,这对目前我们所处的网络来说,将会是一项非常艰巨的任务,在实际中很难实现。ALG方式的另一个不足就是ALG必须透彻地理解应用协议,需要根据协议过程协调NAT的地址翻译过程,并同步修改数据包负载中的相关字段,这将会加重网关的负担,对于NAPT来说情况更复杂,处理开销过大,可能会影响了网络的正常运行,形成网络瓶颈。而且ALG无法识别加密后的报文内容,必须保证报文采用明文传送,使得在公网中传送时存在安全隐患。

  2. M1DCOM (Middle-Bax Communications)代理方式

    M1DCOM代理方式与ALG方式在功能上基本相同,也需要了解相应的NAT的工作机制,负责具体的应用处理,协助NAT一起对数据包进行处理。不同之处在于MIDCOM的框架结构采用可信的第三方C MIDCaM代理)对NAT进行控制。

    MIDCaM代理的物理实体可以是代理服务器,所以在升级应用服务器的时候,不需要更改NAT墓本特性,通过对MIDCOM代理服务器的升级就可以支持更多的新业务,这是

MIDCCJM相对ALG方式的一个很大的优势口但是MI DCQM技术的实施需要对服务器进行MIDCOM协议的升级扩展,因此该方案的实施过程中也会遇到投入较大、实现周期较长等问题。而且目前的MIDCDM代理方式还在研究过程中,并没有形成一种成熟的产品,所以现阶段使用MIDCDM实现NAT穿越的实际应用并不是很多。

    3. STUN方式

    STUN,即C1DP对NAT的简一单穿越方式。这种解决方案的基本思路是,局域网接入用户通过某种机制预先得到其内网地址对应在出口NAT,上的公网地址,然后在其报文中的地址信息处直接填写出口NAZ上的公网地址,而不是用户的私有IP地址,这样报文中的内容在经过NAT时就无需被修改了,只需按普通NAT流程转换报文头部的IP地址即可,负载中的IP地址信息和报文头部地址信息是一致的。STUN协议就是基于此思路来解决应用层地址的转换问题的。

    在穿越过程中,内网主机向NAT外的STUN服务器发送STUN请求,STUN月浸务器收到请求消息,产生响应消息,响应消息中包含请求消息的源端口地址,即内网主机在NAT仁对应的外部端口地址。然后响应消息通过NAT发送给内网主机,内网主机在以后的业务呼叫过程时,将该公网地址填入呼叫协议的报文负载中,告知对方自己的RTP接收地址和端口号为NAT外的地址和端口号。由」几通过STiTN协议己在NAT . fr预先建立媒体流的NAT映射表,故媒体流可以顺利穿越NAT 。

    STUN协议最大的优点是无需现有NAT设备做任何改动。目前,网络中已有大量的NATI

防火墙,而且这些NATI防火墙不一定支持VoIP应用。如果采用MIDCOM或ALG方式,则需要替换现有的NAT/防火墙,实施起来难度较大,且MIDCDM方式无法实现对多级NAT

的有效控制。如果采用STLFN方式,不但无需改动NATI防火墙,而且能够很好地适应多个NAT串联的网络环境。

    但STUN的局限性在于需要终端应用程序支持STUN客户端的功能;同时STUN不支持

TCP连接的穿越;另外STUN方案不支持业务对防火墙的穿越以及对称NAT(Symmetric NAT )的穿越。

    4. TURN方式

    TURN ,即采用中继的NAT穿越。该方式与STUN在技术机制上是相同的,也来用了服务器/客户端模式,通过访问处于公网中的服务器得到内网中主机所分配得到的公共地址,进而进行通信。不同的只是在STUN方式中得到的公共地址是由NAT分配的,而在TURN模式中内网主机得到的公共地址是由TURN服务器分配的。TURN通过分配TURN Server的地址和端口作为客户端对外的接收地址和端口,即内网主机发出的报文都要经过TURN Server进行中继转发,这种方式除了具有STUN方式的优点外,还解决了STAN应用无法穿越对称式NAT (Symmetric NAT ),同时支持基一于TCP的应用.

    然而,由于服务器的存在,当数据量变得非常大时,也会造成网络瓶颈,而且由于所有

报文都必须经过TURN服务器转发,增大了报文的延迟和丢包的可能性,会给Qo5带来问题。目前网络流行的是将TURN与STUN结合在一起使用。

    5.  FuIIProxy方式

    FullE'roxy方式的思路是利用转发设备将内网主机的所有数据信息进行处理和转发,通过这种方式实现对NAT的顺利穿越,其关键之处在于同时完成对终端呼叫信令的代理转发和媒体中继。内网主机产生的信令流与业务数据流一首先通过Proxy设备,由Proxy设备对其进行解析,并将信息中的私有地址改为Proxy设备的公共IP地址与端u,完成修改后将信息发送到目的地。

    在Fu1lProxy方式下,无需对现有的NAT设备做任何改动,适应性非常强,同时私有网络中主机的应用程序也无需支持S Tz IN和TURN协议,这是FuilProxy方式的一个优势。但是由于Proxy设备是所有信息的必经之处,需要对数据包进行集中的分析与处理,对设备的要求很高,而且FullPmxy方式会增加包的延时和丢包的可能性,可能会造成网络瓶颈,而且如果该节点不能正常工作,那整个内网都无法与外界进行通信。

    6. ICE方式

    ICE  (Interactive Connectivity Establishment)前己经被公认为在非对称性NAT环境下

首选的NAT穿越解决方案。ICE本身是一种方法,它综合运用STUN、 TURN等协议来提供一个通用的解决方案,使之在最适合的情况下工作,以弥补单独使用其中任何一种所带来的固有缺陷。

    ICE的优势是支持各种NAT的穿越,但是需要每一个终端都支持ICE穿越方法,在开发上显著地增加了复杂性,而且网络还必须支持STUN, TURN等功能,实现起来较为复杂。

    下面对上述几种方案进行一个小结,表7-1是各种方案在性能、可扩展性、对现有设备

改造、安全及QoS方面的比较。

原文地址:https://www.cnblogs.com/newjiang/p/7671018.html