网络层
●网络层
●泛指区块链系统的整个网络通信层,区块链数据通过网络层传播进行校验、存储等。主要实现组网、传播与校验功能。
●中心化模式
●架构
●C/S,B/S
●特点
●1. 系统需要一个或多个中心化的服务器承担统一接收和处理请求的职能
●2. 优点:利于服务的统一管理与升级;保持服务一致性;
●3. 缺点:中心化的设备故障会导致服务瘫痪;节点多导致负载压力大。
●点对点网络
●分布式网络架构,网络中的每一个节点都是对等的,可以充当服务提供方及服务获取方。单一或少量节点机器配套通信设备的故障不会影响整个网络的服务提供。
●优点
●节点越多,服务质量越高,扩展性越强。
●缺点
●数据一致性难以保障、资源无法统一管理、垃圾信息多等。
●P2P网络的核心技术:分布式哈希表(Distributed Hash Table, DHT)
●用途
●维护网络中节点清单和和节点能提供的服务清单
●核心思想
●网络中的每个节点都 维护一部分索引信息,然后通过特定的规则将这些节点信息连接起来,使得在查询或注册时,按规则触达相关节点或资源,不同的规则对应着分布式哈希表不同的协议。
●优势
●避免中心化索引和网络风暴。
●分布式哈希表的基础结构
●哈希表,是一种以“键-值”形式进行存储和查询的数据结构。
●在存储时,存储信息经过哈希函数的处理生成一个映射地址,并将信息存储到这个地址中,读取时直接定位到该映射地址提取数据。
●分布式哈希表实现:Kademlia协议
●由于在分布式哈希表的网络中,每个节点只保存一部分资源的索引信息,当网络中有资源变更时不需要全网广播,只需要更新相关节点。
●问题1:如何在每个节点都知道部分信息的情况下实现对全网资源的触达与维护???
●Kademlia协议提出基于距离的解决方案:每一个节点都维护一张哈希表,表中将网络的节点基于距离进行分组,每个分组下存放若干个节点代表。
●问题2:网络中的节点和资源如何建立关系???
●Kademlia协议将网络中的节点和资源均映射成160位的二进制码,编码等于或接近某个资源的节点,需要知道该资源的下载地址。
●Kademlia协议解决了点对点网络中的组网问题,将找资源变成找节点,将找具体节点变成找大类的代表。
●数据传播与校验
●数据传播
●区块数据打包后需要广播给其他节点进行校验和记账。
●根据点对点分布式网络的特点,每个节点只会向其直接连接的节点发送区块信息。收到消息的节点会对区块进行校验,通过后加入该节点本地的区块链,并广播给其他节点,如此循环,直到触达全网的节点。
●以太坊中的数据传播方式
● 向相邻节点直接发送包含完整的区块内容的消息;
●向相邻节点发送只包含区块哈希的消息,收到区块哈希的节点再从发送节点请求对应的完整区块信息。
●数据校验
●点对点网络中,全节点会占用较大的存储量,轻量级节点会存储部分数据,所以轻量级节点需要向相邻节点请求数据来完成数据校验。
●数据校验的内容:依据该区块链项目预定义的清单
● 比特币的数据校验内容:
●(1)工作量证明检查
●(2)区块头中Merkle根的值是否与依据区块体中交易信息计算得到一致
●(3)区块大小再限制范围内
●(4)第一笔交易以外的其他交易不能是铸币交易
●(5)交易的合法性