我不能完全围绕Kademlia DHT的加入过程.我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说出来,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴).
有人可以高度重视这个吗?
Jos*_*oon 17
我假设你已经阅读了Kademlia论文.以下是我的文章"Kademlia DHT简介及其工作原理"的摘录
一些背景资料:
当你运行Kademlia网络时,每个其他节点都应该有一个节点,以便它们加入网络; 让我们称之为Bootstrap节点BN.
K是Kademlia常量,用于确定节点路由表中Buckets的大小以及应存储一个Data的节点数量.
加盟流程:
BN使用NodeId(通过某种方法分配)和IP地址(托管在其上的计算机的IP)创建新节点.
K发送NN给NN.查找请求基本上向接收节点询问它知道的给定NodeId的K-Closest节点.在这种情况下,LookupRequest(A.NodeId)将返回它知道的K-Closest节点BN.
BN现在将添加NN到它的路由表,BN现在在网络中.
NN从中接收K-Closest节点的列表NN.NN添加BN到它的路由表.
NN现在ping这些接收到的K个节点BN,并根据距离将响应的节点添加到必要桶中的路由表中.通过ping这些节点,他们也可以了解NN存在并添加BN到他们的路由表中.
NN 现在连接到网络,并由网络上的节点知道.
NN 现在循环通过每个K-Buckets
foreach(K-Buckets as KB)
1. NN generates a random NodeId `RNID` // A NodeId that will be in KB
2. NN sends LookupRequest(RNID) to the K-Closest nodes it knows to RNID.
3. The response will be K nodes closest to RNID.
4. NN now fills KB.
Run Code Online (Sandbox Code Playgroud)
NN这是为了填补这些桶的每一个桶.在此操作之后,NN可以更好地了解网络上距离自身不同距离的节点.
注意:此步骤不是强制性的,但是我在" 我的Kademlia实现"中执行了此操作,以便每个节点在加入时都能更好地了解网络.
我在"Kademlia DHT简介及其工作原理"中对Kademlia进行了全面介绍