转: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方面的比较。

p2p网络中的NAT穿透技术----常见NAT穿越解决方案的更多相关文章

  1. 使用TCP协议的NAT穿透技术

    一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的).但是,众所周知的是,UDP是一个无连 ...

  2. 使用TCP协议的NAT穿透技术(转)

    其实很早我就已经实现了使用TCP协议穿透NAT了,但是苦于一直没有时间,所以没有写出来,现在终于放假有一点空闲,于是写出来共享之. 一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基 ...

  3. 使用TCP协议的NAT穿透技术 (转载)

    其实很早我就已经实现了使用TCP协议穿透NAT了,但是苦于一直没有时间,所以没有写出来,现在终于放假有一点空闲,于是写出来共享之. 一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基 ...

  4. 迅雷在P2P网络中的另类上传速度

    如上图,我们一般在下载BT时,一般P2P是边下载边上传. 但是迅雷在自己的软件中可以设置上传速度,反而在展示时却把P2P协议的速度不在上传那么显示,而是使用协议速度来进行展示:并且这个速度无法设置. ...

  5. WebRTC下 的 NAT 穿透技术

    NAT的概念模型 NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息.NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力. ...

  6. P2P网络穿越 NAT穿越

    http://blog.csdn.net/mazidao2008/article/details/4933730 ——————————————————————————————————————————— ...

  7. P2P技术(2)——NAT穿透

    P2P可以是一种通信模式.一种逻辑网络模型.一种技术.甚至一种理念.在P2P网络中,所有通信节点的地位都是对等的,每个节点都扮演着客户机和服务器双重角色,节点之间通过直接通信实现文件信息.处理器运算能 ...

  8. 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)

    c#实现P2P文件分享与传输系统 二.设计 - 续(NAT穿透) 首先要抱歉,因为这些日子较忙,没有写文章,这个系列拖了很久,现在开始继续.  上一篇文章介绍了p2p系统Tracker Server和 ...

  9. NAT穿透解决方案介绍

    最近公司要实现在各种网络环境下面的多屏互动(机顶盒.android phone.iphone及PC端)的需求:由于IP地址资源有限的原因,目前我们使用的各种终端设备都位于局域网后面也就是多台设备共享同 ...

随机推荐

  1. iOS JSON字符串转化为字典-字典转Json字符串-

    1. JSON字符串转化为字典 + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString = ...

  2. veridata实验举例(4)验证veridata查找出updata、delete操作导致的不同步现象

    veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象 续接:<veridata实验举例(3)验证veridata查找出insert操作导致的不同 ...

  3. Machine Learning第十周笔记:大规模机器学习

    博客已经迁移到Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕了Andrew Ng在Cousera上的Machine Learning的第 ...

  4. redhat 配置本地yum源163yum源epel 源,无需卸载yum!无须拷贝ISO

    都知道redhat不收费,但是其yum服务是要收费的,不想出钱那就自己配置yum源就好了. 首先,博主之前也没用过redhat,第一次用yum装包的时候提示什么没注册之类的,balaba一大堆,然后就 ...

  5. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.3——整合resource文件

    问题: 想要在product的flavor里面改变图片,文字或者其它资源. 解决方案: 在flavor里面增加合适的资源目录,并且改变他们包含的值. 讨论: 考虑下3.2章的“hello world ...

  6. PHP+MySQL:测试连接+基本DB操作

    PHP使用MySQL,从连接.创建.到结果显示 <?php //连接MySQL测试 $db = mysql_connect("localhost","root&qu ...

  7. 【BZOJ2140】稳定婚姻 Tarjan

    [BZOJ2140]稳定婚姻 Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. ...

  8. MongoDB实践-自定义ASP.NET Session Store

    Session由来 由于HTTP协议是无状态的,客户端与服务器端进行“请求-响应”操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的.但是有些场景是需要知道客户端的状态的,最典型的就 ...

  9. Linux下Solr的安装和配置

    一.安装 1.需要的安装包:apache-tomcat-7.0.47.tar.gz.solr-4.10.3.tgz.tgz(jdk自行安装) 2.解压tomcat并创建solr文件夹 [root@lo ...

  10. Sublime Text 3如何快速生成HTML5的头部信息和常用的快捷键

    一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...