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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eigen库安装vs_捷达vs5顶配啥配置

    eigen库安装vs_捷达vs5顶配啥配置(一)在官网下载所需版本的Eigen库,可查找历史版本Eigen(二)找到所需版本,下载压缩包,并解压(三)打开解压后的文件,复制路径D:\library\eigen-3.3.4(四)在vs的项目中点击“属性”——“C/C++”——“常规”——“附加包含目录”,添加路径D:\library\eigen-3.3.4(五)如果不想每次都添加路径的话,可以在属性管理器中添加属性表,然后在属性表的包含目录中添加路径D:\library\eigen-3.3.4,在其他项目需要使用Eigen库时,直接添加现有属性表即

    2022年10月9日
    2
  • 计算机组成原理 寻址方式_计算机组成原理寻址方式的判断

    计算机组成原理 寻址方式_计算机组成原理寻址方式的判断一、寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,与硬件结构紧密相关,而且直接影响指令格式和指令功能。分为指令寻址和数据寻址两大类。二、指令寻址分为顺序寻址和跳跃寻址两种。顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址;跳跃寻址则通过转移类指令实现。数据寻址种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。指令的地址码字段通常都不代表操作数的真实地址,把它称为真实地址,记作A。操作数的真实地址成为有效地址,记作EA,它是由寻址方式和形式地址共同来确定的。由

    2025年8月4日
    6
  • 百度网站打不开了,只有百度首页跟搜索页打不开其它能正常打开怎么解决?

    百度网站打不开了,只有百度首页跟搜索页打不开其它能正常打开怎么解决?写在开头补充:1.如果出现“您连接的不是私密连接”请点击【高级】或者【详细】;(针对火狐浏览器与谷歌浏览器)2.如果是访问“http://www.baidu.com”不行,请替换“https://www.baidu.com”试试;打不开百度首页问题,只有百度打不开其他能打开怎么办?问题汇总描述1.谷歌Chrome浏览器有时候打不开百度,其它网站表示能够正常访问;2.360浏览器打开…

    2022年5月12日
    41
  • csgo怎么绑定一键跳投_CSGO投掷物一键跳投的设置方法[通俗易懂]

    所需工具:空白的文本文档适用范围:跳投高抛/跳投中抛/跳投低抛步骤一:打开新建的文本文档,输入如下内容alias+jumpthrow”+jump;-attack;-attack2″;alias-jumpthrow-jump;bindt+jumpthrow;(注释:t为你想绑定的键位)步骤二:保存文档,重命名为a.cfg(其实只要是.cfg结束即可),此时文件应…

    2022年4月12日
    672
  • docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。「建议收藏」

    docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。「建议收藏」在用户权限下docker命令需要sudo否则出现以下问题通过将用户添加到docker用户组可以将sudo去掉,命令如下sudogroupadddocker#添加docker用户组sudogpasswd-a$USERdocker#将登陆用户加入到docker用户组中newgrpdocker#更新用户组…

    2022年5月13日
    44
  • 定时任务执行原理_md5算法原理

    定时任务执行原理_md5算法原理前言最近在思考实现定时任务的几种方式,比如quartz,delayqueue,scheduleThreadPool,时间轮。在对比的同时,也了解了下其简单原理,在这里描述下我对时间轮算法实现定时任务的理解。时间轮定时使用方式@Testpublicvoidtest3()throwsInterruptedException{DateTimeFormatterformatter=DateTimeFormatter.ofPattern(“yyyy-MM-d

    2022年10月1日
    2

发表回复

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

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