主线DHT引导程序

时间:2011-09-28 21:18:04

标签: implementation bootstrapping bittorrent dht

有人可以澄清主线DHT规范中的陈述吗?

  

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

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

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

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

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

我是对的吗?

提前谢谢。

1 个答案:

答案 0 :(得分:6)

Mainline DHT是一个kademlia实现,有关详细信息,请参阅the paper

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

正如本文所述,距离度量是异或。要计算您的节点ID与另一个节点的距离,您需要对节点ID进行异或。结果越低,节点越接近。

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