- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NAT 穿透技术的了解
NAT 穿透技术的了解
NAT 穿透技术的了解
2011年04月02日
NAT穿透的就是让位于不同内部地址的机器之间通信。
目前我知道的技术就是:
1、relaying 就是双方都和一个具有公有ip的server,S连接,然后通过S来进行转发,这是最可靠,但效率最低的方式。
2、UDP hole punching 就是UDP打洞技术。
3、TCP hole punching 就是TCP打洞技术。
以下内容转自:/wuqiubin/archive/2008/10/11/3 059151.aspx 最可靠但同时也是效率最低的p2p穿越NAT进行通信的方法是采用类似C/S方式的转发。假定两个节点
A和B每个节点都有向外的TCP或UDP连接,联入公共的已知服务器S,S的公网IP地址是1,
端口号是1234(如图2所示),每个客户端位于不同的私有内网中,并且它们的NAT设备妨碍了客户
端之间直接的p2p连接。做为对直连方案的替代方案,两个客户端可以利用公共的服务器S进行
消息的转发。例如,A为了将消息送给B,A只需将消息发给S,然后由S转发给B,这一过程将使用A与
B事先与S建立好的连接。
转发方式通常只能在双方客户端都连接到服务器的时候有效。这种方式的缺点在于,它假定服务
器的处理能力和网络带宽以及通信延迟都是理想的情况下,不会受到客户端个数的影响。但是,由于
没有其它的方法能够像转发方式那样,可以穿越现存的所有NAT设备,因此在构建高可靠性的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的消息,A开始向这些B的endpoint发送UDP数据包,
并且A会自动锁定第一个给出响应的B的endpoint。同理,当B收到由S发来的A的公网和内网endpoint
以后,也会开始向A的公网和内网的endpoint发送UDP数据包,并且自动锁定第一个得到A的回应的
endpoint。由于A与B的互相向对方发送UDP数据包的操作是异步的,所以A和B发送数据包的时间先后
并没有严格的时序要求。
下面我们就来看一下这三个角色之间是如何进行UDP打洞的。在这里我们分为三种具体情景来讨论:
第一种也是最简单的一种情景,两个客户端都位于同一个NAT设备后面,位于同一个内网中;
第二种也是最普遍的一种情景,两个客户端分别位于不同的NAT设备后面,分属不同的内网;
第三种是客户端位于两层NAT设备之后,通常最上层的NAT是由ISP网络提供商,第二层的NAT是
家用的NAT路由器之类的设备。
通常情况下由应用程序自身确定的网络物理层连接方式是很困难的,有时甚至是不可能的,即使是上述
的若干种情景下可以穿越NAT,也只是代表在一定时期内有效,而不是永久有效的。诸如STUN之类的网络
协议或许可以提供必要的NAT信息,但在遇到多层NAT设备的时候,通常这些信息也不是完全完整和有效的。
尽管如此,只要NAT设备的响应是合理的,在通常情况下打洞技术还是能够在应用程序对网络状况
一无所知的前提下自动适用于多数场合。(合理的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数据包能否被对方收到,这取决于当前的NAT是否支持发夹转换(hairpin转换,也就是同一台设备,不同端口之间的 UDP数据包能否到达
文档评论(0)