P2P网络区块链的分散化与自治基础(区块链核心技术-P2P网络)

大家好,今天小编带来P2P网络区块链的分散化与自治基础的问题,以下是小编对此问题的归纳整理,来看看吧。

P2P网络区块链的分散化与自治基础

P2P(Peer-to-Peer)网络是无中心服务器、依靠用户群(peers)交换信息的互联网体系(如图1右),这里的“Peer”充分表明了在网络中各个节点之间的地位是对等的。与有中心服务器的中央网络C/S系统(Client-Server)(如图1左)不同,点对点网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。节点之间共享他们所拥有的一部分***(如磁盘存储空间、网络带宽、处理器使用率等)来提供服务和内容,因此,当有节点加入且对系统请求增多时,整个系统的容量也增大。

P2P网络区块链的分散化与自治基础(区块链核心技术-P2P网络)
(图片来源网络,侵删)

图1C/S网络模式和P2P网络模式

P2P网络区块链的分散化与自治基础(区块链核心技术-P2P网络)
(图片来源网络,侵删)

P2P网络最常见的使用场景是在互联网上共享文件,它非常适合文件共享:在C/S结构中,由于下载仅来源于一个中心服务器,请求下载的用户越多,平均下来每个用户的数据传输更慢。而对P2P网络而言,其许多节点中存储着同一份文件的副本,当有人需要下载它时,可以同时从多个节点下载,而自己在下载文件同时也可以上传给其他正在下载的节点,因此网络越大,速度越快。P2P网络充分利用了网络中其他对等节点的带宽,而不仅仅是利用文件来源节点的带宽。

由于在文件共享领域的成功,P2P网络受到了使用者的欢迎,但是由于大部分共享的文件是流行音乐和电影,对于版权的侵犯也使其饱受诟病。在一个纯粹的P2P网络中,数据可以随意***,副本可以任意保存,但是资产显然是不可以随意***、存在多个副本的。中本聪提出的比特币,保留了P2P的“分散化”的特征,也解决了一个资产在P2P网络中转移的问题:使得资产在转移时不是简单地***,也需要从原地址中扣除,而矿工将核实究竟有没有将该扣除的资产扣除。以下我们将仔细分析比特币中的P2P网络,以给解决区块链上内容版权以及其他数字资产保护的问题提供启发。

P2P网络区块链的分散化与自治基础(区块链核心技术-P2P网络)
(图片来源网络,侵删)

首先,比特币网络是非常随机的。不仅体现在,每个节点可以连接到的节点是随机的,也体现在节点可以随时加入网络和离开网络,整个网络的总共节点数目不确定,也因此在达成共识的时候,比特币并不是实时一致的,而是从大概率上保证最终一致性。而带来的好处是鲁棒性:部分节点的退出或崩溃,并不会带来整个网络的瘫痪,用户的加入和退出并不会对整体网络产生太大影响。

其次,交易广播通过泛洪(flooding)算法来实现,并且经过设计使得同一笔交易不会一直在网络中广播下去。具体来说,如果一笔交易由一个客户端发起,客户端将这笔交易告知所有其他相邻节点,节点如果核验通过,则会将这笔交易信息传播给与其相邻的其他节点。而终止传播的条件在于,节点接收到的交易已经在自己的交易池里了,由于每个交易有独一无二的数字指纹哈希值,所以这个查询非常方便。

再者,和其他P2P网络一样,网络的传递是有延迟的。所以不同的节点有不同的交易池。如果有人发起双重支付攻击,并且两笔支付到达了同一个节点,诚实的节点将会仅保留一个交易,另一个不再广播,最终网络中不同的节点可能在短时间内存在记哪一笔账的分歧,但是没关系,随着时间的推移,共识机制保证了最终只会记录一笔账,同时也保证了篡改交易数据需要支付高昂的代价,使得交易是安全的。

在之前的《共识机制》文章中,我们提到了专家们针对分布式数据库研究出的“不可能性理论”,比特币多年运行良好,似乎比理论告诉我们的要好得多,这是因为它打破了经典模型里的两个***设:

一、比特币引进了奖励的概念:使得人们在权衡利弊之下,发现好好记账的收益大于***的收益,所以自然而然会为了金钱奖励而诚实起来。

二、比特币体系包含了随机性,使得它不用再纠结于规定共识的起点和终点,随着时间的流逝,观点出现分歧的概率按指数级下降。

