以太坊节点发现原理

原文地址:https://blog.csdn.net/haolifengwang/article/details/80348776

发现原理

1) 系统第一次启动随机生成本机节点NodeId,即为LocalId,生成后固定不变,本地节点记为local-eth.

该节点为第一次启动时生成,以后重新启动后不会变化。各个节点都会有一个唯一的标志NodeId。A和B都有各自NODEid

2) 系统读取公共节点信息,ping-pang握手完成后,将其写入K桶

读取公共节点,也就是说大家都知道,各个节点都有相同的公共节点信息。设为C。也就是说A不知道B,B不知道A,但A和B都知道C.这个是C点也就是知道了A点和B点。

3) 进入刷桶循环

a)      随机生成目标节点Id,记为TargetId,从1开始记录发现次数和刷新时间。

各个节点都会生成目标节点id,也就是说每个节点同时发起刷桶操作。

b)      计算TargetId与LocalId的距离,记为Dlt

计算本地节点与目标节点的距离。

c)       k桶中节点NodeId记为KadId,计算KadId与TargetId的距离,记为Dkt

各个节点中k通中初始化为公共节点信息,

d)      找出K桶中Dlt大于Dkt的节点,记为K桶节点,向k桶发送FindNODE命令,FindNODE命令包括TargetId,

因为K桶节点已经知道发送FindNode命令的本地节点,所以现在需要记录本地节点信息。也就是说A向C点发送消息,C无需在记录A点信息。

e)      k桶节点收到FindNODE命令后,统一执行b-d的过程,将从K通中找到的节点使用Neighboras命令发回给本机节点。

C点将B点的信息发给A点。

f)        本机节点收到Neighbour后,将收到的节点写入到K桶中

A点将B点信息进行记录

 

这样A点就知道B点了。同样的过程B点通过C点知道A点。

猜你喜欢

转载自blog.csdn.net/Metal1/article/details/80443180