P2P应用

P2P可分为以下几个架构模式

一、纯P2P架构

1、特点

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

2、例子

(1)文件分发
(2)流媒体
(3)VoIP

二、集中式目录架构

在这种模式中有个*目录服务器为P2P提供目录服务。这种集中式目录架构最早来自于”Napster“公司的设计。
在集中式目录架构中:
(1)当对等方启动时,它通知目录服务器以下信息:
1)IP地址
2)可供共享的对象名称
(2)当一个用户要在集中式的目录里面找寻某个资源时会去访问目录服务器。例如Alice查询文件”Hey Jude“
(3)服务器会告诉它哪些用户在线,然后这些用户上面有哪些资源,进一步的再去联系这些用户。然后从这些用户处下载相关资源。例如Alice向Bob请求文件。
如下图所示:
P2P应用
相对于纯P2P而言,集中式目录有一些问题,因为文件传输是分散的,但是定位内容的过程是高度集中的因此可能会导致:
(1)单点故障
(2)性能瓶颈
(3)侵犯版权

三、查询洪泛

人们提出了很多P2P常用架构和机制,例如在Gnutella里面采用洪泛法进行相关信息的查询。
在Gnutella里是全分布的,没有集中式服务器,这时怎么办呢?就会采用洪泛法,洪泛法通俗的说就是吼一嗓子,谁能听到,给个回应,这被称之为洪泛法。但是为了性能和安全性起见,这种方法是在有效范围内进行的。

四、KaZaA

KaZaA里面实现的是超级节点技术。在KaZaA中某些节点比其它节点更重要,例如某节点可以长期在线,有更高的带宽和处理能力。这时此节点可以成为一个小组的领导即超级节点。在一定程度上就可以让超级节点实现*目录服务器的功能。
每个对等方要么被指派为组长,要么被指派给一个组长。对等方与组长之间建立TCP连接,此外组长之间也建立TCP连接。由组长维护它的子对等方共享的内容。
如下图所示:
P2P应用

五、文件分发

P2P技术中使用最广泛的还有文件分发,文件分发最基础的技术来自于BitTorrent。
BitTorrent是一种用于文件分发的流行P2P协议。
参与一个特定文件分发的所有对等方的集合被称为一个洪流即torrent。
一个洪流中的对等方彼此下载等长度的文件快(chunk),典型块长度为256KB。

1、追踪器tracker

在BitTorrent里有个服务器我们称之为追踪器tracker,它可以跟踪参与洪流的所有对等方。
从这个角度来说Bit有一个目录服务器,它负责管理在某一次下载里面各客户端的情况。大家如果使用过Bit下载软件,看到过这些软件的工作日志就会发现这些软件在下载某个文件时一开始会根据Bit种子里边的信息去连接某些tracker服务器,然后去找寻洪流的信息,之后接入这些洪流。
例如Alice要加入某个洪流的下载,她要从追踪器获得对等方列表,获得列表以后就会知道可以和谁去交换文件信息、交换资源了。

2、设计原则

在Bit里有如下设计原则:
(1)请求文件快
1)要保证在任何给定的时刻,不同的对等方拥有不同的文件块子集。
2) 每个对等方会周期性的询问其它每个连接的对等方当前所拥有的文件块列表。
3)对等方将请求下载最稀缺的文件快。
(2)发送文件块
1)Alice发送文件块的对象是所有邻居中向自己发送速率最快的4个。 其它邻居被阻塞,但是每10秒会重新计算速率。
为了防止”穷者越穷、富者越富“的状况每30秒会随机选择一个其它邻居,发送文件块。

六、DHT(分布式Hash表)

再介绍一下在P2P技术中被广泛使用的DHT技术。
DHT可以看成一个分布式的P2P数据库。这个数据库由许多(key,value)键值对构成。
所有(key,value)对被分发到成千上万的对等方用户群中,对等方利用key来查询DHT,DHT返回与之匹配的value。此外对等方还可以插入(key,value)对。

1、键值分配

在DHT中核心问题为如何分配键值对给各对等方呢?基本思想为:
(1)把每个key转化成一个整数。
(2)给每个对等方分配一个整数标识符。
(3)把键值对分配给标识符离key最近的那个对等方。
具体做法为:
(1)给每个对等方分配一个[0, 2 n − 1 2^n-1 2n−1]之间的整数标识符,n为某给定值。
(2)每个标识符由n比特构成。
(3)需要每个key也在同样的范围内。
(4)为得到整数key,将原key做hash
将一个key映射到相同范围内时使用到了数据结构中的hash技术。把key做hash运算,将它映射到与标识符相同的一个范围内。这就是为什么叫做分布式hash表的原因,因为在里面使用了hash技术。
将key数据化后就可以将key分配给具有最近邻ID的对等方。最邻近被定义为该key的直接后继。
例如n=4即给对等方分配[0,15]的整数标识符,peers:1、3、4、5、8、10、12、14。
当key=13时直接后继为14;
当key=15时直接后继为1,因为是按照环的形式。
环形如下:
P2P应用
每个对等方仅和其直接后继和直接前任联系。
P2P应用
例如1110被存放在最邻近的直接后继里面,最邻近的直接后继就是1111,0011查找哪个负责1110只能询问0100,依次往后,找到1111后,1111给0011返回信息说我负责1110。这就是环形DHT里键值对查找过程。

由上图我们看到环形DHT比较非时间,下面来介绍带捷径的环形DHT:
带捷径的环形DHT除了包括直接前任、后继之外还包括捷径方的IP。
如下图:
P2P应用

3有一个捷径方8,可以直接将消息发给8,8也可以直接将消息发给15,与环形DHT相比,消息数从6减至2.

上一篇:ESP8266 NodeMCU小白手把手入门(实操篇)以土壤湿度和DHT传感器为例讲解读取传感器的值


下一篇:springboot 关于 Class path contains multiple SLF4J bindings.警告的解决