这两处不同,使它逾越了传统理论关于分布式共识不可能达成这一鸿沟。

从以上分析可以看出,要想在P2P网络中实现数据的保护,使其不可以随意***,也可以使用相同的思路:首先让数据加密,具有一定的访问限制性;然后设计激励机制让矿工来帮助负责检查是否是合法的数据转移,以及是否删除了原节点的副本;设计合适的共识机制,达成记账一致性;在节点选择上加入一定的随机性,避免权力集中在少部分节点,增加安全性和鲁棒性;巧妙利用数字指纹“哈希值”来核验校对数据等。

当然,天下没有免费的午餐,虽然类似这样的分权机制提供了一些关键的好处,如容错,安全性,政治中立性和真实性,但其代价是可扩展性。目前如火如荼的公链竞争中,各种项目都在可扩展性上大显身手,也侧面表明了这是现有区块链面临的关键问题。事实上,随着越来越多的节点被添加到其网络中,区块链实际上变得越来越弱,因为节点间延迟随着节点的增加而增加。因此,所有以这种分散方式运行的公链共识协议都会在低交易吞吐量和高度集中化之间进行权衡。换句话说,随着区块链规模的增长,参与网络所需的存储,带宽和计算能力需求也会增加。在某些情况下,它变得很难处理,只有少数节点可以处理一个区块,从而导致集中化风险。另外,在交易的验证等方面,多个节点同时都在帮助核验,从某个角度来讲是有重复劳动和***浪费的。毕竟本来张三给李四转账,是很私人的事情,拉上一个和这两人没啥关系的人来帮忙见证,也是要浪费记账人的时间的,当然记账人会得到报酬,但是这个报酬从哪儿来,在某些情况下不过是在透支未来的收益支付给他罢了。

区块链技术令人兴奋,和它的P2P特性有很大关系。P2P的想法并不是什么新颖的想法,某种程度上我们重新回到了二十年前的技术上,不过这次是以一种更加纯粹的方式。民众渴望分权,因为疲惫于看到太多权力集中带来的弊端,可是分权是否一定会带来更多的社会正义,或者说为了这样的社会正义背后需要付出什么代价都是值得深思的。让自己和其他每一个人生活更好是人类美好的愿望,为了实现这个目标需要各方共同来努力。

区块链核心技术-P2P网络

点对点网络是区块链中核心的技术之一,主要关注的方面是为区块链提供一个稳定的网络结构,用于广播未被打包的交易(交易池中的交易)以及共识过的区块,部分共识算法也需要点对点的网络支撑(如PBFT),另外一个***功能,如以太坊的消息网络,也需要点对点网络的支持。

P2P网络分为结构化和非结构化网络两类。结构化网络***用类似DHT算法来构建网络结构;非结构化网络是一种扁平的网络,每个节点都有一些邻居节点的地址。

点对点网络的主要职责有维护网络结构和发送信息这两个方面。网络结构要关注的是新节点的加入和网络更新这两个方面,而发送信息包括广播和单播两个方面

如何建立并维护点对点的整个网络?节点如何加入、退出?
网络结构的建立有两个核心的参数,一个是每个节点向外连接的节点数,第二个是最大转发数。

新节点对于整个网络一无所知,要么通过一个中心的服务获取网络中的一些节点去连接,要么去连接网络中的“***”节点。

网络更新处理当有新节点加入或者节点退出,甚至原来一些节点网络不好,无法连接,过一段时间又活了,等等这些情况。一般通过节点已有的连接来广播这些路由表的变化。需要注意的是,因为点对点网络的特殊性,每个节点的路由表是不一样的(也叫partial view)

广播一般***用泛洪协议,即收到转发方式,使的消息在网络中扩散,一般要***用一些限制条件,比如一条消息要设置最大的转发数,避免网络的过渡负载。

单播需要结构化网络结构支持,一般是DHT,类似于DNS解析的方式,逐跳寻找目标节点地址,之后进行传输,并且更新本地路由表。

