一、段子

客官:小二,来份P2P,我不懂这个东西

小二:好的,客官有眼光啊,P2P这道菜也是好东西。

客官:我只是想点个我没了解过的菜式而已。

小二:行,不管怎样,现在就给您准备。

二、P2P

1.P2P是什么?

P2P英文的全称为(peer to peer)即对等网络。其实当我们提到P2P的时候很容易会想到网络借贷,什么人人贷啊,宜人贷啊等等的网络金融借贷平台,是的,他们的P2P也是(peer to peer),不过他们的P2P是不是只对等网络技术就不清楚了,不过P2P借贷的英文是(peer to peer lending),或许真的会有区别吧,和我们要讲的的P2P技术。

P2P除了叫对等网络,在国内人们更加经常说是“点对点”,“端对端”,或许这两个词会更加熟悉。这种网络不同于C/S网络,即客户端/服务器网络,C/S网络大家都很熟悉,有一个服务器做中心枢纽,当客户端发送请求给服务器时,服务器处理请求然后发送相应信息给客户端,所以服务器当中心枢纽的话需要很高的性能。

而P2P网络跟C/S网络的理念则是相反的了,因为P2P网络中没有真正的服务器当中心枢纽,在P2P网络中,每一个节点都是服务器,又是客户端,既能发送请求,也能接受处理请求并返回数据。这也可以理解成每一个节点都是中心枢纽。

2.P2P主要的四种模型

P2P主要分了四种模型,分别是:集中式、纯分布式、混合式和结构化模型。在其他网上说P2P有四种网络拓扑结构:

中心化拓扑(Centralized Topology);

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

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

半分布式拓扑(Partially Decentralized Topology)。

在我的理解里这两种说法讲的是一个意思。那么下面要分别讲讲这四种模型。

集中式:存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括节点 IP 地址、端口、节点资源等。集中式路由的优点就是结构简单、实现容易。但缺点也很明显,由于中心节点需要存储所有节点的路由信息,当节点规模扩展时,就很容易出现性能瓶颈;而且也存在单点故障问题。这其实和C/S网络很像,都有一个中心,只不过P2P的这个中心节点不单单只是当做服务器而已,它也可当客户端,这种模型就类似星型拓扑结构。如图。

纯分布式: 网络是在重叠网络(Overlay Network)采用了随机图的组织方式,结点度数服从Power-law规律(幂次法则),从而能够较快发现目的结点,面对网络的动态变化体现了较好的容错能力,因此具有较好的可用性。移除了中心节点,在 P2P 节点之间建立随机网络,就是在一个新加入节点和 P2P 网络中的某个节点间随机建立连接通道,从而形成一个随机拓扑结构。新节点加入该网络的实现方法也有很多种,最简单的就是随机选择一个已经存在的节点并建立邻居关系。像比特币的话,则是使用 DNS 的方式来查询其他节点,DNS 一般是硬编码到代码里的,这些 DNS 服务器就会提供比特币节点的 IP 地址列表,从而新节点就可以找到其他节点建立连接通道。新节点与邻居节点建立连接后,还需要进行全网广播,让整个网络知道该节点的存在。全网广播的方式就是,该节点首先向邻居节点广播,邻居节点收到广播消息后,再继续向自己的邻居节点广播,以此类推,从而广播到整个网络。这种广播方法也称为泛洪机制(flooding)。但这种泛洪广播的缺点则是不可控制,造成泛洪循环。就相当于如果爆发洪水,那么洪水是很难控制的。

所谓泛洪循环我这举个例子:假如节点a发送请求,广播给节点b,节点b广播给c节点,然后节点a,c互通的话节点c又把请求广播给节点a,形成了一个循环了。还有一种情况也是泛洪机制的缺点:当有多个节点拥有某个节点请求的数据,这么多的节点也会回应该节点,返回数据给该节点,那这个节点可能会宕机了。因为节点随机分布相连,图片我就不上了。

结构式网络模式:它主要是采用分布式散列表(Distributed Hash Table, 简写成DHT)技术来组织网络中的结点。DHT是一个由广域范围大量结点共同维护的巨大散列表。散列表被分割成不连续的块,每个结点被分配给一个属于自己的散列块,并成为这个散列块的管理者。通过加密散列函数,一个对象的名字或关键词被映射为128位或160位的散列值。其实它与纯分布式模式相像,主要区别在于节点分布不再随机分布了,而是结构分布,按某种结构模型有序分布,例如网状,树状,环状等。DHT主要想解决如何在分布式环境下快速而又准确地路由、定位数据的问题。有个叫Kademlia的算法是以太坊网络的实现算法,是DHT的某种实现的算法。

混合模式:这理解起来比较简单,就是集中式模型和纯分布式模型的混合。这种网络中存在多个超级节点组成分布式网络,而每个超级节点则有多个普通节点与它组成局部的集中式网络。一个新的普通节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点。这种结构的泛洪广播就只是发生在超级节点之间,就可以避免大规模泛洪存在的问题。

3.区块链与P2P

在传统的交易系统中,我们总会涉及到第三方支付平台的加入。例如银行,支付宝等。传统的交易过程我们来缕一缕思路。

