没有合适的资源?快使用搜索试试~ 我知道了~
UDPTCP穿越NAT的P2P通信方法研究
需积分: 16 8 下载量 68 浏览量
2016-04-25
10:35:11
上传
评论
收藏 550KB PDF 举报
温馨提示
试读
11页
网络穿越NAT的资料,比较实用,值得研究
资源推荐
资源详情
资源评论
UDP/TCP 穿越 NAT 的 P2P 通信方法研究(UDP/TCP 打洞 H
ole Punching)
内容概述:在 p2p 通信领域中,由 NAT(Network Address Translation,网络地址转换)引
起的问题已经众所周知了,它会导致在 NAT 内部的 p2p 客户端在无论以何种有效的公网 ip
都无法访问的问题。虽然目前已经发展出多种穿越 NAT 的技术,但相关的技术文档却很少,
用来证明这些技术的稳定性和优点的实际数据更少。本文的目的在于描述和分析在实际中运
用得最广泛、最可靠同时也是最简单的一种 NAT 穿越技术,该技术通常被称为“打洞”技术。
目前,“打洞”技术已经在 UDP 通信领域中得到了广泛的理解和应用,在此,也将讨论如何
利用它实现可靠的 p2p 的 TCP 流通信。在收集了大量的“打洞”技术可以穿越的 NAT 设备和
网络的数据以后,我们发现 82%的已测 NAT 设备支持 UDP 形式的“打洞”穿越,64%的已
测 NAT 设备支持 TCP 流形式的“打洞”穿越。由于重量级 p2p 应用程序(如,VOIP、BT、在
线游戏等)的用户需求量持续上升,并且该事实也已经引起了 NAT 设备生产厂商的广泛关注,
因此,我们认为未来会有越来越多的 NAT 设备提供对“打洞”穿越技术的支持。
1、介绍
用户量高速增长以及大量安全问题的巨大压力迫使 Internet 技术不断向前发展,但是这些新
兴的技术很大程度地增加了应用程序开发的成本和复杂性。Internet 最初的地址体系是每个
节点有一个唯一不变的全局地址,可以通过该地址直接与任何其它的节点进行通信,而现如
今,该地址体系已经被新的实际上广泛使用的地址体系所替换,新的地址体系是由全局地址
域和通过 NAT 接入全局地址域的大量私有地址域组成。在新的地址体系中(如图 1 所示),
只有在 “main”全局地址域中的节点可以在网络中很容易地与任何其它的拥有全局地址的节
点通信,因为该节点拥有全局的、唯一的、可路由的地址。在私有网络中的节点可以与在同
一个私有网络中的其它节点进行通信,并且在通常情况下可以向全局地址中的某个“著名”的
节点发起 TCP 连接或发送 UDP 数据包。NAT 设备在此扮演的角色就是为从内网向公网发
起的连接的节点分配临时的转发 session,将来自内网的数据包的地址和端口转换为公网的
地址和端口,将来自公网的数据包的地址和端口转换为内网的端口和地址,同时 NAT 将屏
蔽所有未经授权的来自公网的数据包。
新的 Internet 地址体系非常适合于“客户端/服务器”这样的通信模式,一个典型的 C/S 通信模
式是:客户端在内网(私有地址域),服务器在公网(全局地址域),通过 NAT 将内网和
公网连接起来。这种地址体系使得在不同内网(私有地址域)中的两个节点很难直接通信,
而这恰恰是 p2p 应用 (如,电话会议或在线游戏)中最基本的要求。很显然,我们需要一种
方法即使在 NAT 设备存在的前提下,仍然能够无障碍地实现 p2p 通信。
在不同内网的两个节点之间建立 p2p 连接的最有效的方法就是“打洞”。该技术在基于 UDP
的应用程序中得到了广泛的应用,同样的,该技术也可以用于基于 TCP 的应用程序。有趣
的是,与“打洞”字面上的意思刚好相反,该技术不会影响到内网的安全。事实上,“打洞”技
术使得 p2p 软件的绝大部分功能都在 NAT 设备默认的安全策略的控制之下,这些都由 NA
T 设备建立的 session 来管理。本文阐述了适用于 UDP 和 TCP 的“打洞”技术,并详细描述
了重要“打洞”过程中,应用程序和 NAT 设备之间的行为。
不幸的是,由于 NAT 设备的响应和行为不是标准的,所以没有任何技术可以穿越现有的所
有 NAT 设备。本文提供了一些在现有 NAT 设备上进行“打洞”的实验结果。我们收集的数据
来自于互联网上使用了“NAT Check”工具并在大量不同生产厂商的 NAT 设备上进行“打洞”
实验的用户。由于数据是来自于一个叫做“self-selecting”的用户社区,或许不会完全代表在
Internet 上真正部署和使用的 NAT 设备,但是结果无论如何还是很令人兴奋的。
在做基本的“打洞”操作评估的时候,我们应该指出在现有的 NAT 设备“打洞”的复杂度上,不
同的复杂度会有不同的结果。但目前我们把讨论的重点集中于开发最简单的,可以应用于任
何网络拓扑结构的、稳定的、有正确 NAT 响应的 NAT 设备上的“打洞”技术。我们有意避免
使用一些“聪明的小把戏”通过欺骗某些 NAT 设备来达到短期内穿越较多的 NAT 设备,但从
长期来看会引起网络未知错误的技术。
尽管引入 IPv6 会极大地增加互联网的地址空间,从而减少对于 NAT 设备的需求量,但短期
内 IPv6 确实增加了对 NAT 设备的需求量,因为 NAT 设备本身提供了一种方便的方法进行
IPv4 与 IPv6 地址域转换。另外私有网络上建立匿名和加密访问节点也有利于组织机构的安
全性以及不受外界干扰,这些都意味着 NAT 还将存在相当长的一段时间。同样,防火墙技
术也不会由于有了足够的 ip 地址而消失,IPv6 的防火墙仍然会默认丢掉所有未经授权的数
据包,仍然可以让在 IPv6 环境下工作的应用程序“打洞”。
本文接下来的部分按照如下的方式组织:第二章介绍基本的 NAT 穿越概念和术语;第三章
介绍 UDP“打洞”过程;第四章介绍 TCP“打洞”过程;第五章介绍支持“打洞”的 NAT 设备必
须具有那些特性;第六章介绍我们在目前流行的 NAT 设备上的“打洞”实验结果;第七章讨
论相关的网络问题;第八章全文总结以及结束语。
2、基本概念本节介绍了本文使用到的基本的 NAT 术语,着重描述了适用于 UDP 和 TCP
两种协议的通用的 NAT 穿越技术。
2.1、NAT 术语
本文绝大部分术语和分类来自于 RFC 2663 定义,另外一些来自于较新的 RFC 3489 中的
定义。
理解 session 是很重要的。一个 TCP 或 UDP 的 session endpoint 是由一个 IP 地址,端口
号组成,每个 session 是由两个 session endpoint 构成。从内网节点的角度来看,一个 se
ssion 由 4 部分组成分别为:本地 IP,本地端口,远端 IP,远端端口。session 的方向通常
代表了数据包的初始流动的方向;对于 TCP 来说就是 SYN 包的流向,对于 UDP 来说就是
第一个用户数据包的流向。
NAT 有很多种,但最普遍的一种类型叫做“传统”NAT,或者“向外”NAT。他们在内网和公网
之间提供了一个“不对称”桥的映射。“向外”NAT 在默认情况下只允许向外的 session 穿越 N
AT:
从外向内的的数据包都会被丢弃掉,除非 NAT 设备事先已经定义了这些从外向内的数据包
是已存在的内网 session 的一部分。
“外向”NAT 会造成 p2p 协议的混乱,因为当 p2p 的双方决定向在不同 NAT 后面的对方开始
通信的时候,无论哪一方试图初始化一个 session,另一方的 NAT 都会拒绝这个请求。NA
T 穿越的核心思想就是让 p2p 的双方的 NAT 看上去都是“向外”的 NAT。
“向外”NAT 有两种类型:(1)“基础”NAT,该 NAT 只转换 IP 地址,不转换端口号。(2)
NAPT(Network Address/Port Translation)NAPT 转换整个 session endpoints。由于 NAP
T 允许内网的多个节点通过共享的方式使用同一个的公共的 IP 地址,因此,支持 NAPT 的
NAT 设备才会越来越多。尽管本文通篇讨论的内容都是基于支持 NAPT 的 NAT 设备的,但
这些规律和技术同样适用于“基础”NAT。
2.2 转发方式
最可靠但同时也是效率最低的 p2p 穿越 NAT 进行通信的方法是采用类似 C/S 方式的转发。
假定两个节点 A 和 B 每个节点都有向外的 TCP 或 UDP 连接,联入公共的已知服务器 S,
S 的公网 IP 地址是 18.181.0.31,端口号是 1234(如图 2 所示),每个客户端位于不同的私
有内网中,并且它们的 NAT 设备妨碍了客户端之间直接的 p2p 连接。做为对直连方案的替
代方案,两个客户端可以利用公共的服务器 S 进行消息的转发。例如,A 为了将消息送给
B,A 只需将消息发给 S,然后由 S 转发给 B,这一过程将使用 A 与 B 事先与 S 建立好的
连接。
剩余10页未读,继续阅读
资源评论
bear2005
- 粉丝: 1
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功