NAT的完全分析及其UDP穿透的完全解决方案_第1页
NAT的完全分析及其UDP穿透的完全解决方案_第2页
NAT的完全分析及其UDP穿透的完全解决方案_第3页
NAT的完全分析及其UDP穿透的完全解决方案_第4页
全文预览已结束

下载本文档

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

文档简介

1、一:基本术语防火墙防火墙限制了私网与公网的通信,它主要是将(防火墙)认为未经授权的的包丢弃,防火墙只是检验包的数据,并不修改数据包中的IP地址和TCP/UDP端口信息。网络地址转换(NAT)当有数据包通过时,网络地址转换器不仅检查包的信息,还要将包头中的IP地址和端口信息进行修改。以使得处于NAT之后的机器共享几个仅有的公网IP地址(通常是一个)。网络地址转换器主要有两种类型.P2P应用程序P2P应用程序是指,在已有的一个公共服务器的基础上,并分别利用自己的私有地址或者公有地址(或者两者兼备)来建立一个端到端的会话通信。P2P防火墙P2P防火墙是一个提供了防火墙的功能的P2P代理,但是不进行地

2、址转换.P2P-NATP2P-NAT 是一个 P2P代理,提供了NAT的功能,也提供了防火墙的功能,一个最简的P2P代理必须具有锥形NAT对Udp通信支持的功能,并允许应用程序利用Udp打洞技术建立强健的P2P连接。回环转换当NAT的私网内部机器想通过公共地址来访问同一台局域网内的机器的时,NAT设备等价于做了两次NAT的事情,在包到达目标机器之前,先将私有地址转换为公网地址,然后再将公网地址转换回私有地址。我们把具有上叙转换功能的NAT设备叫做“回环转换”设备。 二:NAT分类可以分为基础NAT与网络地址和端口转换(NAPT)两大类(一):基础NAT(二):网络地址和端口转换 (NAPT)这

3、是最普遍的情况,网络地址/端口转换器检查、修改包的IP地址和TCP/UDP端口信息,这样,更多的内部主机就可以同时使用一个公网IP地址。请参考RFC1631和RFC2993及RFC2663这三个文档了解更多的NAT分类和术语信息。另外,关于NAPT的分类和术语,RFC2663做了更多的定义。当一个内部网主机通过NAT打开一个“外出”的TCP或UDP会话时,NAPT分配给这个会话一个公网IP和端口,用来接收外网的响应的数据包,并经过转换通知内部网的主机。这样做的效果是,NAPT在 私有IP:私有端口 和公网IP:公网端口之间建立了一个端口绑定。端口绑定指定了NAPT将在这个会话的生存期内进行地址

4、转换任务。这中间存在一个这样的问题,如果P2P应用程序从内部网络的一个私有IP地址:端口对同时发出多条会话给不同的外网主机,那么NAT会怎样处理呢?这又可以分为锥形NAT (CONE NAT)与对称NAT (SYMMTRIC NAT)两大类来考虑: A.锥形NAT(为什么叫做锥形呢?请看以下图形,终端和外部服务器,都通过NAT分派的这个绑定地址对来传送信息,就象一个漏斗一样,筛选并传递信息) 当建立了一个 私有IP:端口-公网IP:端口 端口绑定之后,对于来自同一个私有IP:端口会话,锥形NAT服务器允许发起会话的应用程序 重复使用这个端口绑定,一直到这个会话结束才解除(端口绑定)。“同一性”

5、(即这个Client只使用这个端口)。而基础NATs和防火墙却不能修改经过的数据包端口号,它们可以看作是锥形NAT的精简版本。进一步分析可以将CONE NAT受限制锥形NAT (RESTRICT CONE) 与端口受限锥形NAT (PORT RESTRICT CONE) 三大类,以下是详细论述: 分为全双工锥形NAT (FULL CONE) ,1.全双工锥形NAT当内部主机发出一个“外出”的连接会话,就会创建了一个公网/私网 地址,一旦这个地址对被创建,全双工锥形NAT会接收随后任何外部端口传入这个公共端口地址的通信。因此,全双工锥形NAT有时候又被称为"混杂"NAT。2.

6、受限制锥形NAT受限制的锥形NAT会对传入的数据包进行筛选,当内部主机发出“外出”的会话时,NAT会记录这个外部主机的IP地址信息,所以,也只有这些有记录的外部IP地址,能够将信息传入到NAT内部,受限制的锥形NAT 有效的给防火墙提炼了筛选包的原则即限定只给那些已知的外部地址“传入”信息到NAT内部。3.端口受限锥形NAT端口受限制的锥形NAT,与受限制的锥形NAT不同的是:它同时记录了外部主机的IP地址和端口信息,端口受限制的锥形NAT给内部节点提供了同一级别的保护,在维持端口“同一性”过程中,将会丢弃对称NAT传回的信息。B.对称NAT对称NAT,与Cone NAT是大不相同的,并不对会

7、话进行端口绑定,而是分配一个全新的公网端口 给每一个新的会话。在TCP和UDP通信中,(到底是使用同一个端口,还是分配不同的端口给同一个应用程序),锥形NAT和对称NAT各有各的理由。当然锥形NAT在根据如何公平地将NAT接受的连接直达一个已创建的地址对上有更多的分类。这个分类一般应用在Udp通信(而不是Tcp通信上),因为NATs和防火墙阻止了试图无条件传入的TCP连接,除非明确设置NAT不这样做。三:NAT对session的处理以下分析NAPT是依据什么策略来判断是否要为一个请求发出的UDP数据包建立Session的.主要有一下几个策略: A. 源地址(内网IP地址)不同,忽略其它因素,

