下载此文档

tcp实现p2p通信、tcp穿越nat的方法、tcp打洞(附源代码).doc


文档分类:IT计算机 | 页数:约13页 举报非法文档有奖
1/13
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/13 下载此文档
文档列表 文档介绍
TCP 实现 P2P 通信、 TCP 穿越 NAT 的方法、 TCP 打洞( 附源代码) ◆◆◆作者◆◆◆谢红伟· chrys · chrys@ · ◆◆◆日期◆◆◆ 2007-0 7 -2401: 34: 57 这个标题用了两个顿号三个名称, 其实说得是同一个东西, 只是网上有不同的说法罢了, 另外好像还有人叫 TCP 打孔(我的朋友小妞听说后问“要打孔啊,要不要我帮你去借个电钻过来啊? ”“~!·¥% ……·!”)。闲话少说,我们先看一下技术背景: 的迅速发展以及 IPv4 地址数量的限制使得网络地址翻译(work Address Trans2lation) 设备得到广泛应用。 NA T 设备允许处于同一 NA T 后的多台主机共享一个公网(本文将处于同一 NA T 后的网络称为私网,处于 NA T 前的网络称为公网) IP 地址。一个私网 IP地址通过 NAT 设备与公网的其他主机通信。公网和私网 IP 地址域,如下图所示: NAT-A 电脑 A-01 电脑 A-02 电脑 A-01 电脑 A-02 Server ( Web 、 FTP 、 POP3 、 SMTP 、 IIS 、 Database …) NAT-B 广域网与私网示意图一般来说都是由私网内主机(例如上图中“电脑 A-01 ”)主动发起连接,数据包经过 NAT 地址转换后送给公网上的服务器( 例如上图中的“ Server ”), 连接建立以后可双向传送数据, NAT 设备允许私网内主机主动向公网内主机发送数据, 但却禁止反方向的主动传递, 但在一些特殊的场合需要不同私网内的主机进行互联(例如 P2P 软件、网络会议、视频传输等), TCP 穿越 NAT 的问题必须解决。网上关于 UDP 穿越 NAT 的文章很多, 而且还有配套源代码,但是我个人认为 UDP 数据虽然速度快,但是没有保障,而且 NAT 为 UDP 准备的临时端口号有生命周期的限制,使用起来不够方便,在需要保证传输质量的应用上 TC P 连接还是首选(例如:文件传输)。网上也有不少关于 TCP 穿越 NAT (即 TCP 打洞) 的介绍文章, 但不幸我还没找到相关的源代码可以参考,我利用空余时间写了一个可以实现 TCP 穿越 NAT ,让不同的私网内主机建立直接的 TCP 通信的源代码。这里需要介绍一下 NAT 的类型: NA T 设备的类型对于 TC P穿越 NAT, 有着十分重要的影响, 根据端口映射方式,NA T 可分为如下 4类,前3种 NAT 类型可统称为 cone 类型。(1) 全克隆( Full Cone) : NAT 把所有来自相同内部 IP 地址和端口的请求映射到相同的外部 IP 地址和端口。任何一个外部主机均可通过该映射发送 IP 包到该内部主机。(2) 限制性克隆(Restricted Cone) : NA T 把所有来自相同内部IP 地址和端口的请求映射到相同的外部 IP 地址和端口。但是, 只有当内部主机先给 IP 地址为 X 的外部主机发送 IP包, 该外部主机才能向该内部主机发送 IP 包。(3) 端口限制性克隆( Port Restricted Cone) : 端口限制性克隆与限制性克隆类似, 只是多了端口号的限制, 即只有内部主机先向 IP 地址为 X, 端口号为 P 的外部主机发送 1个 IP包, 该外部主机才能够把源端口号为 P的 IP 包发送给该内部主机。(4) 对称式 NAT ( Symmetric NAT) : 这种类型的 NAT 与上述 3 种类型的不同, 在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, NAT 对该内部主机的映射会有所不同。对称式 NAT 不保证所有会话中的私有地址和公开 IP 之间绑定的一致性。相反, 它为每个新的会话分配一个新的端口号。我们先假设一下: 有一个服务器S 在公网上有一个 IP, 两个私网分别由 NAT- A和 NAT- B 连接到公网, NAT-A 后面有一台客户端 A, NAT-B 后面有一台客户端 B ,现在,我们需要借助 S将A和B 建立直接的 TCP 连接,即由 B向A 打一个洞,让 A 可以沿这个洞直接连接到 B 主机,就好像 NAT-B 不存在一样。实现过程如下(请参照源代码): 1、S 启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦听。 2、A和B 分别与 S 的【主连接】保持联系。 3、当A 需要和 B 建立直接的 TCP 连接时

tcp实现p2p通信、tcp穿越nat的方法、tcp打洞(附源代码) 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人chuandao1680
  • 文件大小0 KB
  • 时间2016-04-01