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

JSO*_*SON 6 p2p dht kademlia

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

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

Jos*_*oon 17

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

一些背景资料:

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

  2. K是Kademlia常量,用于确定节点路由表中Buckets的大小以及应存储一个Data的节点数量.

加盟流程:

  1. BN使用NodeId(通过某种方法分配)和IP地址(托管在其上的计算机的IP)创建新节点.

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

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

  4. NN从中接收K-Closest节点的列表NN.NN添加BN到它的路由表.

  5. NN现在ping这些接收到的K个节点BN,并根据距离将响应的节点添加到必要桶中的路由表中.通过ping这些节点,他们也可以了解NN存在并添加BN到他们的路由表中.

  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. 
    
    Run Code Online (Sandbox Code Playgroud)

    NN这是为了填补这些桶的每一个桶.在此操作之后,NN可以更好地了解网络上距离自身不同距离的节点.

    注意:此步骤不是强制性的,但是我在" 我的Kademlia实现"中执行了此操作,以便每个节点在加入时都能更好地了解网络.

我在"Kademlia DHT简介及其工作原理"中对Kademlia进行了全面介绍