8、在NAPT上肯定对应不同的SessionB. 源地址(内网IP地址)相同,源端口不同,忽略其它的因素,则在NAPT上也肯定对应不同的SessionC. 源地址(内网IP地址)相同,源端口相同,目的地址(公网IP地址)相同,目的端口不同,则在NAPT上肯定对应同一个SessionD. 源地址(内网IP地址)相同,源端口相同,目的地址(公网IP地址)不同,忽略目的端口,则在NAPT上是如何处理Session的呢?四:完全解决方案以下针对四种SESSION与四种NAT的完全解决方案,为了方便将使用以下缩写形式:C代表 CONE NATS代表SYMMETRIC NAT,FC代表 FULL CONE N

9、AT,RC代表 RESTRICT CONE NAT,PC 代表 PORT RESTRICT CONE NAT.首先依据CLIENT (客户)端在NAT后 的个数不同可以分为两大类:TYPE ONE :一个在NAT后 + 一个在公网中.这种情况下可以分为两大类:A. S VS 公网:此种情况下,由于公网的地址在一个SESSION内是不变的,所以可以打洞是可以成功的.B. C VS 公网: 与上面类似,这种情口下打洞是可以成功的.TYPE TWO:两个客户都在NAT后面.这种情况下也可以细分为两大类:A. 其中一个NAT 是 S(SYMMETRIC NAT) 型的,既:S VS C或者是S VS

10、S .下面论证这种情口下按照常规打洞是行不通的,在常规打洞中,所有的客户首先登陆到一个服务器上去.服务器记录下每个客户的公网IP:端口,然后在打洞过程中就使用这个记录的值,然而对于S型的NAT来说,它并不绑定私网IP:端口和公网IP:端口的映射.所以在不同的SESSION中,NAT将会重新分配一对公网IP:端口.这样一来对于S型的NAT来说打洞的公网IP:端口与登记在服务器上的公网IP:端口是不同的.而且也没有办法将打洞的公网IP:端口通知到另一个位于NAT下的客户端, 所以打洞是不会成功的.然而如果另一个客户端是在公网时,打洞是可以的.前面已经论证了这种情况.这种情况下的解决方案是只能通过端

11、口预测来进行打洞,具体解决方法如下:例如(以两个都是S型的为例) NAT A 分配了它自己的UDP端口62000,用来保持 客户端A 与服务器S的通信会话, NAT B 也分配了31000端口,用来保持客户端B与服务器S 的通信会话。通过与 服务器S的对话,客户端A 和 客户端B都相互知道了对方所映射的真实IP和端口。 客户端A发出的消息送达B导致了NAT A打开了一个新的会话,并且我们希望NAT A将会指派62001端口给这个新的会话,因为62001是继62000后,NAT会自动指派给 从服务器S到客户端A之间的新会话的端口号;类似的,客户端B发出的消息送达A导致了 NAT B打开了一个新的

12、会话,并且我们希望 NAT B将会指派31001这个端口给新的会话;如果两个客户端都正确的猜测到了对方新会话被指派的端口号,那么这个 客户端A客户端B的双向连接就被打通了。其结果如下图所示:明显的,有许多因素会导致这个方法失败:如果这个预言的新端口(62001和31001) 恰好已经被一个不相关的会话所使用,那么NAT就会跳过这个端口号,这个连接就会宣告失败;如果两个NAT有时或者总是不按照顺序来生成新的端口号,那么这个方法也是行不通的。如果隐藏在NATA后的一个不同的客户端X(或者在NAT B后)打开了一个新的“外出”UDP 连接,并且无论这个连接的目的如何;只要这个动作发生在客户端A 建立

13、了与服务器S的连接之后,客户端A 与 客户端B 建立连接之前;那么这个无关的客户端X 就会趁人不备地“偷” 到这个我们渴望分配的端口。所以,这个方法变得如此脆弱而且不堪一击,只要任何一个NAT方包含以上碰到的问题,这个方法都不会奏效。在处于 cone NAT 系列的网络环境中这个方法还是实用的;如果有一方为 cone NAT 而另外一方为 symmetric NAT,那么应用程序就应该预先发现另外一方的 NAT 是什么类型,再做出正确的行为来处理通信,这样就增大了算法的复杂度,并且降低了在真实网络环境中的普适性。 最后,如果P2P的一方处在两级或者两级以上的NAT下面,并且这些NATS 接近这

14、个客户端是SYMMETRIC NAT的话,端口号预言是无效的!因此,并不推荐使用这个方法来写新的P2P应用程序,这也是历史的经验和教训!B. 两个都是CONE NAT型的.这种情况下可以分为六大类型:A: FC + FCB: FC + RCC: FC + PC D: PC + RC E: PC + PC F: RC + RC 虽然有这么多种情况,但是由于CONE NAT 的特性,所以还是很好办的,因为对于CONE NAT 来说,在同一个SESSION中它会绑定一对私网IP:端口和公网IP:端口的映射,所以它们打洞用的公网IP:端口与登记在服务器上的公网IP:端口是一致的,所以打洞是可以行的通的.综上所述,就已经完全的概括了所有类型的NAT之间的可能的通信情况了.并且都提供了可行的解决方案.五:对前一阶段的总结1.前一阶段使用

温馨提示

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

评论

0/150

提交评论