当前位置: 首页 > news >正文

【虾说区块链】搞懂P2P网络,再谈区块链!P2P网络概念扫盲帖

欢迎收听「虾说区块链」。现在区块链这个概念在互联网上相当火热,这里简单做一个普及,不涉及项目推广投资,单纯地对区块链相关基础知识概念作一个说明讲解。本人区块链技术爱好者,结合相关区块链资料总结整理了「虾说区块链」,也是自己一个学习笔记,涉及相关内容如理解有误,也请及时指正。

1

P2P网络

P2P(peer to peer):这个peer中文翻译就是对等、对等者、伙伴、对端的意思。所以P2P网络一般叫做对等网络,其确切定义:网络中每个参与节点共享节点所拥有的一部分计算能力、存储能力、网络连接能力,这些能力或者称为共享资源通过网络提供的服务和内容,可被对等节点直接访问,访问过程中不需要再经过中间实体,所以每个节点既是资源和服务的使用者、又是整个资源和服务的提供者。P2P网络中各个节点都是出于一个对等的地位,没有主、从的区分,联系实际环境,你目前在操作的一台电脑终端既可以作为服务器。又可以作为终端去获取对等节点的资源。整个网络中不存在中心节点,每个节点都可对任意对等节点做出响应,提供资源,包括计算资源、存储资源等。

P2P不是一个新的技术,早在2000年该模型就已出现,他于传统的客户端/服务器(Client/Server)结构(也就是WWW所采用的结构方式)的一个本质区别是,整个网络结构中不存在中心节点(或中心服务器)。

图示P2P网路和传统架构的区别

P2P的理念,“我为人人、人人为我”让所有加入互联网的人,直接通过互联网交互,不需要一个中间商,这样沟通,共享,交互更加自由和方便,最终把互联网的权利交换给用户,而不是一些集中网络中心。

用过BT下载的同学肯定印象很深刻,种子的多少很大程度上决定了你的下载速度,P2P网络的一大特点区别于传统网络架构中,网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。P2P的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势。

在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能比较容易地满足用户的需要。理论上其可扩展性几乎可以认为是无限的。例如:在传统的通过FTP的文件下载方式中,当下载用户增加之后,下载速度会变得越来越慢,然而P2P网络正好相反,加入的用户越多,P2P网络中提供的资源就越多,下载的速度反而越快。

P2P架构天生具有耐攻击、高容错的优点。由于服务是分散在各个节点之间进行的,部分节点或网络遭到破坏对其它部分的影响很小。P2P网络一般在部分节点失效时能够自动调整整体拓扑,保持其它节点的连通性。P2P网络通常都是以自组织的方式建立起来的,并允许节点自由地加入和离开。在P2P网络中,由于信息的传输分散在各节点之间进行而无需经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。此外,目前解决Internet隐私问题主要采用中继转发的技术方法,从而将通信的参与者隐藏在众多的网络实体之中。

在传统的一些匿名通信系统中,实现这一机制依赖于某些中继服务器节点。而在P2P中,所有参与者都可以提供中继转发的功能,因而大大提高了匿名通讯的灵活性和可靠性,能够为用户提供更好的隐私保护。

2

P2P的网络拓扑结构

(这个网上很多资料,我基本参考转载于:http://www.intsci.ac.cn/users/luojw/P2P/ch02.html)

中心化拓扑(Centralized Topology)

中心化拓扑中,网络主体由一个处于中心地位的索引目录服务器连接到目录服务器和各网络节点中。这种方式维护简单,资源发现率高,可实现复杂查询,但容易出现单点故障。

分布式P2P网络拓扑包括:

  • 全分布式非结构化拓扑(Decentralized Unstructured Topology);

  • 全分布式结构化拓扑(Decentralized Structured Topology,也称作DHT网络);

全分布式非结构化拓扑的P2P网络是在重叠网络(Overlay Network)采用了随机图的组织方式,结点度数服从Power-law规律,从而能够较快发现目的结点,面对网络的动态变化体现了较好的容错能力,因此具有较好的可用性。同时可以支持复杂查询。

全分布式结构化拓扑的P2P网络主要是采用分布式散列表(Distributed Hash Table, 简写成DHT)技术来组织网络中的结点。DHT是一个由广域范围大量结点共同维护的巨大散列表。散列表被分割成不连续的块,每个结点被分配给一个属于自己的散列块,并成为这个散列块的管理者。通过加密散列函数,一个对象的名字或关键词被映射为128位或160位的散列值。

分布式散列表起源于SDDS(Scalable Distribute Data Structures)研究,Gribble等实现了一个高度可扩展,容错的SDDS集群。DHT类结构能够自适应结点的动态加入/退出,有着良好的可扩展性、鲁棒性、结点ID分配的均匀性和自组织能力。由于重叠网络采用了确定性拓扑结构,DHT可以提供精确的发现。只要目的结点存在于网络中DHT总能发现它,发现的准确性得到了保证。

半分布式拓扑(Partially Decentralized Topology)

吸取了中心化结构和全分布式非结构化拓扑的优点,选择性能较高(处理、存储、带宽等方面性能)的结点作为超级结点(英文表达为SuperNodes或者Hubs),在各个超级结点上存储了系统中其他部分结点的信息,发现算法仅在超级结点之间转发,超级结点再将查询请求转发给适当的叶子结点。半分布式结构也是一个层次式结构,超级结点之间构成一个高速转发层,超级结点和所负责的普通结点构成若干层次。

实际应用中这4种P2P各有优缺点:

音频内容作者:“投河自尽的鱼”

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

点击“阅读原文”进入直播室听专栏音频。

相关文章:

  • 三、分别用for、while、do-while、循环语句以及递归方法计算n!,并输出算式。
  • sitemap
  • 【383】defaultdict 相关用法
  • spring cloud(三):Eureka服务的搭建
  • 一个linux 驱动升级的小问题记录
  • Electron Cash钱包如何离线转BCH
  • Redux小结
  • 2017年360最后一道编程题
  • 翻译:CREATE PROCEDURE语句(已提交到MariaDB官方手册)
  • 智能手机拍照进化论:从传感器到算法摄影
  • 如何使用qperf来衡量网络带宽和延迟性能?
  • 织梦dedecms是什么?
  • 图片的缩放处理
  • CSS: The resize Property
  • vue中引入element ui中的css报错
  • hexo+github搭建个人博客
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【node学习】协程
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Angular2开发踩坑系列-生产环境编译
  • Bootstrap JS插件Alert源码分析
  • maya建模与骨骼动画快速实现人工鱼
  • nginx 配置多 域名 + 多 https
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Shell编程
  • Spring框架之我见(三)——IOC、AOP
  • TypeScript实现数据结构(一)栈,队列,链表
  • 翻译:Hystrix - How To Use
  • 基于axios的vue插件,让http请求更简单
  • 深度学习在携程攻略社区的应用
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 在Unity中实现一个简单的消息管理器
  • 7行Python代码的人脸识别
  • HanLP分词命名实体提取详解
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (六)Hibernate的二级缓存
  • (小白学Java)Java简介和基本配置
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .bat批处理出现中文乱码的情况
  • .NET : 在VS2008中计算代码度量值
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core引入性能分析引导优化
  • .NET MVC之AOP
  • .net web项目 调用webService
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net 中Partitioner static与dynamic的性能对比
  • .pop ----remove 删除
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Autowired和@Resource装配