# 4.6 P2P分布式网络层

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

<figure><img src="https://402733873-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ft7Yq0wZVG1pJ3PiTzoaE%2Fuploads%2FZqKJuKXNQP9BsQqwNwCD%2Fimage.png?alt=media&#x26;token=b214de4b-55b0-4348-8e91-482b1c913cb5" 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连接与其他对等节点之间交换区块链信息，其中包含不同类型交易的广播、区块产生的广播、节点间的数据同步等，确保所有的节点维护同一套区块链账本，以此达到区块链网络中节点信息的一致性。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET 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?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
