P2P网络技术概览与实现原理.doc

上传人:sk****8 文档编号:3534395 上传时间:2019-06-02 格式:DOC 页数:2 大小:33.50KB
下载 相关 举报
P2P网络技术概览与实现原理.doc_第1页
第1页 / 共2页
P2P网络技术概览与实现原理.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、穿越 NAT 的意义: NAT 是为了节省 IP 地址而设计的,但它隐藏了内网机器的地址, “意外” 起到了安全的作用。对外不可见,不透明的内部网络也与互联网的“公平”应用, “相互共享”的思想所不容,尤其是 P2P 网络中“ 相互服务 ”的宗旨,所以穿越 NAT,让众多内部网络的机器也参与到P2P 网络中的大集体中来,一直是 P2P 开发者的所希望的。穿越 NAT 需要借助外部的支持,说白了就是“内外勾结” ,骗过 NAT。很多 P2P 网络成功地实现了这一目标,但还是有一些“遗憾”- 并非所有的情况下都可以。由于客户端是主动登录 P2P 网络才可穿越,所以 P2P的方式也没有违背企业的内部

2、管理原则,毕竟“自由世界”的加入都是自觉自愿的。NAT 原理:NAT(Network Address Translation)网络地址转换/ 网络地址翻译。工作原理:NAT 主要的通过对数据包头的地址替换来完成内网计算机访问外网服务的。当内部机器要访问外部网络时,NAT 设备把内部的 IP1 与端口号 1(网络层地址与传输层地址),转换成 NAT 的外部 IP2 与新的端口号 2,再送给外部网络,数据返回时,再把目的为IP2:端口 2 的数据包替换为 IP1:端口 1,送给内网机器。若通讯协议的内容中有 IP 地址的传递,如 FTP 协议,NAT 在翻译时还要注意数据包内涉及协议地址交互的地方

3、也要替换,否则协议就会出现地址混乱。在 NAT 设备中维护了这个要替换地址的映射表,并根据内部计算机的通讯需求维护该表。外部网络来数据包能否进入 NAT,主要是看是否已经有可映射的表项,若没有就会丢弃。NAT 的外部公网地址可以是一个 IP,也可以是一个网段,形成地址池。 NAT 还可以把某个外网地址直接影射给内网的某个服务器,让外网的用户可以直接访问到这台服务器。NAT 的工作的隐藏内网的机器,但允许内网主动打开到外网的通讯“通道” ,也就是建立映射表项。NAT 给 P2P 带来的问题是:NAT 只允许单方面发起连接,通讯的双方不是平等的,P2P 网络的基础有了问题,具体的表现为:内网主机

4、IP 是私有的,外部主机看不到,也无法主动发起连接即使知道了内网 IP,但 NAT 会丢弃没有在影射表的数据包内网主机可以作为客户端访问外网,但不能作为服务器提供服务当两个主机都位于各自的 NAT 之后,要实现 P2P 的连接,就不仅是谁主动的问题,而是如何解决在两个 NAT 上同时有对方映射表项的问题。STUN 协议(IETF RFC 3489):STUN 协议是一种通道协议,可以作为正式通讯前的通路建立,它采用的是用户终端干预的一种方法,可以解决应用协议内部传递 IP 地址给 NAT 带来的麻烦。用户通过其他方法得到其地址对应在 NAT 出口上的对外地址,然后在报文负载中所描述的地址信息就

5、直接填写 NAT 上对外地址,而不是内网的私有 IP,这样报文的内容在经过 NAT 时就按普通的 NAT 流程转换报文头部的 IP 地址即可,负载内的 IP 地址信息无需再修改。利用STUN 的思路可以穿越 NAT。STUN 协议是客户端/ 服务器协议,分两种请求方式:一是UDP 发送的绑定请求(Binding Requests),二是 TCP 发送的秘密请求 (Shared Secret Requests)。绑定请求用于确定 NAT 分配的绑定地址。STUN 标准中,根据内部终端的地址(P:p)到 NAT 出口的公网地址(A:b)的影射方式,把 NAT 分为四种类型:1. Full Cone

