【问题标题】:Mainline DHT bootstrap process主线 DHT 引导过程
【发布时间】:2011-09-28 21:18:04
【问题描述】:

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

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

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

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

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

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

我说的对吗?

提前谢谢你。

【问题讨论】:

    标签: implementation bootstrapping bittorrent dht


    【解决方案1】:

    Mainline DHT 是一个 kademlia 实现,详情见the paper

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2021-05-16
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多