假如小宝要给大宝转100块钱,小宝首先要在手机银行app绑定一张有100块钱以上的银行卡先,找到大宝的卡号是多少,然后小宝把钱转给大宝这一过程首先要经过银行服务器,在服务器中先检查小宝的银行卡里是不是足够100块,足够钱了,然后通过一系列操作扣除小宝100块钱,并将100块钱转入大宝绑定的卡中。这里银行就充当了第三方,因为小宝给大宝转钱只是两个对象的事情,但事实上,这过程涉及了另一个对象,即银行,所以银行就是第三方。人们之所以选择通过第三方平台来完成交易过程,是因为那是建立在参与交易的两个对象信任这第三方平台的基础上,显然银行够让人们信任,人们才会在他们平台交易。上文中已经提过这种C/S网络有很明显的弊端,那就是如果银行的中央服务器损坏了,或者被侵入了,这就给用户造成一定的影响。

而区块链采用P2P网络进行去中心化,使每个参与交易的用户可以不用通过第三方平台才能完成交易,至于交易过程,小二我在公钥与私钥的那篇文章中说过,因为区块链中没有中心化的节点来统一处理用户的各种数据信息,而是每个节点自己都会记录保存了整个区块链上的数据信息,所以这样确保了交易的真实性,安全性。在区块链P2P网络中,每一笔交易都会进行全网广播,这样每个区块上就都会知道并记录保存这一笔交易,然后区块链账本上就会多出一笔交易了。因为P2P去中心化的特性,网络涉及大量的节点,所以想要修改一笔交易记录的信息的话必须能够掌握全网节点的51%以上才有机会修改,但因为网络涉及的节点巨多,想掌握全网51%的节点是不切实际的,因此在区块链系统中存储的数据信息都有很高的安全性。

因为P2P网络没有中心节点,所以每个人钱包地址中究竟有多少钱我们是不知道的,在交易过程中,在发起一笔交易的时候由于不知道这个钱包地址有多少余额,我们怎么来验证这个钱包的余额是否足够交易的金额呢,这个时候矿工的作用就很大了。矿工作用有多大我们往后再说。

这里P2P就讲这些,事实上P2P涉及的知识面很多,小二还没学明白,只能把明白的记录下来了。P2P网络在区块链中还涉及了不同的节点分配不同的功能,不同的系统应用的P2P模型还不一样,例如比特币系统与以太坊系统用的P2P模型功能就会有区别,有待小二去学习学习。

小二(我):讲到这里小二我给客官您一张推荐劵——详解区块链P2P网络

客官您可以多了解一下P2P网络,这篇文章写得币较详细,我也参考了很多知识在这篇文章,相信对客官有帮助。

客官:好的,多谢小二了,回去我就去再细看。

区块链学习笔记:来份P2P相关推荐

  1. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  2. 区块链学习笔记23——ETH反思

    区块链学习笔记23--ETH反思 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约真的智能吗 ...

  3. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  4. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  5. 区块链学习笔记4——BTC实现

    区块链学习笔记4--BTC实现 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 UTXO 区块链是一 ...

  6. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  7. 区块链学习笔记(一)——区块链和搓麻是一样一样的

    区块链学习笔记(一)--区块链和搓麻是一样一样的 新的开始 一个故事 要点 总结概念 几个搞笑的解释(真实性待查) 新的开始 你好! 这是我的第一篇学习笔记,想来想去就从近几年挺火的区块链开始吧,大多 ...

  8. 区块链学习笔记(三)——从商鞅变法谈“共识机制”

    区块链学习笔记(三)--从商鞅变法谈"共识机制" 前言 一.商鞅变法的故事 总结一下 二.共识机制 1)什么是共识机制 2)要点 总结 前言 区块链健康运行的灵魂是"共识 ...

  9. 区块链学习笔记2——BTC中的数据结构

    区块链学习笔记2--BTC中的数据结构 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 本文主要介绍 ...

最新文章

  1. Drive.ai轰然倒下:曾估值两亿,吴恩达夫妇站台,苹果将接盘部分可用技术人才...
  2. 先理解Mask R-CNN的工作原理,然后构建颜色填充器应用
  3. python32位安装
  4. 软件工程作业 - wordcount
  5. android系统中sd卡各文件夹功能详解 guessword,AndroidStudio LiveTemplate函数说明
  6. C# 实验四 获取系统时间、点击加一秒功能
  7. 在linux下使用udev获取热插拔(hotplug)事件
  8. CF442C-Artem and Array【贪心】
  9. oracle每季度补丁,Oracle 2020 年第四季度补丁发布
  10. 梦想还是要有的 万一实现了呢
  11. python实现关键词提取
  12. Vue -- 如何在 span 标签上实现一个点击事件
  13. 剑指offer面试题6 重建二叉树(java)
  14. JS-JavaScript打开新页面的两种方式:当前页面打开和新页面打开
  15. 重读微积分(八):全微分和法线
  16. 【转】photoshop CS2安装激活破解教程
  17. Java 大厂面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?
  18. hdu4771 Stealing Harry Potter's Precious (状压+bfs)
  19. 在Chrome安装Edge的插件
  20. rewind java_Java ShortBuffer rewind()用法及代码示例

热门文章

  1. Android距离感应器P-Sensor浅析
  2. 基于轻量级YOLOV5+BIFPN的苹果瑕疵检测识别分析系统
  3. 最简单的阿拉伯数字转大写(财务专用)存储过程实现
  4. 多进程并发服务器C++实现字符串小写到大写转换
  5. 区块链新闻编辑部成立,看区块链如何助力新闻传播?
  6. 基于pygame的消消乐小游戏开发
  7. 广东东软学院安卓实验报告二:“编写聊天APP界面”
  8. 云开发制作二手商城微信小程序
  9. 安装Visual Studio 2015(VS2015)时提示安装包JavaScript_ProjectSystem.msi丢失或损坏的解决方法
  10. python判断身份证是否合法的函数_Python开发之身份证验证库id_validator验证身份证号合法性及根据身...