P2P技术和运用

P2P技术和运用文章目录1.P2P技术1.1P2P技术优势2.P2P网络结构2.1组建P2P网络要解决的3个基本问题:2.2P2P网络类型:2.3集中式P2P网络2.3.1集中式P2P网络的特点2.3.2集中式P2P优缺点2.3.2.1优点2.3.2.2缺点2.4分布式非结构化P2P网络–Gnutella2.4.1洪泛算法:2.4.2Gnutella:2.4.3PureP2P特点:2.5结构化P2P网络2.5.1DHT的基本概念2.5.1.1DHT的特点2.5.1.2DHT应用举

大家好,又见面了,我是你们的朋友全栈君。

1. P2P技术

1.1 P2P技术优势

  • 可靠性好
  • 扩展性好
  • 性价比高

2. P2P网络结构

2.1 组建P2P网络要解决的3个基本问题:

  • 如何存储共享的信息资源
  • 如何让其他对等节点找到信息资源
  • 如何保证对等网络系统的可扩展性与性能

2.2 P2P网络类型:

  • 集中式P2P网络(centralized P2P network )
  • 分布式P2P网络(distributed P2P network )
    • 非结构化P2P网络(unstructured P2P network)
    • 结构化P2P网络(structure P2P network)
  • 混合式P2P网络(hybrid P2P network)

请添加图片描述

2.3 集中式P2P网络

2.3.1 集中式P2P网络的特点

节点只向中心目录服务器查询资源的位置, 而获取资源是向其他节点进行的.

  • P2P网络中所有的节点都与中心目录服务器建立连接关系, 形成星形拓扑结构.

  • 所有节点的资源索引信息保存在中心目录服务器的资源索引表中, 使得中心目录服务器拥有全网的资源索引信息.

  • 资源索引信息包括 <文件名, 关键字, 节点, IP地址, 端口号>

2.3.2 集中式P2P优缺点

2.3.2.1 优点

  • 快速完整的查找
  • 中央管理/认证授权
  • 易于引导接入网络

2.3.2.2 缺点

  • 单点故障, 容易形成瓶颈, 易于被攻击
  • 中央服务器控制所有对等方

2.4 分布式非结构化P2P网络 – Gnutella

非结构化P2P也叫纯P2P网络(Pure P2P)

在Gnutella中, 当一个节点需要查询某一个共享文件时, 将进行内容路由, 将请求消息通过随机形成的网络拓扑结构用洪泛法发送出去, 使得全网节点都能够收到与查询索引消息.

2.4.1 洪泛算法:

  • 当一个节点接收到一个请求后, 向所有的邻居转发该请求
  • 每个消息包含一个最大TTL和一个hop counter
  • 转发节点在转发消息时, 会短暂缓存
  • 消息缓存用于防止消息循环

2.4.2 Gnutella:

五种报文类型:

  1. Ping
  2. Pong
  3. Query
  4. QueryHit
  5. Push

2.4.3 Pure P2P特点:

  • 去中心化
    • 没有中央控制管理
    • 可以移去任何节点而不影响系统功能
  • 非结构化
    • 覆盖网络随机生成, 没有任何结构
    • 不可靠的查询(不保证有查询结果)
    • 系统面临的安全性问题较多

2.5 结构化P2P网络

网络节点拓扑相对稳定

逻辑地址通过hash函数获得

通过分布式散列表DHT路由

解决方案: Chord, CAN, Pastry, Tapestry (P2P四大算法)

分布式结构化P2P网络由多个小的节点集群(swarm)组成, 每个集群都有一个跟踪器(tracker). 分布式结构化P2P网络中的关键问题是如何找到存放所需文件的节点. 解决办法是建立索引表, 这张索引表具有的特征是分布式的, 能够根据节点共享资源的变化动态更新.

要满足要求, 索引表在设计中要解决3个基本问题:

  • 每个节点只需要保留少量的有关的其他节点的信息
  • 每个节点能够很快地查找索引表中的表项信息
  • 每个节点允许多个节点并发访问索引表的表项信息

2.5.1 DHT的基本概念

2.5.1.1 DHT的特点

  1. 节点标识符:

节点标识符用来标识节点. 节点标识符空间可以是由范围在 0 ~ ( 2 16 2^{16} 216-1)的整数值组成, 也即0 ~ 65535

  1. 节点标志符与关键字

可以通过对一个节点的名字(一般以IP地址作为节点名字)进行散列, 来计算获取唯一的节点标识符. 如 p = H a s h ( I P ) p=Hash(IP) p=Hash(IP)

可以通过对一个共享文件内容进行散列计算来获取唯一的关键字, 如 k = H a s h ( v ) k=Hash(v) k=Hash(v)

  1. 关键字映射

散列表可以将 k k k映射成整数, 通常可以在更小的值的集合上获得离散分布.

系统中每一个节点存储一张散列表, 负责保存某一个范围的关键字, 在对 < k e y , v a l u e > <key, value> <key,value> 进行查询之后, 系统将返回一个保存具有关键字的对象的节点标识符, 如IP地址.

