11

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

有人可以对此进行高级别的介绍吗?

4

2 回答 2

25

我假设你已经阅读了Kademlia 论文这是我的文章Kademlia DHT 简介及其工作原理的摘录

一些背景资料:

  1. 当您运行 Kademlia 网络时,应该始终有一个其他节点都知道的节点,以便它们加入网络;让我们称之为 Bootstrap 节点BN

  2. K是一个 Kademlia 常量,它决定了节点路由表中 Buckets 的大小以及应该存储一段数据的节点数量。

加盟流程:

  1. NN使用 NodeId(通过某种方法分配)和 IP 地址(托管它的计算机的 IP)创建一个新节点。

  2. NN发送LookupRequest(A.NodeId)BN. 查找请求基本上向接收节点询问它知道给定 NodeId 的 K-最近节点。在这种情况下,BN会将它知道的 K-最近节点返回给NN.

  3. BN现在将添加NN到它的路由表中,因此NN现在在网络中。

  4. NN从 接收到自己的 K-最近节点列表BNNN添加BN到它的路由表。

  5. NN现在 ping 从 接收到的这些 K 个节点BN,并且根据距离将回复的节点添加到它的路由表中的必要存储桶中。通过 ping 这些节点,它们还了解NN存在并添加NN到它们的路由表中。

  6. NN现在已连接到网络并为网络上的节点所知。

  7. NN现在循环遍历它的每个 K-Bucket

    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可以更好地了解网络上距自身不同距离的节点。

    注意:这一步不是强制性的,但是我在我的 Kademlia 实现中这样做了,以便每个节点在加入时对网络有更好的了解。

我在An Introduction to Kademlia DHT & How It Works中写了一篇关于 Kademlia 的完整介绍

于 2014-03-30T05:22:27.320 回答
-3

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

于 2013-10-23T11:17:24.440 回答