NAT 穿透技术的了解.doc
《NAT 穿透技术的了解.doc》由会员分享,可在线阅读,更多相关《NAT 穿透技术的了解.doc(25页珍藏版)》请在三一办公上搜索。
1、NAT 穿透技术的了解NAT 穿透技术的了解 2011年04月02日NAT穿透的就是让位于不同内部地址的机器之间通信。 目前我知道的技术就是: 1、relaying 就是双方都和一个具有公有ip的server,S连接,然后通过S来进行转发,这是最可靠,但效率最低的方式。 2、UDP hole punching 就是UDP打洞技术。 3、TCP hole punching 就是TCP打洞技术。 以下内容转自: 059151.aspx 最可靠但同时也是效率最低的p2p穿越NAT进行通信的方法是采用类似C/S方式的转发。假定两个节点 A和B每个节点都有向外的TCP或UDP连接,联入公共的已知服务器S
2、,S的公网IP地址是18.181.0.31, 端口号是1234(如图2所示),每个客户端位于不同的私有内网中,并且它们的NAT设备妨碍了客户 端之间直接的p2p连接。做为对直连方案的替代方案,两个客户端可以利用公共的服务器S进行 消息的转发。例如,A为了将消息送给B,A只需将消息发给S,然后由S转发给B,这一过程将使用A与 B事先与S建立好的连接。 转发方式通常只能在双方客户端都连接到服务器的时候有效。这种方式的缺点在于,它假定服务 器的处理能力和网络带宽以及通信延迟都是理想的情况下,不会受到客户端个数的影响。但是,由于 没有其它的方法能够像转发方式那样,可以穿越现存的所有NAT设备,因此在构
3、建高可靠性的p2p系统 的时候,通过服务器转发的方式依旧是一个非常有用的保证系统可靠性的方法。TURN协议定义了如何 实现安全的转发方式。 假定A要发起对B的直接连接,打洞过程如下所示: (endpoint指ip地址和端口的配对) (1)A最初不知道如何向B发起连接,于是A向服务器S发送消息,请求S帮助建立与B的UDP连接。 (2)S将含有B的公网和内网的endpoint发给A,同时,S将含有A的公网和内网的endpoint的用于请求 连接的消息也发给B。一旦这些消息顺利到达,A与B就都知道了对方的公网和内网的endpoint。 (3)当A收到由S发来的包含B的公网和内网endpoint的消息
4、,A开始向这些B的endpoint发送UDP数据包, 并且A会自动锁定第一个给出响应的B的endpoint。同理,当B收到由S发来的A的公网和内网endpoint 以后,也会开始向A的公网和内网的endpoint发送UDP数据包,并且自动锁定第一个得到A的回应的 endpoint。由于A与B的互相向对方发送UDP数据包的操作是异步的,所以A和B发送数据包的时间先后 并没有严格的时序要求。 下面我们就来看一下这三个角色之间是如何进行UDP打洞的。在这里我们分为三种具体情景来讨论: 第一种也是最简单的一种情景,两个客户端都位于同一个NAT设备后面,位于同一个内网中; 第二种也是最普遍的一种情景,两
5、个客户端分别位于不同的NAT设备后面,分属不同的内网; 第三种是客户端位于两层NAT设备之后,通常最上层的NAT是由ISP网络提供商,第二层的NAT是 家用的NAT路由器之类的设备。 通常情况下由应用程序自身确定的网络物理层连接方式是很困难的,有时甚至是不可能的,即使是上述 的若干种情景下可以穿越NAT,也只是代表在一定时期内有效,而不是永久有效的。诸如STUN之类的网络 协议或许可以提供必要的NAT信息,但在遇到多层NAT设备的时候,通常这些信息也不是完全完整和有效的。 尽管如此,只要NAT设备的响应是合理的,在通常情况下打洞技术还是能够在应用程序对网络状况 一无所知的前提下自动适用于多数场
6、合。(合理的NAT响应将在第五章中详细讨论) 首先假设两个客户端位于同一个NAT设备后面,并且位于相同的内网(相同的私有IP地址域)如图4所示。 A与S建立了UDP连接,经过NAT转换后,A的公网端口被映射为62000。B同样与S建立了UDP连接,公网端口 映射为62005。 假设A想通过服务器S做为介绍人,发起对B的连接。A向S发出消息请求与B进行连接。S将B的公网endpoint (即公网ip和 port)以及内网endpoint(即内网ip和port)发给A,同时把A的公网、内网的endpoints发给B。由A和B发往对方公网 endpoint的UDP数据包能否被对方收到,这取决于当前的
7、NAT是否支持发夹转换(hairpin转换,也就是同一台设备,不同端口之间的 UDP数据包能否到达,详见3.5节)。但是A与B往 对方内网endpoint发送的UDP数据包是一定可以到达的,无论如何,内网数据包不需要路由,并且速度 更快。A与B有很大的可能性采用内网的endpoint进行常规的p2p通信。 假定NAT设备支持发夹转换,应用程序也忽略由内网endpoint的连接,那么A、B会采用公网endpoint 做为p2p通信的连接,这势必会造成数据包无谓地经过NAT设备,这是一种对资源的浪费。我们会在 第六节讨论这种情况,毕竟支持发夹转换的NAT设备还远没有对打洞技术支持的NAT设备多。
8、就目前的网络情况而言,应用程序在打洞的时候,最好还是把公网endpoint和内网endpoint都 实验一下。 假定A与B在不同的NAT设备后面,分属不同的内网,如图5所示。A与B都经由各自的NAT设备与 服务器S建立了UDP连接,A与B的本地端口号均为4321,服务器S的公网端口号为1234。在向外 session中,A的公网IP被映射为155.99.25.11,公网端口为62000,B的公网IP被映射为 138.76.29.7,公网端口为31000。 如下所示: 客户端A- 本地IP:10.0.0.1,本地端口:4321,公网IP:155.99.25.11,公网端口:62000 客户端B-
9、 本地IP:10.1.1.3,本地端口:4321,公网IP:138.76.29.7,公网端口:31000 在A向服务器S发送的登陆消息体中,会包含A的内网endpoint信息,即10.0.0.1:4321; 服务器S会记录下A的内网endpoint,同时会把自己观察到的A的公网endpoint记录下来, 即155.99.25.11:62000。同理,服务器S会记录下B的内网endpoint,10.1.1.3:4321和 由S观察到的B的公网endpoint,138.76.29.7:31000。无论A与B二者任何一方向S发送 p2p连接请求,服务器都会将其记录下来的上述的公网、内网endpoin
10、t发送给A、B。 由于A、B分属不同的内网,它们彼此的内网endpoint无法在公网中路由,所以发往各自 内网endpoint的UDP数据包会发送到错误的主机或者根本不存在的主机。因此应用程序 对于收到的消息必须经过授权和过滤,只有通过授权的的消息才能是从对方的endpoint 发出来的,例如,可以在消息中加入对方的程序名称、加密算法,或者至少是一个双方都 从服务器S上的预先得到的随机数字。 现在假定A的第一个消息将发往B的公网endpoint,如图5所示。该消息途经A的NAT设备, 并在该设备上生成了一个向外的session。新的session源endpoint是10.0.0.1:4321
11、该endpoint和A与服务器S的建立连接的时候NAT生成的源endpoint一样,但它的目的 endpoint不同。如果A的NAT设备给出的响应是友好的,那么A的NAT设备将保留A的 内网endpoint,并且所有来自A的源endpoint(10.0.0.1:4321)的数据包都沿用 A与S事先建立起来的session,公网endpoint均为(155.99.25.11:62000)。 A向B的公网endpoint发送消息的过程就是打洞的过程,从A的内网的角度来看应为从 (10.0.0.1:4321)发往(138.76.29.7:31000),从A的在其NAT设备上建立的session 来看
12、,是从(155.99.25.11:62000)发到(138.76.29.7:31000)。 如果A发给B的公网endpoint的消息包在B向A发送消息包之前到达B的NAT设备,B的NAT 会认为A发过来的消息是未经授权的公网消息,会丢弃掉该数据包。B发往A的消息包 根上述的过程一样,会在B的NAT上建立一个(10.1.1.3:4321,155.99.25.11:62000) 的session(通常也会沿用B与S连接时建立的session,只是该session现在不光可以 接受由S发给B的消息,还可以接受从A的NAT设备-155.99.25.11:6200发来的消息) 一旦A与B都向对方的NAT
13、在公网上的endpoint发送了数据包,就打开了A与B之间的洞, A与B向对方的公网endpoint发送数据,等效为向对方的客户端直接发送UDP数据包了。 一旦应用程序确认已经可以通过往对方的公网endpoint发送数据包的方式让数据包到达 NAT后面的目的应用程序,程序会自动停止继续发送用于打洞的数据包,转而开始 真正的p2p数据传输。 有的网络拓扑结构包含了多个NAT设备,如果没有掌握该拓扑结构的详细信息,两个客户端 之间是无法建立最优化的p2p路由的。现在我们来讨论最后一种情况,如图6所示。假定 NAT C是由ISP(Internet Service Provider)提供的工业级的NA
14、T设备,NAT C提供将多个 下属的用户NAT或用户节点映射到有限的几个公网IP的服务,NAT A和NAT B做为NAT C的内网 节点将把用户的家庭网络或内部网络接入NAT C的内网,然后用户的内部网络就可以经由NAT C 访问公网了。从这种拓扑结构上来看,只有服务器S与NAT C是真正拥有公网可路由IP地址的 设备,而NAT A和NAT B所使用的公网IP地址,实际上是由ISP服务提供商设定的(相对于NAT C 而言)内网地址(本位的后续部分我把这个由ISP提供的内网地址相对于NAT A和NAT B称之为 伪公网地址),同理隶属于NAT A与NAT B的客户端,相对与NAT A,NAT B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NAT 穿透技术的了解 穿透 技术 了解
链接地址:https://www.31ppt.com/p-2401676.html