向Kademlia添加新节点,构建Kademlia路由表

问题描述 投票:6回答:2

我不能完全围绕Kademlia DHT的加入过程。我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说出来,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴)。

有人可以高度重视这个吗?

p2p dht kademlia
2个回答
17
投票

我假设你已经读过Kademlia paper了。这是我的文章An Introduction to Kademlia DHT & How It Works的摘录

一些背景资料:

  1. 当你运行Kademlia网络时,每个其他节点都应该有一个节点,以便它们加入网络;让我们称之为Bootstrap节点BN
  2. K是一个Kademlia常量,用于确定节点路由表中Buckets的大小以及应存储一个Data的节点数量。

加盟流程:

  1. 使用NodeId(通过某种方法分配)和IP地址(托管在其上的计算机的IP)创建新的节点NN
  2. NNLookupRequest(A.NodeId)发送给BN。查找请求基本上向接收节点询问它知道的给定NodeId的K-Closest节点。在这种情况下,BN将返回它知道的K-Closest节点到NN
  3. BN现在将NN添加到它的路由表中,所以NN现在在网络中。
  4. NNBN收到K-Closest节点的列表。 NNBN添加到它的路由表中。
  5. NN现在ping这些从BN收到的K节点,并且回复的节点将根据距离添加到必要桶中的路由表中。通过ping这些节点,他们还了解NN的存在并将NN添加到他们的路由表中。
  6. NN现在已连接到网络,并且由网络上的节点知道。
  7. 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的完整介绍


-1
投票

我的猜测是它使用一些超级节点和地理空间信息来计算最小生成树。它还可以从超级节点计算voronoi图或双重delaunay三角剖分,并使用它来运行邻近搜索。这是一个例子:http://www.mathworks.de/de/help/matlab/math/spatial-searching.html

© www.soinside.com 2019 - 2024. All rights reserved.