以太坊源码(01):P2P网络及节点发现机制

当前位置:首页 > 币圈百科 > 以太坊源码(01):P2P网络及节点发现机制

以太坊源码(01):P2P网络及节点发现机制

2022-11-12币圈百科421
1?分布式网络简介1.1 Kad网络简介1.2 Kad网络节点距离1.3 K桶

1.4 Kad通信协议

2?neighbor

2.1 node table类

2.2的主要成员?邻居发现方法

2.3?邻居网络拓扑和刷新机制。

1?分布式网络简介

以太坊底层的分布式网络,即P2P网络,使用的是经典的Kademlia网络,简称kad。

1.1?Kad网络简介

Kademlia由PetarP提出。2002年美国纽约大学的Manmounkov和DavidMazieres。它是一种分布式哈希表(DHT)技术,基于异或运算进行距离测量,已经在BitTorrent、BitComet、Emule等软件中得到应用。

1.2 蓑衣网小编2022Kad网络节点距离?马鞭

以太网中节点间距离的计算方法:

node 1:node 1 NodeId node 2:node 2 NodeId

1.3k bucket

Kad的路由表是由被称为k bucket的数据构造而成的,它记录了节点的NodeId、距离、端点、ip等信息。以太坊k桶按照与目标节点的距离排序,共有256个k桶,每个k桶包含16个节点。

p1

图1.1

1.4 Kad通信协议

以太网Kad网络中节点之间的通信基于UDP,主要由以下命令组成。如果两个节点之间的乒乓握手通过,则相应的节点被视为在线。

p2

2?neighbor

2.1 NodeTable类的主要成员

C版以太坊源代码,NodeTable是以太坊?P2P网络的关键类,所有与邻居节点相关的数据和方法都由NodeTable类实现。

蓑衣网小编2022 p3

p4

2.2?邻居发现方法

邻居节点是加入K桶并通过乒乓握手的节点。

p5

图2.1

邻居节点发现过程描述:

系统第一次开始随机生成本地节点NodeId,记录为LocalId,生成后会固定,本地节点记录为local-eth。系统读取公共节点信息,乒乓握手后写入K桶。系统每7200毫秒刷新一次K桶。刷新K桶的过程如下:[X] A?马鞭马鞭马鞭马鞭马鞭生成一个随机的目标节点Id,记录为TargetId,从1开始记录发现次数和刷新时间。

b?马鞭马鞭马鞭马鞭马鞭计算TargetId和LocalId之间的距离,记为DLT

C?马鞭马鞭马鞭马鞭K桶中节点的马鞭NodeId记录为KadId,计算KadId与TargetId的距离,记录为DKT

d .马鞭马鞭马鞭马鞭在K桶中找出Dlt大于DKT的节点,记录为K桶节点,向K桶节点发送FindNODE命令,FindNODE命令包含TargetID

e .马鞭马鞭马鞭马鞭马鞭收到FindNODE命令后,蓑衣网小编2022K-bucket节点也执行b-d的过程,使用Neighbours命令将K-bucket中找到的节点发送回本地节点。

f?马鞭马鞭马鞭马鞭马鞭马鞭本地节点收到邻居后,将收到的节点写入K桶。

g?马鞭马鞭马鞭马鞭如果搜索次数小于8次,刷新时间小于600ms,返回步骤B循环执行。

2.3?邻居网络拓扑和刷新机制。

p6

图2.2

1 TargetId是一个随机生成的虚拟节点Id。

2?以太坊Kad网络与传统Kad网络的区别:

在发现邻居节点的八个周期中,以太坊节点搜索到的节点在距离上收敛到随机生成的TargetId。传统的Kad网络在发现一个节点时,在距离上收敛到该节点本身。

本文由HPB(核心链)团队编写。

接下来我介绍《以太坊源码(02):交易收发机制》。

以太坊源码(01):P2P网络及节点发现机制 | 分享给朋友: