有人可以从主线DHT规范中澄清我的说法吗?


在将第一个节点插入其路由表后以及随后启动时,该节点应尝试在DHT中查找与其自身最近的节点。它通过向越来越近的节点发出find_node消息来进行此操作,直到找不到任何更近的节点为止。


“直到找不到任何接近”是什么意思?

当我的程序开始发送find_node消息时,它具有一组空节点。对find_node消息的每个响应都返回大约8个dht节点。我的程序将它们收集在列表中。

我的程序何时必须停止发送查找节点消息?

我认为它必须在接收到所有已包含在已收集节点列表中的dht节点集时停止发送?

我对吗?

先感谢您。

最佳答案

主线DHT是kademlia的实现,有关详细信息,请参见the paper

从收到的8个节点中,按其节点ID与您自己的ID的接近程度对其进行排序,然后将find_node发送到前3个节点(与您最近的3个节点)。然后,您将再收到8 x 3个节点,将它们插入到节点列表中,但仍根据节点与您的距离来排序。继续向顶部的3个节点发送find_node消息(忽略已向其发送消息的节点),直到返回的节点已经在列表中。即终止条件是您已向离您最近的所有8个节点(在列表顶部)发送了一条消息。

如论文所述,距离度量是XOR。要计算您的节点ID与另一个节点的距离,请对节点ID进行XOR。结果越低,节点之间的距离就越近。

在现实生活中,您可能希望通过在任何给定时间保留3个未完成的请求,并在超时中途暂时打开更多未完成的请求,来进行一些复杂操作。

10-08 00:39