不同nat后的主机间建立tcp连接

上传人:第*** 文档编号:34425470 上传时间:2018-02-24 格式:DOCX 页数:13 大小:70.67KB
返回 下载 相关 举报
不同nat后的主机间建立tcp连接_第1页
第1页 / 共13页
不同nat后的主机间建立tcp连接_第2页
第2页 / 共13页
不同nat后的主机间建立tcp连接_第3页
第3页 / 共13页
不同nat后的主机间建立tcp连接_第4页
第4页 / 共13页
不同nat后的主机间建立tcp连接_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《不同nat后的主机间建立tcp连接》由会员分享,可在线阅读,更多相关《不同nat后的主机间建立tcp连接(13页珍藏版)》请在金锄头文库上搜索。

1、不同 NAT后的主机间建立 TCP连接 译(初稿):dragonimpfzu 2005-6-14 译文来源:http:/ 摘要 防火墙和网络地址转换(NAT)设备正变得越来越流行了,同时他们也对使用点对点年协议建立连接造成一个非常大的问题。一些 NAT设备抑制了来自外部网络到内部网络的 TCP请求。这篇文章的目的是提出一个能够在两个 NAT设备内部的主机间建立直接的 TCP连接的方法,同时又尽量不依赖于第三方主机。我们已经在两个普通的硬件条件下实现了这个功能。我们能够为两个不同典型的 NAT后面的主机建立 TCP连接。一旦建立了这个连接,应用程序就可以跟原来的 TCP一样调用这个连接,而不需要

2、任何其他的帮助。 第一章 前言 NAT技术的出现从某种意义上解决了 IPV4的 32位地址不足的问题,它同时也对外隐藏了其内部网络的结构。NAT 设备把内部网络跟外部网络隔离开来,并且可以让内部的主机可以使用一个独立的 IP地址,并且可以为每个连接动态翻译这些地址。此外,但内部主机跟外部主机通信时,NAT 设备必须为它分配一个唯一的端口号并连接到同样的地址和端口(目标主机)。NAT 的另一个特性是它只允许从内部发起的连接的请求,它拒绝了所有不是由内部发起的来到外部的连接,因为它根本不知道要把这个连接转发给内部的哪台主机。 P2P网络已经日益流行。尽管 p2p文件共享软件引发了很多争夺站,比如

3、nepster 和 kazaa 之间,但是还是有很多有用的并且合法的 P2P软件存在着,比如即时消息共享和文件共享。另一个 P2P程序是一个叫 OpenHash的项目,它为公众提供了一个可用的分布式的哈希表,很多应用程序都在它的基础上开发了出来,比如很多的即时通信软件和可靠的 CD标签库。 不幸的是,两个处于不同 NAT后面的主机无法建立 TCP连接因为各自的 NAT都只允许外出的连接。NAT 销售商在已经为 NAT设备开发了端口映射的功能来解决这个问题。NAT 管理员可以使用端口映射来为那些需要接受那些不是从内部发起的连接请求的主机指定端口。但是这种解决方法根据情况还需要很多其他的支持。当有

4、的服务器需要动态的分配端口的时候,这种方法就很受限了。再说了,如果一般的用户没有权限或者不懂得如果进入 NAT设备为他们指定端口映射,那这种方法就一点用处也没有了。 P2p协议对此已经阐述了记者通用的方法。第一个可被 p2p协议使用技术是:那些本来不能当作服务器的程序收到了来自请求者的消息后主动向请求者发起连接。这种情况只适用于只有一方在 NAT后面的情况。第二种通用的方法是通过两个主机都可以连接得到得代理路由数据,但是这种方法对于两个NAT后面的主机来说效率太低了,因为所有的数据都必须经过代理。其他相关的技术将在第三部分讨论。 我们努力的目标是找出一个可以让 NAT后面的两个主机直接建立 T

5、CP连接的解决方案。特别地,我们已经开发出几种方案可以用于那些支持端口分配地NAT和那些支持 LSR路由的网络。我们的方法是通过第三方提供建立直接连接需要的信息。根据不同的环境,我们开发了几种不同的方案可以在可以预测和适当的时间的情况下建立连接。这些技巧都需要把数据包的 TTL值设置得很小,并且捕捉和分析外传得数据包以提供信息给第三方“媒人”。并且人为地向网络发送一些数据包用来检测 NAT所分配地端口。补充一点,如果端口分配是随机地,我们就使用一种叫“birthday paradox”的方法减少检测的次数。这种方法需要的空间是直接的穷举所使用的空间的开方。 第二章 NAT 的类型 NAT必须考

6、虑路由器的三个重要的特性:透明的地址分配、透明路由、ICMP 包负载解析。地址分配是指在一个网络会话开始的时候为内部不可以路由的地址建立一个到可路由地址的映射。NAT 必须为原地址和目标地址都进行这样的地址分配。NAT 的地址分配有静态的很动态的方式。静态的地址分配必须预先在 NAT中定义好,就比如每个会话都指派一对 映射到某对 。相反地,动态的映射在每次会话的时候才定义的,它并不保证以后的每次会话都使用相同的映射。 一个相似的特性 NAT必须实现的是透明路由。正如上面提到的,NAT 是一种特殊的路由它在它所路由的数据包中翻译地址。这种转换基于数据流来改变相应的 IP地址和端口。其次,这种转换

7、必须是设备透明的,这样才保证对现有网络的兼容性。一个不是很明显的要求是,NAT 必须保证内部网络的数据包不被发送到外部网络去。 最后一个 NAT必须实现的特性是当收到 ICMP错误包的时候,NAT 使用正常的数据包做出同样的转换。当在网络中发生错误时,比如当 TTL过期了,一般地,发送人会收到一个 ICMP错误包。ICMP 错误包还包含了尝试错误的数据包,这样发送者就可以断定是那个数据包发生了错误。如果这些错误是从NAT外部产生地,在数据包头部的地址将会被 NAT分配的外部地址所代替,而不是内部地址。因此,NAT 还是有必要跟对 ICMP错误一样,对在 ICMP错误包中包含的数据包进行一个反向

8、的转换。 虽然所有的 NAT都实现了这三个特性,但是根据他们的特点和他们所支持的网络环境,他们还可以进入分类。NAT 可以分为四种:Two-way NATs,Twice NATs, Multi-homed NATs, 和 Traditional NATs。Two-way NATs,一般也叫双向 NAT(Bidirectional NATs),在外部地址和内部地址间执行双向转换,尽管它个数据包只转换一个 IP地址。这种 NAT是唯一一种允许从外部发起的连接请求。相反地,Twice NATs,它每路由一个数据包都对内部和外部的地址进行转换。这种 NAT用在那些外部地址和内部地址交叠的情况下。Mul

9、ti-homed NATs 对于 Twice NATs来说,多了一个功能,它可以允许在内部使用不能路由的地址并且还可以有多个连接到外部网络。之所以 Multi-homed NATs能够这样做,是因为它跟另一个保持通信以确定他们的地址映射是不变的。Multi-homed NATs 允许大量的内部网络和增加冗余来允许多个连接到 Internet。到目前为止,最常用的 NAT是传统 NAT(Traditional NATs),它可以分为基础 NAT(Basic NATs)和 NATP(Network Address Port Translation)两种。 基本 NAT和 NATP的区别它所能分配给

10、内部地址的外部地址是否比内部地址多。一个 Simple NAT用在那种所能分配的外部地址跟内部地址的数量相等或者更多的时候。这种 NAT进行端口分配,因为每个内部地址都可以分配到一个唯一的外部地址。NATPS 用于当 NAT所能用来分配的外部地址的数量比内部地址少的时候,最常见的一种情况是很多的内部机器共享一个外部 IP地址。在这种情况下,NAT 必须分配端口来补充 IP用以消除网络传输的不明确的几乎。NAT 和 NATP共同的地方就是他们都阻止外来的连接,并且都可以进行静态和动态的地址分配。 NAPT是传统 NAT中最普遍的一种,因为它允许很多的内部连接共享很少量的外部网络地址。大部分为小型