6、:来自相同的内部地址的请求消息映射为相同的外部地址,与外部地址( 目的地址) 无关。映射关系为 P:pA:b,任何外部主机可通过(A:b)发送到数据到(P:p)上。2. Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的计算机地址 X。映射关系为 P:pA:bX,只有来自 X 的数据包才可通过(A:b)发送到数据到(P:p)上。3. Port Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的地址 X:x。映射关系为 P:pA:bX:x ,只有

7、来自 X:x 的数据包才可通过(A:b)发送到数据到(P:p)上。4. Symmetric(对称 ) NAT:只有来自相同的内部地址(P:p),并且发送到同一个地址(X:x) 的请求消息,才被映射为相同的外部地址(A:b),返回的数据只接受该内部节点曾发数据的那个目的地址 X:x。映射关系为 P:pA:bX:x,当(P:p)访问 (Y:y)时,映射为P:pB:cY:y。P2P 利用 STUN 穿越 NAT:位于 NAT 后面终端 A 与 B 要穿越 NAT 直接通讯,可以借助在公网上的第三者 Server来帮助。穿越 NAT 的情况分为为两种方式:1、一方在 NAT 之后,一方在公网上。这种情

8、况相对简单,只要让 NAT 之后的终端先发起通讯,NAT 就没有作用了,它可以从 Server 上取得另一个 Peer 的地址,主动连接,回来的数据包就可以方便地穿越 NAT。2、双方都在 NAT 之后,连接的成功与否与两个 NAT 的类型有关。主要的思路的先通过终端与 Server 的连接,获得两个终端在 NAT 外部的地址(IP 与端口号) ,再由终端向对方的外部地址发邀请包,获取自己与对方通讯的外部地址,俗称为“打洞”。关键是获取了NAT 外部映射的地址,就可以发包直接沟通,建立连接。但当一方是对称型,另一方是Port Restricted 或对称型时,无法有效获取外部地址,邀请包无法到

9、达对方,也就无法穿越NAT。具体的分析可以根据两个 NAT 的类型分成若干情况分析,这里给一般的穿越例子。实例:UDP 穿越 NAT:A 登录 Server,NAT A 分配端口 11000,Server 得到 A 的地址为 100.10.10.10:11000B 登录 Server,NAT B 分配端口 22000,Server 得到 B 的地址为 200.20.20.20:22000此时 B 会把直接来自 A 的包丢弃,所以要在 NAT B 上打一个方向为 A 的洞,那么 A就可以向 200.20.20.20:22000 发送数据了打洞的指令来自 Server。B 向 A 的地址 100.

10、10.10.10:11000 发一个 UDP 报文,被 NAT A 丢弃,但在 NAT B 上建立映射记录, NAT B 不在丢弃来自 A 的报文。Server 通知 A 可以通讯,A 发起数据 UDP 包给 B,NAT B 放行,B 收到 A 的包,双方开始通讯注:若是对称 NAT,当 B 向 A 打洞的端口要重新分配(NAT A 不会再分配 11000 端口),B 无法获取这个端口,所以不适用本方法。实例:TCP 穿越 NAT:A 登录 Server,NAT A 分配端口 11000,Server 得到 A 的地址为 100.10.10.10:11000B 登录 Server,NAT B 分配端口 22000,Server 得到 B 的地址为 200.20.20.20:22000A 向 B 发送 TCP 数据包 SYN:192.168.10.11:1234=200.20.20.20:22000,在 NAT A 上打洞B 向 A 发送 TCP 数据包 SYN:192.168.20.22:1234=100.10.10.10:11000,在 NAT B 上打洞通道建立,A 与 B 三次握手建立 TCP 连接典型案例:http:/

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

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。