我不能完全围绕Kademlia DHT的加入过程。我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说出来,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴)。
有人可以高度重视这个吗?
我假设你已经读过Kademlia paper了。这是我的文章An Introduction to Kademlia DHT & How It Works的摘录
一些背景资料:
BN
。K
是一个Kademlia常量,用于确定节点路由表中Buckets的大小以及应存储一个Data的节点数量。加盟流程:
NN
。NN
将LookupRequest(A.NodeId)
发送给BN
。查找请求基本上向接收节点询问它知道的给定NodeId的K-Closest节点。在这种情况下,BN
将返回它知道的K-Closest节点到NN
。BN
现在将NN
添加到它的路由表中,所以NN
现在在网络中。NN
从BN
收到K-Closest节点的列表。 NN
将BN
添加到它的路由表中。NN
现在ping这些从BN
收到的K节点,并且回复的节点将根据距离添加到必要桶中的路由表中。通过ping这些节点,他们还了解NN
的存在并将NN
添加到他们的路由表中。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.
NN
为它们的每一个桶做这个来填补这些桶。在此操作之后,NN
可以更好地了解网络上距离自身不同距离的节点。
注意:此步骤不是强制性的,但是我在My Implementation of Kademlia中执行了这一步骤,以便每个节点在加入时都能更好地了解网络。我在An Introduction to Kademlia DHT & How It Works写了一篇关于Kademlia的完整介绍
我的猜测是它使用一些超级节点和地理空间信息来计算最小生成树。它还可以从超级节点计算voronoi图或双重delaunay三角剖分,并使用它来运行邻近搜索。这是一个例子:http://www.mathworks.de/de/help/matlab/math/spatial-searching.html。