详解P2P技术

详解P2P技术P2P=PeertoPeer现在P2P也有很多不同架构,以下是常见的一些P2P架构纯P2P架构没有总是在线的服务器任意端系统之间直接通信对等方之间可以间断连接并可以改变IP地址例子:文件分发流媒体VoIP复杂应用纯P2P无法实现P2P:集中式目录Napster公司首先设计,由中央集中服务器管理当对等方启动时,它通知目录服务器以下信息IP地址可供共享的对象名称Alice查询文件“HeyJude”3)Al.

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

P2P = Peer to Peer

现在P2P也有很多不同架构,以下是常见的一些P2P架构

纯P2P架构

  • 没有总是在线的服务器
  • 任意端系统之间直接通信
  • 对等方之间可以间断连接并可 以改变IP地址

例子:

  • 文件分发

  • 流媒体

  • VoIP

复杂应用纯P2P无法实现

详解P2P技术


P2P: 集中式目录

Napster公司首先设计,由中央集中服务器管理

详解P2P技术

  1. 当对等方启动时,它通知目录 服务器以下信息
  • IP地址

  • 可供共享的对象名称

  1. Alice查询文件“Hey Jude” 3) Alice 向Bob请求文件

通过架构我们可以看到一些问题

集中式目录问题

  • 单点故障
  • 性能瓶颈
  • 侵犯版权

文件传输是分散的, 但是定位内容的过 程是高度集中的

详解P2P技术


Gnutella(使用洪泛法查询)

类似于广播,范围有限,发出请求后,能响应的服务器回应

  • 全分布

  • 没有集中式服务器

  • 公共域协议

  • 许多Gnutella客户机实现Gnutella协议

覆盖网络:

  • 如果对等方X和Y维护了一条TCP连接,则说X和Y之间有一条边

  • 所有活跃的对等方和边组成覆盖网络

  • 边不是物理通信链路

  • 给定对等方连接的覆盖网络路径中的节点少于10个,即TTL小于10

详解P2P技术

查询报文在已有的TCP连接上发送

对等方转发报文

QueryHit 报文按反向路径传送

Gnutella: 加入对等方

  • 加入对等方X必须发现在Gnutella网络中的其他对等方:使用对等方列表 。

  • X试图与该列表上的对等方建立一条TCP连接,直到与Y创建一条连接。

  • 向Y发送一个Ping报文;Y转发该Ping报文。

  • 所有的对等方接收Ping报文并响应一个Pong报 文。

  • X接收到许多Pong报文。然后能同某些其他对等 方建立TCP连接。

Gnutella: 对等方离开

  • 主动离开:离开接点的所有对等方都会刷新自身 的激活对等方列表,并开始与列表中的新的对等 方建立连接

  • 断网:发送信息的时候对等方没有响应,则表明对 等方离开,节点刷新自身的激活对等方列表,并开 始与列表中的新的对等方建立连接


KaZaA

纯P2P的改进,超级节点技术

详解P2P技术

  • 每个对等方要不被指派 为组长,要不被指派给一个组长

    • 对等方和组长之间建立 TCP连接

    • 组长之间建立TCP连接

  • 组长维护它的子对等方 共享的内容

过程:

  • 每个文件有文件的散列码标识
  • 客户机送向组长发送关键词的查询
  • 组长响应匹配
  • 逐项匹配:
    • 元数据
    • 散列值
    • IP地址
  • 如果组长转发查询给其他组长则其他组长响应匹 配
  • 客户端选择要下载的文件

特点:

  • 请求排队:限制对等方并行上载数量,新的请求进行排队。

  • 激励优先权:根据不同的上载下载比例优先服务贡献大者。

  • 并行下载:将一个文件分成若干段,从多个对等方并行下载。


P2P文件分发:BitTorrent

详解P2P技术

  • BitTorrent是一种用于文件分发的流行P2P协议。

  • 参与一个特定文件分发的所有对等方的集合被称为一个洪流 (torrent)。

  • 一个洪流中的对等方彼此下载等长度的文件块(chunk),典型 块长度为256KB。

追踪器tracker服务器

详解P2P技术

P2P文件分发流程

  • 对等方加入 torrent:
    • 没有文件块,但会随着时间流逝从其它对等方处累积文件 块
    • 在tracker处注册,取得对等方列表,连到所有对等方的 一个子集(邻居)
  • 在下载的同时给其它对等方上传文件块
  • 对等方可能改变和其交换文件块的对象
  • 对等方会不断进入或者离开
  • 一旦某对等方下载完了整个文件,它可以离开(自 私)或者继续留在torrent系统里(无私)

BitTorrent:请求、发送

请求文件块

  • 在任何给定的时刻,不同的对等方拥有不同的文件块子集

  • 每个对等方会周期性的询 问其它每个它连接的对等方当前所拥有的文件块列 表

  • 对等方将请求下载最稀缺的文件块

**发送文件块: tit-for-**tat(一报还一报)

  • Alice发送文件块的对象是 所有邻居中向自己发送速率 最快的4个

    • 其它邻居被阻塞

    • 每10秒重新计算速率

  • 每30秒,随机选择一个其 他邻居,发送文件块


