implementation - 主线 DHT 引导过程

标签 implementation bootstrapping bittorrent dht

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

Upon inserting the first node into its routing table and when starting up thereafter, the node should attempt to find the closest nodes in the DHT to itself. It does this by issuing find_node messages to closer and closer nodes until it cannot find any closer.



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

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

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

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

我对吗?

先感谢您。

最佳答案

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

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

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

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

关于implementation - 主线 DHT 引导过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589717/

相关文章:

c - 原始 C 中不完整的 beta 函数

c# - TargetedPatchingOptOut 和抽象方法的其他属性

angularjs - 重新打开并向已引导的应用程序添加依赖项

php - 如何在具有 12 个网格系统的 Bootstrap 中创建 8 列?

php - bootstrap 通常如何工作,尤其是在 Zend Framework 中?

bittorrent - 是否可以仅使用 aria2 进行播种?

go - 为什么所有的BitTorrent跟踪器都给我相同的响应?

c++ - 如何在自定义类中隐藏迭代器和容器实现(无提升)

Java 可实现的类创建?

c# - MonoTorrent 分发软件