2.5.1.2 DHT应用举例 – Chord协议

  1. 机制:
  • 每个共享资源都产生一个key

  • 对节点IP地址做hash

  • 为了启动新的P2P用户群, 一个节点需要用一对新的 ( k e y , v a l u e ) (key, value) (key,value)插入到指针表

  • 任何一个节点都不需要知道网络中其他全部节点的信息

  • 在一个包含N个节点的网络中,每个节点只需要维护到达 O ( l o g 2 N ) O(log_2N) O(log2N)个节点的路由信息

  • 当新的节点加入或离开时,节点仅更新路由信息

  1. Chord协议的具体实现方式:
  • 使用SHA-1生成一个长度为160b的关键字key值空间
  • 关键字值从小到大顺序排列,首尾项链,在逻辑上形成闭合的Chord环
  • 每个value(散列运算后的节点)都将被映射到Chord环上。

Chord环结构如图所示:

请添加图片描述

  • Chord环上每个节点称为标识符(如N1 ~ N56等)
  • 节点标识符都含有一个映射到该value的key(如K10映射到N14)
  • 节点周期性的检查直接前驱节点、直接后继节点的状态,以保证指针表的正确性

节点和关键字都被映射到同一个整数空间,并且在对 2 m 2^m 2m取模后顺序排列在环上. 对于一个标识符为k的key而言, 其由标识符不小于k的node来维护.

Chord算法在搜索时:

  • 每个节点维护一个Finger表, 该表长度为m(Chord中为160), 该表第i项存放节点n的哈希值大于 ( n + 2 i − 1 ) % 2 m (n+2^{i-1})\% 2^m (n+2i1)%2m 的第一个后继节点
  • 也就是说, 搜索节点的过程是按2等比步长变化的

给定一个key, 按照以下过程查找对应资源位于哪个Node:

  • 查看 H a s h ( k e y ) % 2 m Hash(key)\% 2^m Hash(key)%2m是否位于节点n和其直接后继节点n’之间, 如果是则: 直接后继节点n’为所找节点
  • 在n的Finger表中, 找到与 H a s h ( k e y ) % 2 m Hash(key)\% 2^m Hash(key)%2m距离最近, 且其哈希值小于 H a s h ( k e y ) % 2 m Hash(key)\% 2^m Hash(key)%2m的节点, 将请求转发给该节点
  • 重复上面过程, 直到找到key所在的节点

请添加图片描述

No ith successor Successor
1 N1+ 2 0 2^0 20 N18
2 N1+ 2 1 2^1 21 N18
3 N1+ 2 2 2^2 22 N18
4 N1+ 2 3 2^3 23 N18
5 N1+ 2 4 2^4 24 N18
6 N1+ 2 5 2^5 25 N45
7 N1+ 2 6 2^6 26 N1
8 N1+ 2 7 2^7 27 N1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150738.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 补码加、减运算规则「建议收藏」

    补码加、减运算规则「建议收藏」在计算机中,通常总是用补码完成算术的加减法运算。其规则是:  [X+Y]补=[X]补+[Y]补,[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号…

    2022年4月19日
    48
  • ssl协议及开源实现openssl

    ssl协议及开源实现opensslssl协议SSL:(SecureSocketLayer)安全套接层,ssl是一套安全协议,被应用层调用,当http调用ssl协议时被称为https,当ftp调用ssl协议时被称为sftp。lls是一个协议的集合,其中包括:Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换ChangeCipherSpec协议:一条消息表明握手协议已

    2022年5月11日
    61
  • 如何在win10上安装ubuntu虚拟机-图文详细教程「建议收藏」

    前言(和我一样的小白快来看看~)本文将在win10上安装ubuntu虚拟机的步骤一步步记录了下来~希望对大家有帮助方法大概是先装一个虚拟化软件(virtualbox),然后在这个软件上新增一台虚拟电脑机,这样我们就等于有了一台没有装系统的电脑。然后再将我们已经下载好的iso结尾的镜像文件(ubuntu)作为启动盘,给这个虚拟电脑装上系统,就完事了~安装包和镜像文件准备virtu…

    2022年4月6日
    42
  • 为什么要用minikube_大疆御mini买单机

    为什么要用minikube_大疆御mini买单机minikubestart-ptest#创建主集群minikubenodeadd-ptest#增加节点minikubenodelist-ptest#查看节点minikubedashboard-ptest#启动主节点仪表盘

    2022年10月8日
    0
  • 正则表达式(python3)

    正则表达式(python3)

    2021年4月14日
    175
  • Unity3d快速入门[通俗易懂]

    Unity3d快速入门[通俗易懂]https://www.zhihu.com/question/313621072Unity3d如何快速入门前言进入一个领域,最直接有效的方法就是,寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括:1、主流的学习社区与网站。2、该领域的知名大牛与热心分享的从业者。3、如何有效的激励自己持续学习—主要是动手实践因此,总结一下Unity相关学习资源,可能有些不足,欢迎大家指正修改,一起成长!授人与鱼,不如授人与渔!一、Unity官方学习资源1、【Unity官.

    2022年8月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号