11、网络设计的商业 NAT都是 NAPT。我们选择 NATP作为我们研究的对象就是因为它的流行和它通过不允许外来连接限制了 P2P协议。后面我们就把 NATPs简称为 NATs了。 我们首先要做的是得到商业防火墙以确定他们的特性跟资料上记载的是否一样。我们使用 NatCheck这个程序对三个常用的 NAT设备进行了测试:Netgear MR814,Linksys BEFSR41, 和 Linksys BEFW11S4。三个 NAT都有相似的行为:他们对 UDP和 TCP都进行了一致的转换,这表明在内部主机使用 的时候,NAT 是否直接将 映射到 ,而不管它连接出去的目标主机 是多少。一致转换是静态

12、 NAT与动态 NAT截然不同的一个特点,因为这不只是跟内部主机使用的地址有关,而且还跟端口有关。RFC3002明确指出要支持一致转换。没有一个 NAT支持环路转换,不管是 TCP还是 UDP,这表明 NAT是否可以正确的处理两个只知道对方外部地址的内部主机之间的连接。在我们的项目中,我们假设两个主机是在不同的 NAT后面的,所以这个测试跟我们的目标是无关的。最后,所有的 NAT都提供了对非主动请求的外来 TCP和 UDP包都进行过滤,这个测试可以表明 NAT是否预防非主动恳求的外来包进入到内部网络。非主动请求过滤发生在除了 Two-way NAT之外的所有 NAT中,这也是在不同 NAT后面

13、的主机建立 P2P连接最主要的障碍了。 对我有用0 丢个板砖0 引用 举报 管理 TOP回复次数:15 weljin (weljin) 等级:#1楼 得分:0 回复于:2006-08-22 11:26:42第三章 相关研究工作 为了解决 NAT给很多协议带来的困难,一种 MIDCOM的架构被提了出来。MIDCOM 是一种可以允许 NAT或者防火墙后面的用户根据需要改变 NAT行为的而允许连接的一种协议。这个系统虽然在某些情况下是适用的,当它却不能保证每个时候都可以。在那些用户没有办法控制 NAT的情况下,这种方法对于 P2P的连接还是行不通的。很多时候 NAT或者防火墙后面的用户通过代理服务器

14、进行连接。一种商业的代理解决方法是 Hopster提供的,Hopsetr 的代理在连接方本地以隧道级别的传输在本地运行,它通过 HTTPS连接到 Hopster自己的机器。但是,因为 Hopster的代理需要所有的传输都经过他们的机器,所有他们的方法跟我们的比起来就显得低效了,具体见第五章。 为了能够进行直接的 P2P连接,出现了针对 UDP的解决方法。UDP 打洞技术允许在有限的范围内建立连接。STUN(The Simple Traversal of User Datagram Protocol through Network Address Translators)协议实现了一种打洞技术可

15、以在有限的情况下允许对 NAT行为进行自动检测然后建立 UDP连接。在 UDP打洞技术中,NAT 分配的外部端口被发送给协助直接连接的第三方。在 NAT后面的双方都向对方的外部端口发送一个 UDP包,这样就在 NAT上面创建了端口映射,双方就此可以建立连接。一旦连接建立,就可以进行直接的 UDP通信了。在UDP打洞技术可以成功的情况下,我们在这篇文章中所用的有的技术也同样适用。建立 TCP连接比 UDP连接更有优势。首先,UDP 连接不能够依赖建立好的连接,就是不能够持久连接。UDP 是无连接的并且没有对明确的通信。一般地,NAT 见了的端口映射如果一段时间不活动后就是过期。为了保持 UDP端口映射,必须每隔一段时间就发送 UDP包,就算没有数据的时候,只有这样才能保持 UDP通信正常。第二,很多防火墙都配置成拒绝任何的外来 UDP连接。最后,一个单纯的 TCP连接的实现更直观,并且现有的代码简单得修改就可以使用我们的技术。 Walfish et al.指出,采用间接得服务可以提供 NAT或者防火墙后面主机之间得连通性,通过在两主机向间接服务器打开一个连接,并且服务器在他们之间传输所有得通信,在这篇文章中我们会完成一个不需要这样得间接服务器也能建立起这样得连接。 第四章 问题陈述和假设 假设两个主机在不同的 N

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号