P2P在区块链中处于底层服务的一层,所以也有必要了解一下基本的P2P技术原理。
网络拓扑
现代的网络环境都是很复杂的,在C/S模式下的网络相对比较好组织。但是在分布式的情况下还要维持一个相对稳定的网络拓扑是比较难的。所以我们需要先学习一下基本的网络拓扑的类型。
- 星型网络
- 总线型网络
- 环形网络
这三种是用的最多的网络拓扑,当然也有其他的一些网络,比如树型网络,全联接网络,只是这些不再我们的讨论范围之内。
对于一个P2P类型的网络,如何在节点不断加入和退出的情况下,维护一个网络基本的拓扑状态是很重要的一点。
P2P网络类型
P2P网络类型很重要的一个区分依据就是网络的拓扑结构的关系。
主要类型有:
- 集中式拓扑
- 全分布式结构式拓扑
- 全分布式非结构化拓扑
- 混合式拓扑
以上的四种类型也是按照P2P网络发展的趋势来排列的。
我们可以试想一下全是C/S模式的互联网时代,现在我们想实现的是:我怎么才能让我的电脑连到并不是一台服务器的别人的电脑来获取资源呢?很自然的想法就是——我把我的IP放到服务器上,告诉大家我这里拥有某项资源不就好了吗?这也就是第一代的P2P做的事情。
集中式P2P网络
这种形式的拓扑图如下:
[图片上传中...(0021pC59zy6QhssSI5jc9&690.jpeg-87f7bd-1571721640609-0)]
一次完整的P2P访问的过程如下L:
- Peer A注册自己的信息到目录服务器S上
- Peer D需要 FileA,向目录服务器S进行查询,得知Peer A拥有这个资源,服务器通过应答方式,将Peer A的注册信息和文件位置的信息发送回去。
- Peer B便可以和Peer A建立起单独的联系,拿到信息。
可以看到这样形式的P2P还是很朴素的,虽然解决了部分服务器带宽和存储上的负担,但是整个系统实际上离开了中心的目录服务器还是无法工作,并不是真正意义上的P2P。
我们急需要新的组织方式来解除对于中心服务器的依赖。这就是第二代“全分布式结构化拓扑P2P网络”所完成的。
全分布式结构式拓扑
为了能够不依赖中心化的服务器,我们碰到的第一个问题就是——如何在分布式的P2P网络中快速定位到资源所在的Peer节点呢?
这也就是DHT(Distributed Hash Table)技术所解决的问题。
DHT技术
DHT技术,用来将不同的资源按照关键字(key)分散存储到网络中去,获取资源时也同样通过这个Key值得到具体的Peer节点的位置。
而这个Key值是通过一定的Hash函数对于一个文件的名字进行哈希得到的。