要想快速检索信息,有两种数据结构可以使用,一种是树类型,如AVL树、红黑树、B树等;另外一类是hash表。
哈希表的效率比树更高,但是需要占用更多的内存。
信息的表示***用键值对的方式,即一个键对应一个值,我们要查找的是key,值是附着的信息。
哈希表要解决的问题是如何均匀地为每一个key分配一个存储位置。
这里面有两个重点:1.是为key分配一个存储地点,这个分配算法是固定的,保证存储的时候和查找的时候使用同一个算法,不然存进去之后会找不到;2.是均匀地分配,不能有点地方存放数据多,有点放存放数据少。

一般语言里面的hashtable、map等结构使用这个技术来实现,哈希函数可以直接使用取模函数,key%n,这种方式,n代表有多少个地方,key是整数,如果key是其他类型,需要先进行一次哈希,将key转为整数。这种方式可以解决上面的两个需求,但是当n不够大的时候(小于要存储的数据),会产生冲突,一个地方一定会有两个key要存储,这时候,需要在这个地方放一个链表,将分配到同一地点、不同key,顺序摆放。当一个地点放的key太多后,链表的查找速度太慢,要转化为树类型结构(红黑树或者AVL树)。

上面说过,哈希表效率很高,但是占用内容,使用多台机器就可以解决这个限制。在分布式环境中,可以将上述的地点理解为计算机(后面成为节点),即如何将一个key映射到一个节点上,每个节点有一个节点ID,即key->node id的映射,这个映射算法也要固定。
这个算法还有一个非常重要的要求,即scalebility,当新节点加入和退出时候,需要迁移的key要尽量少。

这个映射算法有两种典型结构,一个是环形,一个是树形;环形的叫一致性哈希算法,树形的典型叫kademlia算法。

选点算法就是解决key->node id的映射算法,形象的来说就是为一个key选择它生命中的她(节点)。

***设我们使用32哈希,那么总共能容纳的key的数据量是2**32,称之为hash空间,把节点的ID映射成整数,key也映射成整数。把key哈希和节点哈希值接的差值的叫做距离(负数的话要取模,不用绝对值),比如一个key的哈希是100(整数表示),一个节点的哈希是105,则这两个的距离是105-100=5。当然使用其他距离表示也可以,比如反过来减,但是算法要固定。我们把key映射(放到)距离他最近的节点上。距离取模的话,看起来就是把节点和key放到一个环上,key归属到从顺时针角度离它最近的节点上。

kademlia算法的距离***用的是key哈希与节点哈希异或计算之后的数值来表示(整数),从左往右,拥有越多的“相同前缀”,则距离越近,越在左边位置不一样,距离越远。
树结构的体现是,将节点和key看成树的节点,这个算法支持的位数是160bit,即20个8字节,树的高度为160,每个边表示一位。
选点的算法和一致性哈希相同,从所有节点中,选择一个距离key距离最小的节点作为这个key的归宿。

由于是在分布式环境中,为了保证高可用,我们***设没有一个中心的路由表,没有这个可以看到全貌的路由表,带来了一些挑战,比如如何发现节点、查找节点?
在P2P网络中,常用的方法是每个节点维护一个部分路由表,即只包含部分节点的路由信息。在泛洪算法中,这些节点上随机的;在DHT算法中,这个路由表是有结构的,维护的节点也是有选择性的。那么如何合理的选择需要维护路由信息的节点呢?

一个朴素的做法是,每一个节点保存比他大的节点的信息,这样可以组成一个环,但是这样做的话,有一个大问题和一个小问题。大问题是,每个节点知道的信息太少(只有下一个节点的哈希和地址),当给出一个key时,它不知道网络中还有没有比它距离这个key距离还短的节点,所以它首先判断key是否属于自己和下一个节点,如果是,那么这个key就属于下一个节点,如果不是就调用下一个节点同样的方法,这个复杂度是N(节点数)。一个优化的方法是,每个节点i维护的其他节点有:i+2 1, i+2 2,....i+2**31,通过观察这个数据,发现由近到远,节点越来越稀疏。这样可以把复杂度降低到lgN

每个节点保存的其他节点的信息,包括,从左到右,每一位上与本节点不同的节点,最多选择k个(算法的超参数)。比如在节点00110上(为演示起见,选择5位),在要保存的节点路由信息是:
1****: xxx,....,xxx(k个)
01 : xxx,....,xxx(k个)
000
: xxx,....,xxx(k个)
0010 : xxx,....,xxx(k个)
00111: xxx,....,xxx(k个)
以上为一行称为k-bucket。形象的来看,也是距离自己越近,节点越密集,越远,节点越稀疏。这个路由查找、节点查找的算法也是lgN复杂度。

