> For the complete documentation index, see [llms.txt](https://dxchain.gitbook.io/dxchain-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dxchain.gitbook.io/dxchain-wiki/zhong-wen-she-qu/dxchain-v3-ji-shu-wen-dang/4.-ji-shu-de-she-ji-yuan-li-yu-jia-gou/4.6-p2p-fen-bu-shi-wang-luo-ceng.md).

# 4.6 P2P分布式网络层

P2P网络技术在区块链中常用来用于不同的节点之间的通信与信息互换。本质上，P2P网络是一种网络覆盖层（overlay network），建立在公开互联网之上。P2P网络从数学的角度可以看做一个有向图，每一台计算机都是网络中的对等节点。如图所示，在理想情况下，所有的对等节点之间至少存在一条路径可以实现网络通信，但因为每个节点对网络拓扑和其他对等节点只有一个不完整的视图，所以网络覆盖层需要中间节点将消息转发至正确目的。图的连通性性质确保了即使存在对等节点改变，整个P2P网络也可以迅速恢复通信能力。对每个对等节点来说，图的连通性通过与其他对等节点的邻接关系来反映。当对等节点加入或者离开网络，邻接的对等节点可能会持有不正确的邻接信息，因此需要**网络覆盖层维护机制**（Overlay maintenance mechanisms）保存更新的邻接信息，使得所有节点间保持连通性。

<figure><img src="/files/MsU9Ql4cjVrqi9HC72lT" alt=""><figcaption><p>图8：P2P网络的有向图</p></figcaption></figure>

DxChain使用了名为Kademlia（分布式哈希表技术）的覆盖层维护机制，实现了对等节点发现协议（RLPx节点发现协议）。每一个区块链节点都配备有一个enodeID，作为区块链网络中的自身节点标识。除此之外，为了发现网络中新的对等节点，每个区块链对等节点都拥有一个包含256个不同节点的节点集合，每个集合 i 中存储与本节点距离在 2i-1 到 2i 之间的16个节点。DxChain节点选择自己作为目标x，从集合中寻找到16个与目标x最近的节点，之后请求这16个节点，让它们从各自的节点集合中各找出16个与目标x“更近”的节点，如此会得到最多16x16个新发现的节点，重复上述流程，直至没有新的节点发现为止。

同样，当DxChain节点加入或者退出区块链网络时，Kademlia可以迅速进行网络维护，确保所有节点可以在网络中以最优路径和其他节点通信。当建立好对等节点的连接之后，DxChain节点通过加密和认证的TCP连接与其他对等节点之间交换区块链信息，其中包含不同类型交易的广播、区块产生的广播、节点间的数据同步等，确保所有的节点维护同一套区块链账本，以此达到区块链网络中节点信息的一致性。