DHT(分布式Hash表)

DHT: 一个分布式的P2P数据库

  • 数据库由许多(key,value)((键, 值)) 对构成。例如:
    • key: 社保号; value: 人名
    • key: 电影名称; value: IP地址
  • 所有(key, value) 对被分发到成千上万的对等方用户群中
  • 一个对等方利用key来查询DHT
  • DHT返回与之匹配的value
  • 对等方还可以插入(key, value)对

怎样把键值分配给对等方?

核心问题:

  • 分配 (key, value) 对给各对等方

基本思想:

  • 把每个key转化成一个整数
  • 给每个对等方分配一个整数标识符
  • 把 (key,value) 对分配给标识符离key最近的 那个对等方

DHT 标识符

  • 给每个对等方分配一个[0,2n-1]之间的整数标识符,n为某给定值.
    • 每个标识符由 n 比特构成.
  • 需要每个key也在同样的范围内
  • 为得到整数key,将原key做hash
    • 例如*,* key = hash(“Led Zeppelin IV”)
    • 这就是为什么叫做分布式hash表的原因

key分配给对等方

规则:把key分配给具有最邻近ID的对等方.

  • 为方便起见: 最临近被定义为该key的直接后继 (immediate successor )
  • 例如:
  • n=4; peers: 1,3,4,5,8,10,12,14;
  • key = 13, then successor peer = 14
  • key = 15, then successor peer = 1

环形DHT

详解P2P技术

  • 每个对等方仅和其直接后继和直接前任( predecessor)联系.

  • “覆盖网络”

当有N个对等方时,为找 到负责的键,发送消息数 量的负责度是O(N)

详解P2P技术

带捷径的环形DHT

  • 每个对等方知晓直接前任、后继以及捷径方的IP

  • 本例中,将消息数从6减至2

  • DHT可以设计为每个对等方的邻居和每个请求的报文数均为O(log N)

详解P2P技术

对等方扰动

详解P2P技术

  • 对等方可能进入或者离去
  • 对等方需要知晓它后面两个后继的地址
  • 每个对等方周期性的ping这两个后继以 检查它们的存活性
  • 如果直接后继离开了,则选择它的下一 个后继作为直接后继

例如: peer 5离开

  • peer 4检测到5的离开,将8当作其直接后继,并且问 8它的直接后继是谁(10),然后将10当作其第二后继。
  • 如果编号为13的peer要加入怎么办? 后续还有很多问题,篇幅有限,感兴趣可以下来了解。

希望你能通过这篇文章了解到现在网络上常见的几个P2P的模式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150729.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 互联网海量视频数据的存储[通俗易懂]

    原文链接:http://www.docin.com/p-86312184.html?docfrom=rrela一、背景    互联网内容提供方式转变:用户创造内容。视频应用、网络游戏、搜索引擎等互联网衍生业务迅速发展,使得海量数据存储、管理和处理成为当今互联网公司面临的严峻问题。这些信息保存在存储设备上,便是高膨胀的海量数据,表1是不同互联网应用的规模。  互联网应用海量数据的共性:  1…

  • .NET设计模式访问者模式

    一.访问者模式的定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。二.访问者模式的结构和角色:1.Visitor抽象访问者角色,为该

    2021年12月24日
  • springboot项目实战视频教程_Spring揭秘

    springboot项目实战视频教程_Spring揭秘前言:花了大概一个多月的时间,debug自己录制的SpringbBoot实战历程~从菜鸟到小牛课程已经完成了!包含课时46节,涵盖知识点以及详情如下图所示。课程介绍:本课程以实际业务场景为出发点、实战撸码为主、理论概念为辅,零基础一步一个脚印讲解当前微服务项目或分布式系统下SpringBoot各种典型的应用场景及其涉及的各个核心要点!课程目的:本课程目的在于给那些需要入门Sp…

  • jbpm工作流

    jbpm工作流一、JBPM(javabusinessprocessmanager)1、工作流管理流程O>定义工作流(使用流程设计器生成,png和xml文件,分别面向用户和系统)>执行工作流

  • 卓越性能 の 军火库「建议收藏」

    卓越性能 の 军火库「建议收藏」在介绍性能优化的军火库之前,先来扯几句题外话。希望这些题外话,能打消你追求卓越性能的理想,来甘心当一枚圆滑的钉子。我是非常不推荐程序员,对公司的业务,进行性能优化的。说这话,纯粹是基于个人自身安全考虑。因为性能优化,在大多数公司,属于费力不讨好的工作项。追求极简的代码,性能卓越的代码,是有追求的程序员的目标。但随着经历了大大小小的公司,我发现很多优秀的程序员,在经受着这种追求的反嗜,以至于痛不欲生。下有下面几点原因,虽然我们知道它肯定是错的,但我们无能无力:公司按照完成的功能,对程序员…

  • copy.deepcopy()_python切片是深拷贝还是浅拷贝

    copy.deepcopy()_python切片是深拷贝还是浅拷贝copy()与deepcopy()之间的主要区别是python对数据的存储方式。首先直接上结论:—–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。—–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化

发表回复

您的电子邮箱地址不会被公开。

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