详解P2P技术

详解P2P技术

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

P2P = Peer to Peer

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

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

文件分发

流媒体

VoIP

复杂应用纯P2P无法实现

P2P: 集中式目录 Napster公司首先设计,由中央集中服务器管理

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

可供共享的对象名称

Alice查询文件“Hey Jude” 3) Alice 向Bob请求文件 通过架构我们可以看到一些问题

集中式目录问题单点故障性能瓶颈侵犯版权 文件传输是分散的, 但是定位内容的过 程是高度集中的

Gnutella(使用洪泛法查询) 类似于广播,范围有限,发出请求后,能响应的服务器回应

全分布

没有集中式服务器

公共域协议

许多Gnutella客户机实现Gnutella协议

覆盖网络:

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

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

边不是物理通信链路

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

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

对等方转发报文

QueryHit 报文按反向路径传送

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

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

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

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

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

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

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

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

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

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

组长之间建立TCP连接

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

过程:每个文件有文件的散列码标识客户机送向组长发送关键词的查询组长响应匹配逐项匹配: 元数据散列值IP地址如果组长转发查询给其他组长则其他组长响应匹 配客户端选择要下载的文件特点: 请求排队:限制对等方并行上载数量,新的请求进行排队。

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

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

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

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

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

追踪器tracker服务器

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来查询DHTDHT返回与之匹配的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 = 14key = 15, then successor peer = 1环形DHT 每个对等方仅和其直接后继和直接前任( predecessor)联系.

“覆盖网络”

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

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

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

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

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

peer 4检测到5的离开,将8当作其直接后继,并且问 8它的直接后继是谁(10),然后将10当作其第二后继。如果编号为13的peer要加入怎么办? 后续还有很多问题,篇幅有限,感兴趣可以下来了解。 希望你能通过这篇文章了解到现在网络上常见的几个P2P的模式。

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

相关推荐

蜗牛时涛:《太极熊猫》的偶然 《太极熊猫2》的必然
365bet用网址

蜗牛时涛:《太极熊猫》的偶然 《太极熊猫2》的必然

📅 07-29 👁️ 3342
书店公司注册流程(书店公司成立)
365bet娱乐场网址

书店公司注册流程(书店公司成立)

📅 07-04 👁️ 9849
斐讯K2无线路由器实测(斐讯无线路由器哪个好用)
365bet娱乐场网址

斐讯K2无线路由器实测(斐讯无线路由器哪个好用)

📅 07-10 👁️ 3441