关于NAT穿越的分析.doc_第1页
关于NAT穿越的分析.doc_第2页
关于NAT穿越的分析.doc_第3页
关于NAT穿越的分析.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于NAT穿越的分析1、 NAT的适用范围及分类NAT包括以下两类:BASIC NAT以及NAPT。其中BASIC NAT适用于一个内网中有许多的外网的IP地址,这样在内网中可以适用内网的IP地址进行内网中的用户之间的通信;而在内网对外网进行通信时,内网中的主机进行一一对应的转换(即:将内网的IP转换成为内网中拥有的外网的IP地址,并且内网主机发送的IP地址需要发生改变,而包中的端口地址不需要进行改变,因为在不改变的情况下,就可以区分出来内网中不同的主机,仅仅是通过转换成为的外网的IP地址)。这种BASIC NAT主要的适用范围不是为了解决IP资源不足的问题,而仅仅是为了隐藏内网的内部拓扑结构。NAPT:在NAT中会要进行一下修改的:1、进行对于TCP或者是UDP数据包的分析,然后将包中的端口地址进行修改,修改完成以后要进行记录,记录到NAT上面,作为内网的某一台主机的唯一的标志。2、将所有的数据包的IP地址转换成为某几个有限的IP地址,这样的映射关系就是:多对一的,并不能只依靠一个单纯的外网的IP地址,来进行内网的某一台主机的标志。NAPT主要是用在解决IP资源短缺的问题上面的(有上面的对于Ip的转换的方面也能够分析的很清楚,多对一的关系(多个内网的IP地址对应一个唯一的外网的IP地址)。(内网地址+内网端口)- (外网地址+外网多口)一一对应,可以进行唯一的标志。(NAPT在(内网地址,内网端口)和(外网地址,外网端口)之间建立了一个的地址绑定,这一地址绑定定义了连接有效期内NAPT应做的地址转换。当内网主机以一个(内网地址,内网端口)同时发起多个对外的连接时,NAT如何处理。由此可以分为Cone NAT和SymmetricNAT。)当一个内网的主机与多个外界的服务器进行会话是:如果这多个会话适用的相同的(外网地址+端口号),在会话进行期间,必须要在NAT中对这种的一一变换的映射关系进行维持,即使现在,只有了一个的与外界的服务器端的链接,也必须要进行维持,除非所有的会话都关闭为止。这样的NAPT为:Cone NAT。这样的好处是,所有的内网的主机都有一个外网的IP+NAT中的随机的不重复端口号进行标识。Symmetric NAT并不保证(内网地址,内网端口)和(外网地址,外网端口)之间地址绑定的同一性,相反地,对于一个新的连接,Symmetric NAT总会为它指定一个新的外网地址。分析如下:在一个内网中的一个主机的两个程序来说,NAT会为他们分配两个不同的(外网的IP+端口号),这样一个主机的每一个网络进程都能够有不同的标识。对于不同的NAT方法,解决NAT的穿越的方案也有不同,下面对每种方案进行分析如下。2、 NAT穿越的方法NAT穿越的方案有如下几种:(1)中继(Relaying) (2)逆向连接 (Connection reversal )(3)UDP封装打洞(UDP hole punching) (4)UDP端口号预测(UDP port number prediction)(5)TCP同时打开(Simultaneous TCP open) (6)TCP封装打洞1、中继(Relaying) 最可靠的,但是效率最低的,假设2个客户主机,ClientA和ClientB,各自发起一个TCP或UDP的连接,连接到一个大家都知道的拥有固定IP地址的服务器C上。客户主机都在各自的私有网络中。两个客户端可以使用服务器C进行消息的传递。例如,要发送一条信息到客户端B,客户端A以C/S连接方式简单的发送一条信息到C服务器,然后C服务器使用已经和客户端B建立的C/S连接发送这条信息到客户端B。这种方法的优势在于只要两个客户端都连在服务器上,它就是有效的。它的明显缺点是它需要了服务器的处理并占用了带宽,而且即使服务器的网络状况良好,也有一定的通讯滞后问题。 实质上的问题是,要想进行两个内网之间的链接的话,必须要进行的是:两个内部主机之间必须和同一个服务器之间已经建立了某个应用程序的会话。2、 逆向连接 (Connection reversal )第二种技术是在只有一个ClientA位于NAT之后,而ClientB具有全局地址。在学习了这个逆向连接之后,以我的理解对这个整个的逆向连接进行分析如下:注:主机A为内网的客户端,主机B为外网的客户端,主机C为已经与主机A建立过链接的服务器。情况一、内网主机首先发起会话:(1) 当主机A首先与主机B发起会话时,因为主机B为外网IP,所以可以正常进行,这时,主机A对应的NAT已经记录了A与B会话的消息。(2) 当B再对A进行发起会话时,就可以根据以前获得的A的外网的IP以及端口号进行与A的会话。(3) 这是由于NAT已经记录过与B进行连接的信息,所以内网的防火墙,可以使B得邀请的数据包通过,如此,可以进行双方的会话。 情况二、外网主机B首先对内网主机A发起会话:(1) B首先是获取到A的内网地址,这是将此内网地址放到IP包中,进行传送,但是由于IP协议,不接受IP地址在内网段的数据包,所以发送失败。(2) 即使B获得了A与C进行通信的过程得知了A是一个内网,向NAT发送一个IP为A 外网的IP,并且端口号为相应的可以指向标志的内网的主机A,这是NAT由于判断,主机A当前没有对外网的主机B进行过请求访问,所以认定这个B的请求的访问是一种不安全行为,将B传过来的包进行扔掉。(3) 这是,B没有办法了,只能进行如下的操作:目的是让A知道有一个外网想和他进行连接,这是A可以选择和外网B主动进行连接,这样只要A是主动的,NAT内网的防火墙就可以让B的请求通过。想要实现(3)中的要求,必须要通过以前和A曾经联系过的服务器C去传递这个消息。在尝试和客户端A建立直接连接失败后,客户端B会利用服务器C传递一个请求,让客户端A去主动连接客户。客户端A在通过服务器C接收到传递的请求后,会使用客户端B的公共IP地址和端口建立一个TCP连接。 因为这个连接是在防火墙内部发起的,所以NAT A允许这个连接建立,而客户端B也能接收这个连接。3、 UDP封装打洞(UDP hole punching)与逆向连接相似的过程如下:注:假设内网主机A和另外的一个内网主机B都有自己的私有IP地址,也都位于不同的NAT后面。A和B各自和服务器C建立UDP通讯连接,使NAT A为A的连接分配一个自己的公共端口,而NAT B为B的连接分配的是公共端口。假定主机A想要直接和主机B建立一个UDP通讯会话。(1) 假设A简单的发一个UDP信息包到B的 外网地址+端口号 上面,然而NAT B将会丢弃这些进入的数据包,因为是NAT B和C已经建立的外部会话,而A发送的数据包的源地址和端口号是和C不匹配的。(2) 同样,假如B发送一个条UDP数据包给A的公网地址,NAT A也会丢弃。(3) 这时A发出一个UDP数据包给B的公网IP地址,同时也通过服务器C传递一个请求给B,要求B也发一个UDP信息给A的公网IP地址。A直接向B的外网IP地址发送的数据包会让NAT A在A的私有地址和B的公网地址之间建立了一个新的连接会话。(4) 同时,B到A的公网地址的信息会导致NAT B在B的私有地址和A的公共地址之间建立一个新的连接会话。一旦这种新的UDP连接在两者之间建立起来,客户端A和B就不需要服务器C的“介绍”就能彼此直接通讯了。4、 UDP端口号预测(UDP port number prediction)注:UDP端口号预测分析NAT的工作方式并且试图预测它为将来的连接会话分配的公共端口。再次考虑那两个客户的状态,A和B,在各自分开的NAT后面,已经与一台拥有全局地址的服务器C建立了UDP连接。NAT A分配一个属于自己的UDP端口以在A和C之间建立通讯连接,而NAT B分配一个端口用于在B和C之间建立连接。(1) 通过与服务器的通讯,A和B可以从服务器C上得到对方的公共IP地址和端口号。(2) 客户端A现在发送一个UDP数据包到地址B的外网地址+端口号上面,而客户端B同时发送一个数据包到地址的A的外网的地址+端口号。(3) 如果NAT A和B依次为新的连接分配端口,如果从A-C和B-C连接建立后没过多少时间,那在A和B之间的一个双向通讯通道就可以工作起来。(4) A到B的数据包让NAT A建立一个新的连接,NAT A(所期望的)分配一个公共端口,因为之前A和C的连接会话用的K,接下来就是K+1,这样使得端口号可以互相的标志。同样的,B到A的数据包将让NAT B打开一个新连接,并将(也是所期望的)分配一个端口M+1(M为原来的外网的端口号的地址)。如果客户端可以正确的预测到NAT为新的连接分配的端口,一条双向的UDP通讯通道就会象如下图所示一样建立起来。5、 TCP同时打开(Simultaneous TCP open)注:大多数TCP连接都是从一个终端发从一个SYN包到另一个终端,另一个终端响应一个SYN-ACK包。对于两个终端来说,同时通过发送同步SYN包到对方然后用一个ACK包应答来建立一个TCP连接是可行的。(1)如果一个NAT接收到私有网络之外的尝试建立TCP连接的TCP SYN包,NAT通常以丢弃这个SYN包或者发送一个TCP RST(连接复位)包的方式来拒绝这个连接尝试。(2)如果同步包与源和目的地址端口一起到达,那么会让NAT相信一个TCP连接已经建立起来,然后NAT将会允许该数据包通过。(3)特别是如果NAT刚刚得到并转换了一个从同样地址和端口来的SYN包,它将认为连接是已经建立的并允许进来的SYN通过。(4)如果ClientA和B能彼此预测公共端口,它们各自的NAT将分配下一个TCP连接端口,如果其中一个客户端和另一个客户端建立一个外部的TCP连接,可以在对方SYN到达本地NAT之前就发送SYN包通过它本地自己的NAT,那么对应应用程序的TCP连接就可以工作了。References1 /view/16102.htm NAT百度百科2 /v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论