4

有人可以澄清一下主线 DHT 规范中的声明吗?

在将第一个节点插入其路由表以及此后启动时,该节点应尝试在 DHT 中找到离自身最近的节点。它通过向越来越近的节点发出 find_node 消息来做到这一点,直到找不到更近的节点。

“直到找不到更近的地方”是什么意思?

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

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

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

我对吗?

先感谢您。

4

1 回答 1

6

Mainline DHT 是一个 kademlia 实现,详情请参阅论文

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

正如论文所解释的,距离度量是 XOR。要计算您的节点 ID 与另一个节点的距离,您可以对节点 ID 进行异或运算。结果越低,节点之间的距离越近。

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

于 2011-09-29T04:20:14.383 回答