您好、欢迎来到现金彩票网!
当前位置:秒速牛牛投注 > 桶链算法 >

区块链中P2P网络

发布时间:2019-05-20 18:07 来源:未知 编辑:admin

  P2P网络在区块链里面解决了去中心化的问题,原理很容易理解,但是其中细节则复杂得多。

  P2P 网络不同于传统的客户端/服务端(client/server,C/S)结构,P2P 网络中的每个节点都可以既是客户端也是服务端,因此也不适合使用 HTTP 协议进行节点之间的通信,一般都是直接使用Socket进行网络编程。

  P2P 主要存在四种不同的网络模型,也代表着 P2P 技术的四个发展阶段:集中式、纯分布式、混合式和结构化模型。不过需要指出的是,这里所说的网络模型主要是指路由查询结构,即不同节点之间如何建立连接通道,两个节点之间一旦建立连接,具体传输什么数据则是两个节点之间的事情了。

  最简单的路由方式就是集中式,即存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括节点 IP 地址、端口、节点资源等。集中式路由的优点就是结构简单、实现容易。但缺点也很明显,由于中心节点需要存储所有节点的路由信息,当节点规模扩展时,就很容易出现性能瓶颈;而且也存在单点故障问题。

  第二种路由结构则是纯分布式的,移除了中心节点,在 P2P 节点之间建立随机网络,就是在一个新加入节点和 P2P 网络中的某个节点间随机建立连接通道,从而形成一个随机拓扑结构。新节点加入该网络的实现方法也有很多种,最简单的就是随机选择一个已经存在的节点并建立邻居关系。像比特币的话,则是使用 DNS 的方式来查询其他节点,DNS 一般是硬编码到代码里的,这些 DNS 服务器就会提供比特币节点的 IP 地址列表,从而新节点就可以找到其他节点建立连接通道。新节点与邻居节点建立连接后,还需要进行全网广播,让整个网络知道该节点的存在。全网广播的方式就是,该节点首先向邻居节点广播,邻居节点收到广播消息后,再继续向自己的邻居节点广播,以此类推,从而广播到整个网络。这种广播方法也称为泛洪机制。纯分布式结构不存在集中式结构的单点性能瓶颈问题和单点故障问题,具有较好的可扩展性,但泛洪机制引入了新的问题,主要是可控性差的问题,包括两个较大的问题,一是容易形成泛洪循环,比如节点 A 发出的消息经过节点 B 到 节点 C,节点 C 再广播到节点 A,这就形成了一个循环;另一个棘手问题则是响应消息风暴问题,如果节点 A 想请求的资源被很多节点所拥有,那么在很短时间内,会出现大量节点同时向节点 A 发送响应消息,这就可能会让节点 A 瞬间瘫痪。

  混合式其实就是混合了集中式和分布式结构,如下图所示,网络中存在多个超级节点组成分布式网络,而每个超级节点则有多个普通节点与它组成局部的集中式网络。一个新的普通节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点。这种结构的泛洪广播就只是发生在超级节点之间,就可以避免大规模泛洪存在的问题。在实际应用中,混合式结构是相对灵活并且比较有效的组网架构,实现难度也相对较小,因此目前较多系统基于混合式结构进行开发实现。其实,比特币网络如今也是这种结构,后面再细说。

  它也是一种分布式网络结构,但与纯分布式结构不同。纯分布式网络就是一个随机网络,而结构化网络则将所有节点按照某种结构进行有序组织,比如形成一个环状网络或树状网络。而结构化网络的具体实现上,普遍都是基于 DHT(Distributed Hash Table,分布式哈希表) 算法思想。DHT 只是提出一种网络模型,并不涉及具体实现,主要想解决如何在分布式环境下快速而又准确地路由、定位数据的问题。具体的实现方案有 Chord、Pastry、CAN、Kademlia 等算法,其中Kademlia 也是以太坊网络的实现算法,很多常用的 P2P 应用如 BitTorrent、电驴等也是使用 Kademlia。因为篇幅有限,就不展开讲这些算法的具体原理了。目前,我们主要理解 DHT 的核心思想即可。

  在 P2P 网络中,可以抽象出两种空间:资源空间和节点空间。资源空间就是所有节点保存的资源集合,节点空间就是所有节点的集合。对所有资源和节点分别进行编号,如把资源名称或内容用 Hash 函数变成一个数值(这也是 DHT 常用的一种方法),这样,每个资源就有对应的一个 ID,每个节点也有一个 ID,资源 ID 和节点 ID 之间建立起一种映射关系,比如,将资源 n 的所有索引信息存放到节点 n 上,那要搜索资源 n 时,只要找到节点 n 即可,从而就可以避免泛洪广播,能更快速而又准确地路由和定位数据。当然,在实际应用中,资源 ID 和节点 ID 之间是无法做到一一对应的,但因为 ID 都是数字,就存在大小关系或偏序关系等,基于这些关系就能建立两者的映射关系。这就是 DHT 的核心思想。DHT 算法在资源编号和节点编号上就是使用了分布式哈希表,使得资源空间和节点空间的编号有唯一性、均匀分布式等较好的性质,能够适合结构化分布式网络的要求。

  首先,比特币网络中的节点主要有四大功能:钱包、挖矿、区块链数据库、网络路由。每个节点都会具备路由功能,但其他功能不一定都具备,不同类型的节点可能只包含部分功能,一般只有比特币核心(bitcoin core)节点才会包含所有四大功能。

  所有节点都会参与校验和广播交易及区块信息,且会发现和维持与其他节点的连接。有些节点会包含完整的区块链数据库,包括所有交易数据,这种节点也称为全节点(Full Node)。另外一些节点只存储了区块链数据库的一部分,一般只存储区块头而不存储交易数据,它们会通过“简化交易验证(SPV)”的方式完成交易校验,这样的节点也称为 SPV节点或轻节点(Lightweight Node)。钱包一般是 PC 或手机客户端的功能,用户通过钱包查看自己的账户金额、管理钱包地址和私钥、发起交易等。除了比特币核心钱包是全节点之外,大部分钱包都是轻节点。挖矿节点则通过解决工作量证明(PoW)算法问题,与其他挖矿节点相互竞争创建新区块。有些挖矿节点同时也是全节点,即也存储了完整的区块链数据库,这种节点一般都是独立矿工(Solo Miner)。还有一些挖矿节点不是独立挖矿的,而是和其他节点一起连接到矿池,参与集体挖矿,这种节点一般也称为矿池矿工(Pool Miner)。这会形成一个局部的集中式矿池网络,中心节点是一个矿池服务器,其他挖矿节点全部连接到矿池服务器。矿池矿工和矿池服务器之间的通信也不是采用标准的比特币协议,而是使用矿池挖矿协议,而矿池服务器作为一个全节点再与其他比特币节点使用主网络的比特币协议进行通信。

  在整个比特币网络中,除了不同节点间使用比特币协议作为通信协议的主网络,也存在很多扩展网络,包括上面提到的矿池网络。不同的矿池网络可能还会使用不同的矿池挖矿协议,目前主流的具体矿池协议应该是 Stratum协议,该协议除了支持挖矿节点,也支持瘦客户端钱包。一个包含了比特币协议主网络各种节点和 Stratum 网络,以及其他矿池网络的扩展比特币网络大概如下图所示:

  另外,挖矿这块还有特殊需求。我们知道,矿工创建新区块后,是需要广播给全网所有节点的,当全网都接受了该区块,给矿工的挖矿奖励才算是有效的,这之后才好开始下一个区块 Hash 的计算。所以矿工必须最大限度缩短新区块的广播和下一个区块 Hash 计算之间的时间。如果矿工之间传播区块只采用上图所示的比特币协议网络,那无疑会有很高的网络延迟,所以,需要一个专门的传播网络用来加快新区块在矿工之间的同步传播,这个专门网络也叫比特币传播网络或比特币中继网络(Bitcoin Relay Network)。

  和比特币一样,以太坊的节点也具备钱包、挖矿、区块链数据库、网络路由四大功能,也同样存在很多不同类型的节点,除了主网络之外也同样存在很多扩展网络。但与比特币不同的,比特币主网的 P2P 网络是无结构的,但以太坊的 P2P 网络是有结构的。前面我们已经提过,以太坊的 P2P 网络主要采用了 Kademlia(简称 Kad) 算法实现,Kad 是一种分布式哈希表(DHT)技术,使用该技术,可以实现在分布式环境下快速而又准确地路由、定位数据的问题。所以,下面主要讲解下以太坊的 Kad 网络。

  在 Kad 网络中,每个节点都具有一个唯一的节点 ID。另外,也会计算不同节点之间的距离,但这个距离不是物理上的距离,而是逻辑上的距离,是通过对两个节点 ID 进行 异或(符号为^) 计算得到的,即 A、B 两节点之间的距离的计算公式为:D(A,B) = A.ID^B.ID。异或有一个重要的性质:假设 a、b、c 为任意三个数,如果 a^b = a^c 成立,那就一定 b = c。因此,如果给定一个结点 a 和距离 L,那就有且仅有一个结点 b, 会使得 D(a,b) = L。通过这种方式,就能有效度量 Kad 网络中不同节点之间的逻辑距离。

  在异或距离度量的基础上,Kad 还可以将整个网络拓扑组织成如下图所示的一个二叉前缀树,每个 NodeID 会映射到二叉树上的某个叶子。

  在这种二叉树结构下,对每个节点来说,离它越近的节点异或距离也是越近的。接着,可以按照离自己异或距离的远近,对整颗二叉树进行拆分。拆分规则是:从根节点开始,将不包括自己的那颗子树拆分出来,然后在包含自己的子树中,把不包括自己的下一层子树再拆分出来,以此类推,直到只剩下自己。以上图的 110 节点为例,从根节点开始,由于 110 节点在右子树,所以将左边的整颗子树拆分出来,即包含 000、001、010 这三个节点的这颗子树;接着,到第二层子树,将不包含 110 节点的左子树再拆分出来,即包含 100 和 101 这两个节点的子树;最后,再将 111 拆分出来。这样,就将 110 节点之外的整个二叉树拆分出了三颗子树。

  完成子树拆分后,只要知道每个子树里面的其中一个节点,就可以进行递归路由实现整颗二叉树所有节点的遍历。但在实际场景下,由于节点是动态变化的,所以一般不会只知道每个子树的一个节点,而是需要知道多个节点。因此,Kad 中有一个叫 K-桶(K-bucket)的概念,每个桶会记录每颗子树里所知道的多个节点。其实,一个K-桶就是一张路由表,如果拆分出来有 m 颗子树,那对应节点就需要维护 m 个路由表。每个节点都会各自维护自己的 m 个 K-桶,每个 K-桶里记录的节点信息一般会包括 NodeID、IP、Endpoint、与 Target 节点(即维护该 K-桶的节点)的异或距离等信息。以太坊中,每个节点维护的 K-桶数量为 256 个,这 256 个 K-桶会根据与 Target 节点的异或距离进行排序,每个 K-桶保存的节点数量上限是 16。

  在以太坊的 Kad 网络中,节点之间的通信是基于 UDP 的,另外设置了 4 个主要的通信协议:

  1、Ping:用于探测一个节点是否在线、Pong:用于响应 Ping 命令

  3、FindNode:用于查找与 Target 节点异或距离最近的其他节点

  通过以上 4 个命令,就可以实现新节点的加入、K-桶的刷新等机制。具体的实现流程就不细讲了,留给大伙自己去思考。

  不同结构的 P2P 网络,会有不同的优点和缺点。比特币网络的结构明显容易理解,实现起来也相对容易得多,而以太坊网络引入了异或距离、二叉前缀树、K-桶等,结构上复杂不少,但在节点路由上的确会比比特币快很多。另外,不管是比特币还是以太坊,其实都只是一种或多种协议的集合,不同节点其实可以用不同的具体实现,比如,比特币就有用 C++ 实现的 Bitcoin Core,还有用 Java 实现的 BitcoinJ;以太坊也有用 Go 语言实现的 go-ethereum,也有用 C++ 实现的 go-ethereum,还有用 Java 实现的 Ethereum(J)。

  1、P2P网络节点发现流程设定每次节点启动需要发现的节点数最小为N,最大值为M,节点ID为160位的二进制值。根据Kademlia算法,假设启动的客户端(节点)为A,节点A的ID为“NodeIDA”,...博文来自:luoye4321的专栏

  区块链区块链图比特币是构建在区块链技术之上的一个加密数字货币,区块链顾名思义即由很多区块组成的链条,可以把区块链简单比喻为一本账本,把区块比喻为账本的一页记录,账本的每一页里都记录了很多比特币的转账交...博文来自:的博客

  1深入浅出SSL证书作者简介:冰尘,架构师,CSDN博客专家,从事架构设计7年有余,曾先后就职于世界500强国企和美资外企,目前感兴趣的研究方向,企业应用集成,物联网,DevOPS自动化运维,大数据以...博文来自:GitChat技术杂谈

  各位朋友大家晚上好,我们今天继续来做区块链的分享;今天聊的主题是对等网络;今天我的交流目的想和大家聊清楚三个基本问题:1.对等网络的组网思想2.区块链系统为什么选择对等网络作为自身的网络模型3.为什么...博文来自:u013177568的专栏

  最近学习了200行代码实现一个简单的区块链初步学习nodejs,实现P2P网络的简单模式,添加了多点信息同步更新。节点功能实...博文来自:mengzaishenqiu的博客

  外文发表日期:2018-04-14外文链接:在之...博文来自:孙飞的博客

  区块链技术大量依赖于P2P网络,可以说没有P2P就没有区块链现在的发展。而区块链拥有去中心化的应用理论,所以对P2P的过程有着近似严苛的安全要求。本文围绕P2P网络的基础架构以及安全协议展开论述。内容...博文来自:Fly_鹏程万里

  在之前的文章中,我们已经知道了怎么编写PoW也知道了IPFS怎么工作,但是有一个致命的缺点,我们的服务都是中心化的,这篇文章会教你怎么实现一个简单的完全去中心化的P2P网络。背景知识什么是P2P网络在...博文

  区块链特辑:,欢迎查阅,原创作品,转载请标明!这周工作有点小忙,部门区块链基础平台的开发...博文来自:fusan2004的博客

  提起区块链,P2P网络时不得不提的.P2P是实现区块链技术中的一种.P2P与区块链有着不可割舍的情节都具有去中心化的特质.在P2P网络中1个节点,它既可以是服务器,也可以是客户端.每个节点都是平...博文来自:qaz540411484的专栏

  点击上方“蓝色字”可关注我们!暴走时评:个人碳交易公司CarbonX正在与区块链创业公司ConsenSys合作开发一个P2P碳信用交易平台。CarbonX希望能够通过该项目激励有利于环境可持续发展的行...博文来自:区块链铅笔

  春节假期,一个名为“3点钟无眠区块链群”的微信群火了,群里有薛蛮子、李笑来、陈伟星、帅初等一批区块链的最早参与者,有沈南鹏、周鸿祎、蔡文胜等商界大佬,甚至还有高晓松、佟丽娅、韩庚等娱乐明星。在这样...博文来自:笑桐笔记的博客

  大家目前正在热衷炒比特币,却很少去关注比特币技术本身的安全问题。用户可能并不知道目前正在使用的比特币钱包蕴含着巨大的危险,所以作者决定写此文以做警醒,避免大家在未来丢失更多的比特币。以下是文章全文:我...博文来自:well_2000_82的博客

  之前忘了说了,现在补上主要有以下几个方案udp协议广播该方案的优点是协议自身支持,实现简单,高效。但其缺点也是致命的,就是只能在同一局域网内才能进行广播,限制太大。udp协议组播和广播的方案差不多,虽...博文来自:mumufan05的专栏

  比特币是一种基于P2P网络的加密数字货币,本文将从P2P技术的角度来讲解比特币的架构和实现,通过跟传统P2P应用的对比,分析比特币的不同之处,以及这些差异点如何影响比特币的设计。...博文来自:hindsights的博客

  比特币的P2P网络协议转载请注明出处:一、五层网络模型网络的五层模型可以分为:物理层、数据链路层、网络层、传输层、应用层。物理...博文

  结构化与非结构化网络非结构化的P2P网络是指网络节点之间不存在组织关系,节点之间完全是对等的,比如第一代P2P网络Napster。结构化的P2P网络与非结构化恰好相反,我们认为网络在逻辑上存在一个人为...博文来自:Paranoid

  想彻底说明P2P的原理太麻烦了,而且这种东西网上一搜就是一大堆(虽然好多链接其实都是同一篇文章),这里就不赘述了,只简单说一下本例所用到的一些东西。如果所有节点都在公网上,p2p通信就非常容易,找台搭...博文来自:mumufan05的专栏

  一、区块链本质上是一个对等网络(peer-to-peer)的分布式账本数据库。二、区块链本身其实是一串链接的数据区块,其链接 指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈希值。三、基本概念...博文来自:zyj0813的博客

  1分布式网络介绍1.1Kad网介绍1.2Kad网络节点距离1.3K桶1.4Kad通信协议2邻居节点2.1NodeTable类主要成员2.2邻居节点发现方法2.3邻居节点网络拓扑及刷新机制。 1分布式网...博文来自:qukuai的博客

  本文对EthereumJ的DevP2P相关的代码做一个简单的介绍。DevP2P以太坊定义了自己的DevP2P协议()实现以太坊网络内...博文来自:SkyBird-2018的博客

  P2P网络架构比特币采用了基于国际互联网(Internet)的P2P(peer-to-peer)网络架构。P2P是指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节...博文来自:敬诚为之

  1介绍Introduction到目前为止,我们构建了一个含有以下特征的区块链:匿名、安全、以及随机产生地址;区块链数据存储;PoW系统;可靠的交易记录存储方式。这些特征都非常关键,但是这还不够。能够让...博文来自:稻草人的格子衫

  区块链和AI无疑是近期业界当之无愧的两大风口。AI就不说了,区块链从17年各种数字货币被炒上了天,一下成为了人们街头巷议的焦点,本文撇开数字货币的投资不说,仅仅从技术层面来剖析一下区块链各个部分...博文来自:天山折梅

  问题导读1.区块链去中心化网络采用的是什么通信协议?2.利用p2p协议,有什么好处?3.利用P2P协议进行节点之间数据传输主要有哪两个功能点?4.区块链如果本节点数据不一致,会做如何处理?5.数据不可...博文来自:中琦2513的猿生

  随着区块链的越来越火,去中心化的网络设计再次被拿到技术人员面前。在这里我使用非常通俗的语言,帮大家来理解去中心化的网络设计的基础—网络穿透。再使用代码来实现穿透。如果阐述不到位的地方,欢迎大家抛砖。 ...博文来自:的博客

  都说要分散资产,于是我就把钱投到了各个平台,买了不同P2P公司的理财,于是,现在任何一个维权群里,都有我的身影。一个诙谐的段子,深刻地折射出了P2P平台之混乱,6月1日至7月12日的42天内,全国共有...博文来自:weixin_42552595的博客

  通过middlebox实施P2P通讯[文章信息]作者blog: 作者的话: 我是一边看一边随手翻的,翻的很...博文来自:土坷垃

  加密货币都是去中心化的应用,去中心化的基础就是P2P网络,其作用和地位不言而喻,无可替代。当然,对于一个不开源的所谓私链(私有区块链),是否必要,尚无定论。事实上,P2P网络不是什么新技术。但是,使用...博文来自:ITstar_ge的博客

  我们已经了解到,微观上,区块链本质就是一种不可篡改且可追踪溯源的哈希链条;宏观上,还具备了另外三个基本特征:分布式存储、P2P网络和共识机制。分布式存储无非就是网络上大部分节点都保存了整条区块链,这容...博文

  以太坊的p2p模块实现了一个p2p分布式网络,是实现以太坊分布式钱包的关键技术。p2p模块的说明见官方github的wiki。本文要实现的是使用以太坊的p2p模块来实现一个简单的聊天程序。1P2P基本...博文

  导读: 摘要:分析了P2P基本概念及其基本工作原理,探讨了用JAVA实现p2p网络通信的技术,并用一个实例作了进一步阐述。 关键词:P2P,C/S,JAVA,XML,JDK,TCP,UDP ...博文来自:zkp0601的专栏

  最近在研究P2P技术,奈何相关资料不多,自己琢磨了一下,分享一下学习P2P的一些原理,以及如何打造一个P2P聊天应用。这里指的P2P是指peertopeer,点对点的技术,每个客户端都是服务端,没有中...

  转自:简介当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(...

  引子P2P网贷平台从产生到现在一直争议不断。一方面,网贷平台为出借人、借款人提供直接的借贷渠道,满足借款人融资,出借人投资需求,特别是国内有将近8亿人无信贷记录,这些被传统银行忽略的用户存在大量的借贷...

  比特币的网络采用了基于国际互联网(Internet)的P2P网络架构。英文是peertopeer,所以也叫对等网络。顾名思义也就是网络中的每台计算机是对等的,各个节点共同提供网络服务,不存在任何“特殊...

  1.发送交易数据SendTransactions事件触发交易广播txBroadcastLoop本地发送了一个交易,或者是接收到别人发来的交易信息。txpool会产生一条消息,消息被传递到txCh通道。...

  社会化推荐 本文是论文《一种结合推荐对象间关联关系的社会化推荐算法》的笔记(下)。该论文提出的算法是以PMF为框架基础的。因而若对PMF不太了解的话,可以参考我的上一篇文章脑补一下,当然,那篇文章只是...

  普通流视频(完整视频) 高清视频(分段视频) 1080P-fhd,超...

  专注于互联网架构技术,努力成为一名架构师frp配置本地服务端口到服务器80端口

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...

  以前在windows下用的mysql都是通过下载exe格式的安装包来安装使用,今天偶然下到一个免安装版本的,使用了一番,对mysql的启动之类的有了一个重新认识,记录下。 mysql-5.6.16-w...

  连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为...

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...

  我走小路的博客C++卷积神经网络实例:tiny_cnn代码详解(1)——开篇

  在之前完成了《C++开发人脸性别识别教程》系列博客的编写之后,我开始将工作重点转移到与我的研究生课题关联更为密切的深度学习上来。深度学习编程有几个经典的框架,首屈一指的当属Caffe,然后还有Ma...

  教育数据挖掘小小子的专栏ZXing改横屏识别为竖屏识别-中间极光线,并解决图像拉伸问题

  好久没上csdn了, 在这里特别想念大家, 最近公司一段时间忙吧,无暇东顾。扫噶,还是直接进入主题吧      大家都知道 直接从google down下来的 zxing二维码扫描 是 在扫描界面 ...

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...

  此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。 本文仅供初学者参考,如果有问题欢迎大家指正。        首先简单地理...

  luyan的博客魔兽争霸3冰封王座1.24e 多开联机补丁 信息发布与收集点

http://duchtech.com/tongliansuanfa/3.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有