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