“P2P网络“在区块链当中扮演的角色

 区块链与P2P网络简介
        公组密码体制、共识机制和P2P网络是比特币系统的三大支撑技术, 其中P2P网络作为其系统的底层网络支撑具有极其重要的作用。比特币之后,加密算法与共识机制都有不少的变化与创新,但是P2P网络作为底层网络传输手段的地位却没有任何技术能够代替,可想而知P2P网络在区块链技术当中扮演着无可撼动的地位。
P2P与区块链的关系
        P2P在区块链的结构模型中处于网络层,网络层的主要目的是实现区块链网络中节点之间的信息传播、验证和交流。区块链网络本质上是一个P2P网络,每个节点既能接受信息也能产生信息。节点之间通过维护一个共同的区块链来保持通信。
        区块链网络中,每一个节点都可以创造新的区块,在新区块被创造后  会以广播的形式通知其他节点,其他节点会对这个区块进行验证,当全区块链网络中超过规定数量的用户验证通过后,这个新区块就可以被添加到主链上了。在区块链网络中,每一个节点都会如前面介绍的P2P网络模型一样,连接网络中的其他一些节点,节点在不同的区块链中使用P2P网络 进行节点间信息的传播和验证时,采用的机制与算法会有所差异,比如:比特币网络使用相对简单的P2P协议方法来执行对等节点的发现和节点间的通信;以太坊使用的是以Kadelima协议为基础的方式;而超级账本采用基于Gossip的协议实现P2P的数据分发。

区块链网络的可靠性
        由于区块链使用P2P网络作为底层网络架构,因而具有了P2P网络的高容错的特点,因为网络中的资源是分布在每一个节点中的,即使一个节点遭到了破坏,整个网络并不会受到太大的影响,而且点对点网络具有自我调节能力,在一些节点离开之后,能够自动调节其网络拓扑结构,因此,节点的加入或离开都比较方便,而且不会影响这个网络。并且,区块链网整中节点越多,网络的健壮性就越好。综合来说,区块链网络是点对点网的升级版,在点对点网络的基础上,增加了一些区块链对数据的验证,  从而保证了区块链网络的安全性和可靠性。
        由于区块链本质上是分布式的分类账本,因此,P2P网络模式是当前主流区块链运作的基础。它为区块链提供了如下技术优势。
1.防止单点攻击
        当网络中某个节点丢失而导致数据丢失时,因为其他节点仍然保留该数据副本,所以并不会造成整个网络中该数据的丢失。
2.较强的容错性
        即使某些节点出现故障,也不会对整个网络造成损害,因为有多个信息来源可用。
3.较好的兼容性与可扩展性
        可以轻松适应越来越多的节点,并适应网络配置的频繁变化。以比特币系统为例,在区块链中,节点负责运行维护整个比特币系统。节点通过一种发送事务的机制,更新区块链,并有效地将信息传递到网络上的每个节点。该发送事务机制中,实现信息的全网发布就是采用了“绯闻协议”,即任意节点都将数据发送给它所知道的每个节点,并从这些节 点接收数据,然后所有的节点依据它们收到的数据更新相应的内容,这样就实现了信息在整个网络中有效传播。
        当然,采用P2P的区块链网络并非完美无缺,仍然存在一些安全隐患网络专家Bahack指出,与普通节点相比,具有良好网络连接的攻击者更容易发起块丢弃攻击(Block Dis-carding Attack)。攻击者将多个具有良好网络连接的节点置于网络中,使其具有网络连接优势,进而不但可以方便
地获知新被挖掘的区块,也可以比其他节点更加快速地传播某个区块。在此攻击中,当攻击者挖出新区块时,先不公布,一旦得知任何合法节点公布区块时,攻击者便立即发布自己的采矿块,并且利用布置好的节点快速地播报到整个网络,使得该合法节点开采的区块被丢弃。块丢弃攻击带来
的威胁十分巨大,攻击者不仅浪费了合法节点的算力资源,而且可以选择地记录某些交易(每个区块大小有限,因此每个区块记录的交易数目有限)从而使得另一些重要合法交易的确认被延误。
        Feld等学者的研究表明,在比特币系统中,若对等节点所连接的大部分对等节点都位于同一个自治系统,则意味着P2P网络连接不良。在这种情况下,添加新的区块到区块链中可能存在困难。若有攻击者发起类似这样的攻击,则将使得分布式共识的实现变得十分困难,区块链数据的合法性与完整性将无法得到保障,这将给区块链的正常运行带来严重的灾难。

实现案例:比特币系统的P2P网络  

        比特币网络中存在不同类型的节点,不同节点在P2P网络中扮演的角色也有所不同,其中发挥核心作用的是完整节点,比特币网络协议使用完整节点为区块和交易的交换协作来维护P2P网络。在把区块和交易转发到其他节点之前,完整节点下载和验证当前区块和交易。文档节点是存储了  整个区块链并且能够为其他节点提供历史区块的节点。轻量级节点(修剪节点)是不存储整个区块链的节点。许多轻钱包简单支付验证(Simplfed  Payment Verification, SPV)客户端也使用比特币网络协议连接到完整节点。  
        客户端也使用比特币网络协议连接到完整节点。  下面简单描述一下比特币系统的P2P网络的工作过程。由于P2P网络  没有一个服务器,那么比特币网络中的节点是如何发现其他节点的呢?这  就需要节点的发现协议来实现。首先该节点会启动一个网络端口(比特币  中通常是8333),通过这个端口与其他已知节点建立连接。连接时,会发  送一条包含认证内容的消息进行“握手”确认。由于比特币系统的P2P网络是靠彼此共享节点信息来寻找其他节点的,当一个节点与其他节点建立连接后,会发送一条包含自身IP地址的消息给邻近的节点,而邻居节点收到后会再次发送给自己的邻居,以此逐步完成全网络的信息同步。当然  节点并不是只能被动等待接收信息,也可以自己主动发送请求给其他节点索取这些地址信息。如果发现节点之间能够连接成功,那么就会被记录下  来,下次启动时就会自动去寻找上次成功连接过的节点。也就是说,比特币系统的P2P网络在失去已有连接时会去主动发现新节点,同时也为其地节点提供链接信息,以此来完成整个网络的信息同步。
        为了提供实际的比特币系统的P2P网络的例子,本节使用比特币核心作为完整节点代表,使用比特币J作为SPV客户端代表。两个程序都是灵活的,所以仅描述了默认的行为,而且为了隐私,例子中实际的P地址使用RFC5737保留的IP地址替代。

猜你喜欢

转载自blog.csdn.net/m0_64396688/article/details/124539584