以太坊節點發現原理

  發現原理

1) 系統第一次啓動隨機生成本機節點NodeId,即爲LocalId,生成後固定不變,本地節點記爲local-eth.spa

該節點爲第一次啓動時生成,之後從新啓動後不會變化。各個節點都會有一個惟一的標誌NodeId。A和B都有各自NODEidget

2) 系統讀取公共節點信息,ping-pang握手完成後,將其寫入K桶原理

讀取公共節點,也就是說你們都知道,各個節點都有相同的公共節點信息。設爲C。也就是說A不知道B,B不知道A,但A和B都知道C.這個是C點也就是知道了A點和B點。循環

3) 進入刷桶循環時間

a)      隨機生成目標節點Id,記爲TargetId,從1開始記錄發現次數和刷新時間。ping

各個節點都會生成目標節點id,也就是說每一個節點同時發起刷桶操做。co

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點。