堂主先说几句
上一期小知识讲到了数字签名过程,相信各位老铁们,已经掌握到了数字签名的由来以及使用的过程了吧。那么这一期堂主将会继续为大家剖析区块链,带大家探索P2P与区块链之间的千丝万缕。
首先,我们得了解抛开区块链之外的P2P是什么。
行业小知识
就在发文前一天,剧媒体报道,6月1日至7月12日的42天内,全国共有108家P2P平台曝雷,相当于每天曝雷2.6家。据知情人士透露,这两天杭州出事的P2P平台累计交易总额就超过了500亿,用户数量则超过百万人。
从原理上来看,目前问题平台大致分为两种,一种是资产质量不佳,导致平台经营不善,一有“风吹草动”就有崩盘危险;另一种是伪 P2P 平台,是非法集资和旁氏骗局。
说到这儿,肯定就有老铁不明白了什么是伪P2P 平台。没关系,堂主带你一起学习 P2P 的基础知识!
P2P(Peer-to-Peer)网络是无中心服务器、依靠用户群(peers)交换信息的互联网体系,这里的“Peer”充分表明了在网络中各个节点之间的地位是对等的。
与有中心服务器的中央网络C/S系统(Client-Server)不同,点对点网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。
节点之间共享他们所拥有的一部分资源(如磁盘存储空间、网络带宽、处理器使用率等)来提供服务和内容,因此,当有节点加入且对系统请求增多时,整个系统的容量也增大。
P2P 的四种网络模式
P2P 主要存在四种不同的网络模型,也代表着 P2P 技术的四个发展阶段:集中式、纯分布式、混合式和结构化模型。不过需要指出的是,这里所说的网络模型主要是指路由查询结构,即不同节点之间如何建立连接通道,两个节点之间一旦建立连接,具体传输什么数据则是两个节点之间的事情了。
集中式
纯分布式
混合式
结构化
特点
结构简单
泛洪机制
超级节点
唯一性、均匀分布
一、集中式
最简单的路由方式就是集中式,即存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括节点 IP 地址、端口、节点资源等。集中式路由的优点就是结构简单、实现容易。但缺点也很明显,由于中心节点需要存储所有节点的路由信息,当节点规模扩展时,就很容易出现性能瓶颈;而且也存在单点故障问题。
二、纯分布式
那第二种路由结构则是纯分布式的,移除了中心节点,在 P2P 节点之间建立随机网络,就是在一个新加入节点和 P2P 网络中的某个节点间随机建立连接通道,从而形成一个随机拓扑结构。
新节点加入该网络的实现方法也有很多种,最简单的就是随机选择一个已经存在的节点并建立邻居关系。新节点与邻居节点建立连接后,还需要进行全网广播,让整个网络知道该节点的存在。
全网广播的方式就是,该节点首先向邻居节点广播,邻居节点收到广播消息后,再继续向自己的邻居节点广播,以此类推,从而广播到整个网络。这种广播方法也称为泛洪机制。
纯分布式结构不存在集中式结构的单点性能瓶颈问题和单点故障问题,具有较好的可扩展性,但泛洪机制引入了新的问题,主要是可控性差的问题,包括两个较大的问题,一是容易形成泛洪循环,比如节点 A 发出的消息经过节点 B 到 节点 C,节点 C 再广播到节点 A,这就形成了一个循环;另一个棘手问题则是响应消息风暴问题,如果节点 A 想请求的资源被很多节点所拥有,那么在很短时间内,会出现大量节点同时向节点 A 发送响应消息,这就可能会让节点 A 瞬间瘫痪。
三、混合式
再来看看第三种路由结构:混合式。混合式其实就是混合了集中式和分布式结构,网络中存在多个超级节点组成分布式网络,而每个超级节点则有多个普通节点与它组成局部的集中式网络。一个新的普通节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点。
这种结构的泛洪广播就只是发生在超级节点之间,就可以避免大规模泛洪存在的问题。在实际应用中,混合式结构是相对灵活并且比较有效的组网架构,实现难度也相对较小,因此目前较多系统基于混合式结构进行开发实现。
四、结构化
最后一种网络则是结构化 P2P 网络,它也是一种分布式网络结构,但与纯分布式结构不同。纯分布式网络就是一个随机网络,而结构化网络则将所有节点按照某种结构进行有序组织,比如形成一个环状网络或树状网络。而结构化网络的具体实现上,普遍都是基于 DHT(Distributed Hash Table,分布式哈希表)算法思想。
DHT 只是提出一种网络模型,并不涉及具体实现,主要想解决如何在分布式环境下快速而又准确地路由、定位数据的问题。具体的实现方案有 Chord、Pastry、CAN、Kademlia 等算法,目前,我们主要理解 DHT 的核心思想即可。
DHT 核心思想
难点!!!
在 P2P 网络中,可以抽象出两种空间:资源空间和节点空间。资源空间就是所有节点保存的资源集合,节点空间就是所有节点的集合。对所有资源和节点分别进行编号,如把资源名称或内容用 Hash 函数变成一个数值(这也是 DHT 常用的一种方法),这样,每个资源就有对应的一个 ID,每个节点也有一个 ID,资源 ID 和节点 ID 之间建立起一种映射关系。
比如,将资源 n 的所有索引信息存放到节点 n 上,那要搜索资源 n 时,只要找到节点 n 即可,从而就可以避免泛洪广播,能更快速而又准确地路由和定位数据。当然,在实际应用中,资源 ID 和节点 ID 之间是无法做到一一对应的,但因为 ID 都是数字,就存在大小关系或偏序关系等,基于这些关系就能建立两者的映射关系。这就是 DHT 的核心思想。
简单举个例子
简单总结一下上述过程,实际上它跟我们日常生活中去找某一个人打听某件事是非常相似的,比方说你是个AgentSmith,想找小李(key)问问他的手机号码(value),但你事先并不认识他,你首先肯定会去找你所认识的和小李在同一个公司工作的人,比方说小赵,然后小赵又会告诉你去找与和小李在同一部门的小刘,然后小刘又会进一步告诉你去找和小李在同一个项目组的小张。
最后,你找到了小张,哟,正好小李出差去了(节点下线了),但小张恰好知道小李的号码(cache),这样你总算找到了所需的信息。在节点查找的过程中,"节点距离的远近"实际上与上面例子中"人际关系的密切程度"所代表的含义是一样的。
DHT 算法在资源编号和节点编号上就是使用了分布式哈希表,使得资源空间和节点空间的编号有唯一性、均匀分布式等较好的性质,能够适合结构化分布式网络的要求。
下期预告:P2P 网络模式如何与区块链深入结合。我们一起期待吧。
• end •
编辑 | 堂主
插图 | 网络
今日情话
“我觉得你特别像一款游戏。
什么游戏?
我的世界!
”
领取专属 10元无门槛券
私享最新 技术干货