4.6 P2P分布式网络层
Last updated
Last updated
P2P网络技术在区块链中常用来用于不同的节点之间的通信与信息互换。本质上,P2P网络是一种网络覆盖层(overlay network),建立在公开互联网之上。P2P网络从数学的角度可以看做一个有向图,每一台计算机都是网络中的对等节点。如图所示,在理想情况下,所有的对等节点之间至少存在一条路径可以实现网络通信,但因为每个节点对网络拓扑和其他对等节点只有一个不完整的视图,所以网络覆盖层需要中间节点将消息转发至正确目的。图的连通性性质确保了即使存在对等节点改变,整个P2P网络也可以迅速恢复通信能力。对每个对等节点来说,图的连通性通过与其他对等节点的邻接关系来反映。当对等节点加入或者离开网络,邻接的对等节点可能会持有不正确的邻接信息,因此需要网络覆盖层维护机制(Overlay maintenance mechanisms)保存更新的邻接信息,使得所有节点间保持连通性。
DxChain使用了名为Kademlia(分布式哈希表技术)的覆盖层维护机制,实现了对等节点发现协议(RLPx节点发现协议)。每一个区块链节点都配备有一个enodeID,作为区块链网络中的自身节点标识。除此之外,为了发现网络中新的对等节点,每个区块链对等节点都拥有一个包含256个不同节点的节点集合,每个集合 i 中存储与本节点距离在 2i-1 到 2i 之间的16个节点。DxChain节点选择自己作为目标x,从集合中寻找到16个与目标x最近的节点,之后请求这16个节点,让它们从各自的节点集合中各找出16个与目标x“更近”的节点,如此会得到最多16x16个新发现的节点,重复上述流程,直至没有新的节点发现为止。
同样,当DxChain节点加入或者退出区块链网络时,Kademlia可以迅速进行网络维护,确保所有节点可以在网络中以最优路径和其他节点通信。当建立好对等节点的连接之后,DxChain节点通过加密和认证的TCP连接与其他对等节点之间交换区块链信息,其中包含不同类型交易的广播、区块产生的广播、节点间的数据同步等,确保所有的节点维护同一套区块链账本,以此达到区块链网络中节点信息的一致性。