转: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. TP id 对字符串的查找

    // 还剩的图片的id $oldPid = implode(',', $_POST['OldGoodsPic']); // 从数据库中找需要出删除了的 FIND_IN_SET(id,'$oldPid' ...

  2. flex datagrid itemrender wordwrap失效

    现在我是想把datagrid中的部分字体变个颜色. 但是重写set data函数后发现原先的wordwrap自动换行不好使了. 于是就在谷歌上找问题.. 参考了两篇: http://stackover ...

  3. java字符编码详解

    引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国 ...

  4. unity3d面试题与参考答案

    1.C#程序题 1 2 3 4 5 6 7 8 9 10 11 private static void aaa(int x) { x = 10; }   private static void bbb ...

  5. SlidingMenu官方实例分析7——SlidingContent和SlidingTitleBar区别

    包含ActionBar:setSlidingActionBarEnabled(true); 效果图: 不包含ActionBar:setSlidingActionBarEnabled(false); 效 ...

  6. jmeter对响应结果做正则、json、xpath结果测试

    上面的返回结果可用于关联取值测试 具体用法详见http://www.cnblogs.com/xinjing-jingxin/p/8554338.html http://goessner.net/art ...

  7. Python类基础知识(面向对象基础)

    #首先 我们需要了解 面向过程是什么 面向对象是什么 我们为什么需要使用面向对象 面向过程:根据业务逻辑从上到下写垒代码 面向对象:根据代码对函数进行分类和封装 区别:解决问题的逻辑不同,但是都能解决 ...

  8. 【BZOJ4176】Lucas的数论 莫比乌斯反演

    [BZOJ4176]Lucas的数论 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)) ...

  9. 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...

  10. android菜鸟学习笔记26----Android广播消息及BroadcastReceiver

    1.广播类型: Android中的广播有两种类型:标准广播和有序广播.其中,标准广播是完全异步发送的广播,发出之后,几乎所有的广播接收者都会在同一时刻收到这条广播消息,因而,这种类型的广播消息是不可拦 ...