先抛开区块链,只讲P2P,对P2P了解后,再慢慢解开区块链对P2P的应用。
P2P发展历史
本文是从《P2P对等网络原理及应用》和网上资料总结出来
第一代 - 集中式P2P
-
拓补图
image.png -
实现原理
选择一个节点作为中心节点,使所有其他节点和这个中心节点建立星形拓扑结构。每个节点把自己的资源索引信息存储在中心节点,从而中心节点拥有全网的资源索引信息。当某个节点需要获取某个资源时,向中心节点提交关键字/索引,中心节点定位出能够提供内容服务的节点,请求节点与这些节点分别建立传输通道,实现并行传送。可以看出,它在路由查询(内容路由)上,与传统系统架构并无区别,P2P主要体现在请求节点从其他多个节点并行获得数据上。 -
优点
集中式结构非常简单,是最容易实现的一种方式,而且维护简单,资源发现效率高。 -
缺点
- 因为所有资源索引都保存在中心节点,很容易形成单点故障,中央索引服务器的瘫痪容易导致整个网络的崩溃,因此可靠性和安全性较低。
- 随着网络规模的扩大,对中央索引服务器进行维护和更新的费用将急剧增加,所需成本较高。
- 中央索引服务器的存在常引起版权问题上的纠纷,服务提供商容易被追究法律责任。
-
典型应用:
Mp3共享软件 Napster
image.png
第二代 - 纯分布式P2P
-
拓扑图
image.png
-
实现原理
这种结构不需要中心节点,是一种纯分布式的机制。一个新加入的节点和P2P网络中的某个节点间随机建立连接通道,从而形成一个随机的拓扑结构。当一个节点需要进行内容路由时,将请求的信息通过随意拓扑泛洪出去,使得全网点节点都收到路由查询消息。接到查询消息的节点进行检索判断是否拥有相应资源,如有则进行查询响应。
关键原理
1.小世界模型
image.png
“小世界网络模型”,也叫“六度分割”,就是从人群中任意挑选两个陌生人,他们要达到彼此认识的最短关系链数是6。
有几个参数需要关注:- 概率P(0-1):节点以较小的概率将边的一端移到另一个随机选取的位置上
- L长度(上面的6):也就是两个节点相连的最少边长度的平均数
- 节点的度:也就是平均每个节点的邻居节点(朋友)数量
- 集团化系数C:某个人的两个朋友有可能互相是朋友,表示一种重叠特征
2.泛洪原理
image.png
请求节点要寻找资源,必须要向全网进行广播,这就是泛洪技术。
泛洪有两个弊端:
-
泛洪循环,如下图,查询消息从1-2-4-3-1形成一个环路。
image.png
可以通过设置TTL限制(就是在节点之间转发最大跳数)和利用树形结构消除环路来解决问题。
image.png -
响应消息风暴,大量的节点向请求节点响应信息,瞬间让请求节点瘫痪,这个问题非常致命。
image.png -
优点
这种网络完全随机,不需要按照某种规定去构建,实现起来简单,在小范围内查询性能较好;
一般不提供性能保证,但容错性好,支持复杂的查询,并受结点频繁加入和退出系统的影响小。 -
缺点
除了上面的防洪问题,还有查询的结果不保证,查询速度较慢,对网络带宽的消耗非常大,并由此带来可扩展性差等问题。 -
典型应用
image.png
采用这种拓扑结构最典型的案例便是Gnutella(音译:纽特拉)。准确地说,Gnutella不是特指某一款软件,而是指遵守Gnutella协议[3]的网络以及客户端软件的统称。目前基于Gnutella网络的客户端软件非常多,著名的有Shareaza、LimeWire和BearShare等。
第三代 - 混合式P2P
-
拓补图
image.png -
实现原理
混合式P2P网络是指局部上呈现集中式,整体上表现分布式的组织结构。以KazaA为例介绍这种网络结构,主要有两类节点:超级节点(SN)和普通节点(ON)。整个网络有两级结构,第一级是由SN组成的分布式拓扑结构,每个SN大概有40个SN邻居;第二级是ON与SN组成的星形集中式结构,每个SN下面有100多个ON。一个节点加入网络成为SN还是ON,是根据节点的CPU、内存、网络带宽等资源决定。全网的资源索引存储在所有的SN节点,当一个ON需要下载某个文件时,会向其父SN节点发送查询请求,父节点再通过泛洪方式在SN组成的网络平面内进行泛洪广播,由SN返回资源存储的位置信息。 -
优点
结合了集中式和纯分布式的优缺点,提供了更好的性能,可扩展性较好,组网方式更加灵活,容易管理;根据节点的能力决定功能,具有高度适应性。 -
缺点
超级点依赖性大,易于受到攻击,容错性也受到影响。 -
典型应用
KaZaa是当前世界最流行的几款P2P文件共享软件之一。
第四代 - 结构化P2P
-
拓补图
image.png -
实现原理
结构化P2P网络与纯分布式网络的结构是一样的,没有中心节点。但是相对于纯分布式结构的节点网络是随机组建的,结构化P2P网络让所有节点按照某种结构进行有序组织如形成一种环形网络或树形网络,将资源的索引信息也进行有序组织并按照某种规律保存在相应节点,从而避免了消息的泛洪问题。
举个简单的例子推演结构化网络的实现:
资源空间,代表P2P网络所有资源的集合,每个资源都有一个资源索引<资源编号,资源名称,资源存储节点ip端口>,资源编号是对资源的唯一标志,比如1,2,3,4等
节点空间,即P2P网络所有节点的集合,每个节点也有一个编号作为唯一标志,比如1,2,3,4等
加入有一种方法,可以让资源的编号与节点的编号完全一一对应,即刚好N个资源和N个节点,且编号刚好都是从1-N,那么重要让资源i存放在节点i上,某个节点请求资源i,只需要找到节点i即可。
怎么找到节点i呢,如果有一种网络节点拓扑图,使得邻居之间节点编号有一定规则,如按照大小排成一个链表,并且让每个节点除了保存距离近的节点,还保存一些相距稍远的节点信息,那么请求节点在搜索节点i时,可以根据自己的节点编号与节点i的关系大致判断节点i的位置,从而把请求信息首先发给距离节点i较近的节点。这样就能形成一种更好的搜索效果。
这就是DHT算法,结构化P2P的核心思想。
image.png
-
优点
网络自组织,自适应和可拓展性强,不需要中心节点。使用结构化算法,查询效率高; -
缺点
DHT这类结构最大的问题是DHT的维护机制较为复杂,尤其是结点频繁加入退出造成的网络波动(Churn)会极大增加DHT的维护代价。DHT所面临的另外一个问题是DHT仅支持精确关键词匹配查询,无法支持内容/语义等复杂查询。 -
典型应用
最经典的案例是Tapestry,Pastry,Chord和CAN。
image.png
image.png
四种网络结构比较
image.png区块链使用的P2P类型 - 结构化P2p
P2P技术
对于文件下载,流媒体领域,关键技术:
- 文件索引获取(下载种子)
- 内容路由(找到那些节点有目标下载文件)
- 内容传送(实时,非实时)
对于区块链,关键的技术点是:
- NAT穿越
- 节点发现
- 节点通信(下次分享)
网友评论