2011-09-28 56 views
4

有人能澄清我主线DHT规范中的说法吗?主线DHT引导程序

一旦将第一个节点插入到其路由表中,并且在此后启动时,节点应尝试查找DHT中最近的节点。它通过发送find_node消息到更近和更近的节点来做到这一点,直到找不到更近的节点为止。

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

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

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

我认为它必须停止发送时,将收到一套DHT节点,其中在已收集的节点列表中的所有元素?

我对不对?

预先感谢您。

回答

6

Mainline DHT是kademlia的实现,详情请参阅the paper

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

正如文章解释的那样,距离度量是XOR。要计算您的节点ID距另一个节点的距离,请异或节点ID。结果越低,节点彼此越接近。

在现实生活中,你可能会想这样做有点更加复杂,通过保持3个未决请求在任何给定的时间,并通过超时临时开辟出更多优秀的请求一半。