区块链是什么 应该怎么解释

1、P2P现在非常流行,而说到P2P就不得不提到比特币。而关于比特币,它就有一个重要的概念,就是区块链。

2、区块链是什么区块链其实就相当于一个去中介化的数据库,是由一串数据块组成的。它的每一个数据块当中都包含了一次比特币网络交易的信息,而这些都是用于验证其信息的有效性和生成下一个区块的。狭义的来讲,区块链是就是一种按照时间顺序来将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。而从广义来讲,区块链其实是一种分布式基础架构与计算方式,它是用于保证数据传输和访问的安全的。

3、区块链的基础架构区块链是由数据层、网络层、共识层、激励层、合约层和应用层这六个基础架构组成的。

4、区块链的用途区块链主要是用于解决交易的信任和安全问题。

区块链的基础知识是什么?

区块链通过让散落在网络中的每一个节点(你我皆可为节点)以某一确定的共识共同参与数据库的管理,实现数据信息的去中心化分布式存储。在不需要各节点互相信任的情况下,区块链可以保证系统内数据记录的完整性和安全性。相比于过去的中心化世界,区块链率先攻破的便是他们的不透明性,杜绝暗箱操作。

可以把区块链想象成一份公开的「流水账」账本,每个节点都有同一个账本,大家共同参与记账,有交易发生时需将交易细节广播出来,保持各节点账本数据的同步更新。如果说区块链是一个账本,那么每一个「区块」就是账本里的每一页纸。

区块链注意事项

区分区块链和普通数据库的重要因素是区块链有把数据输入数据库的特殊条件。也就是说,输入的新数据不能与其中已经存在的数据冲突(数据一致性),并且数据不能更改。数据本身与用户锁定在一起,这是可***和有效的。最后,在没有集中个人控制的情况下,大家对数据库中发生的事情达成了共识。

最后一点是区块链的核心。分权很有吸引力,因为它意味着不会有单点失败。也就是说,没有一个机构可以拿走你的资产或者改变记录来满足他们的需要。这种不变性消除了信任任何人的需要,这对任何区块链成员都是有益的,但是也要付出很大的代价。

区块链技术通俗讲解

区块链技术通俗讲解如下:

简单来说:区块链就是使用一揽子既有的网络技术,组建而成的新一代网络系统,这个网络系统有新结构,有新机制,有前所未有的新价值。具体使用了五大技术或创新:加密技术、P2P网络技术、分布式存储技术、共识机制、智能合约。

本质上讲:它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。

区块链起源于比特币,2008年11月1日,一位自称中本聪的人发表了《比特币:一种点对点的电子现金系统》一文,这标志着比特币的诞生。

两个月后理论步入实践,2009年1月3日第一个序号为0的创世区块诞生。几天后2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生 。

区块链特点:

1.去中心化。

在区块链系统中,不存在中心化的管理机构。区块链数据的存储、传输、验证等过程均基于分布式的系统结构,整个网络中不存在中心节点。公有链网络中所有参与的节点都具有同等权利与义务。任一节点的损坏都不会影响整个系统的运作。

2. 开放性。

除了交易各方的私有信息被加密外,区块链的数据对所有人公开,提供灵活的脚本代码系统,整个系统信息高度透明,并且在系统指定的规则范围内,节点之间无法相互欺骗。

3. 自治性。

共识技术,智能合约。

什么是区块链技术?什么叫区块链?

1、区块链技术

狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。

广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

2、区块链的含义

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。

扩展资料

区块链技术基础的三部分

1、点对点之间传输信息的网络,简称P2P网络。有了这个网络,任一节点可以把自己的交易信息向网络进行“广播”,同时获取总账内容。

2、密码技术。***取“公钥”和“私钥”相结合的方式,确保交易账户的安全。

3、共识机制。即网络中的所有节点需对区块链的算法达成共识,节点之间无须互相信任,通过算法计算出的信息可以确保交易可靠并实现数据安全存储。同时,节点产生的每一个新区块,需要得到全网络51%以上的共同认可,才能加入全网的区块链中,构成不可篡改的总账的历史记录之一。

参考资料来源:百度百科-区块链

后缀:P2P网络:区块链的分散化与自治基础