主页 > imtoken平台 > 科普 | 了解以太坊的 P2P 网络

科普 | 了解以太坊的 P2P 网络

imtoken平台 2023-01-31 05:49:18

本文旨在帮助您了解 P2P 网络并解释以太坊的一些实现细节。 P2P技术利用终端设备丰富的资源来弥补中心化系统的不足,从1990年代开始,该技术被eMule、bitTorrent、Skype等知名软件所采用。 P2P 技术也是比特币或以太坊区块链系统的核心组成部分(我们的项目 Shyft Network 就是从这些区块链衍生而来)。 很多人听说过P2P,但不知道它是什么。 因此,让我们首先了解什么是 P2P 网络。

什么是P2P网络?

对等 (P2P) 网络是覆盖网络,也就是说,它建立在公共 Internet 之上。 从数学的角度来看,P2P 网络可以看作是一个有向图 G = (V, E),其中 V 是网络中的一组对等节点,E 是一组由对等节点连接的边(也即节点之间的连接集)。 每个对等节点 p 都有一个唯一的标识号 pid。 集合E中的边(p,q)表示p可以通过直连路径向q发送消息; 也就是说,p 使用 q 的 pid 作为目的地址向网络上的 q 发送消息。 尽管在底层的 TCP/IP 网络中,相似的 IP 地址可以被翻译为在地理上彼此接近,但很少有如此明确的直接关联。

siteblockvalue.com 雷电网络以太坊_以太坊网络_以太坊网络发币

理想情况下,所有对等点都应通过路径连接。 但是因为每个节点只有网络拓扑和其他对等节点的不完整视图,所以网络覆盖需要中间节点将消息转发到正确的目的地。 图的结构为每对节点提供了多条中间路径,因此即使对等节点发生变化,图的连通性也可以提供网络弹性。 对于每个对等节点,图的连通性通过与其他对等节点的邻接关系来反映。 当对等点加入或离开网络时,相邻的对等点可能持有不正确的邻接信息。 因此,网络覆盖维护机制(Overlay maintenance mechanisms)用于保存更新的邻接信息以太坊网络,使所有节点保持连通性。

siteblockvalue.com 雷电网络以太坊_以太坊网络发币_以太坊网络

P2P 网络中的参与者向其他网络参与者提供一些资源。 无需中央协调器,每个对等方都贡献计算周期 (CPU)、磁盘存储和网络带宽。 在传统的客户端-服务器模型中,服务器提供资源,客户端使用资源; 相比之下,在 P2P 网络中,对等节点既是网络资源的供应者,也是网络资源的消费者。 因此,P2P 网络可以很好地解决客户端-服务器模型的一些缺点,例如可扩展性和单点故障。

siteblockvalue.com 雷电网络以太坊_以太坊网络发币_以太坊网络

一般来说,P2P 网络都会有一个门槛,资源贡献高于这个门槛的节点才能加入网络。 衡量资源贡献的标准应该是公平的以太坊网络,例如要求网络中每个对等节点的平均贡献应该在P2P系统整体平均的统计范围内等。资源贡献应该是互惠互利的。 贡献后可获得的收益吸引用户加入P2P应用。

以太坊的 P2P 网络如何运作?

以太坊官方的客户端节点软件Geth,基于覆盖维护机制(称为Kademlia分布式哈希表)实现了对等节点发现协议(RLPx node discovery protocol)。 虽然 Kademlia 旨在有效地定位和存储 P2P 网络中的内容,但以太坊的 P2P 网络仅使用它来发现新的对等点。

卡德姆利亚

以太坊网络中,每个客户端节点都配备了一个 enodeID,然后使用 SHA3 算法将其散列为 256 位的值。 Kademlia 使用异或运算来定义距离,因此两个 256 位数字之间的距离就是它们的按位异或。 每个对等节点都有一个包含256个不同桶的数据结构,每个桶i存储16个节点,距离节点的距离在2i-1和2i之间。 为了发现新的对等节点,以太坊节点选择自己作为目标x,从桶中找到距离目标x最近的16个节点,然后请求这16个节点从自己的桶中找到16个节点。 节点“更接近”目标 x 并返回,这样最多将获得 16x16 个新发现的节点。 然后请求新发现的16x16个节点中距离目标x最近的16个节点,让他们返回距离x更近的16个节点。 这个过程不断迭代,直到找不到新的节点。

以太坊网络发币_siteblockvalue.com 雷电网络以太坊_以太坊网络

-异或运算示意图-

以太坊网络_以太坊网络发币_siteblockvalue.com 雷电网络以太坊

-桶和距离示意图-

点对点通信

Geth 使用 UDP 连接在 P2P 网络上交换信息。 UDP 消息有 4 种类型。 *ping* 消息请求 *pong* 消息作为回报。 这对消息用于判断邻居节点是否可以响应。 *findnode* 消息请求 *neighbors* 消息(其中包含响应节点已知的 16 个节点的列表)作为回报。 建立对等连接后,Geth 节点通过加密和经过身份验证的 TCP 连接交换区块链信息。

以太坊网络_siteblockvalue.com 雷电网络以太坊_以太坊网络发币

数据结构

Geth 客户端使用两种数据结构来存储有关其他节点的信息。 首先是一个名为db的长期数据库,它存储在磁盘上,客户端重启后数据持久化。 数据库包含有关客户端与之交互的每个节点的信息。 db 中的每条记录包含节点 ID、IP 地址、TCP 端口、UDP 端口、最后一次(此客户端)向节点发送 ping(在记录中)、最后一次从节点接收到 pong 以及节点响应失败的 findnode 消息。 如果距离从节点接收到最后一条 pong 消息已经超过一天,则该节点将从数据库中删除。

第二种数据结构是称为表的短期数据库。 当客户端重新启动时,该表为空。 该表包含 256 个桶,每个桶最多存储 16 条记录。 每条记录都存储有关其他以太坊节点的信息——节点的 ID、IP 地址、TCP 端口和 UDP 端口。 如果记录中的某个节点连续响应findnode消息失败,失败次数超过4次,则将其从表中移除。

当客户端第一次启动时,它的数据库是空的,只知道大约 6 个硬编码的启动节点。 随后,当客户端开始发现对等节点时,客户端根据上述机制将节点添加到数据库和表中。

如果你想阅读更多关于以太坊 P2P 网络的信息,这里有一些由以太坊社区成员贡献的文章:

参考资料:Vasilios Darlagiannis,(2010)。 P2P 系统和覆盖网络,[PDF 文件] 取自:S. Umamaheswari 和 Dr. V. Leela,(2011 年 3 月 1 日)。 P2P 覆盖维护算法,[PDF 文件] 检索自:

(完)


原文链接:

https://medium.com/shyft-network-media/understanding-ethereums-p2p-network-86eeaa3345

作者: Larry Hu

翻译 & 校对: haiki & 阿剑


你可能还喜欢: