主线DHT引导过程

5

有人能为我解释一下主线DHT规范中的这句话吗?

将第一个节点插入其路由表并在此后启动时,节点应尝试查找最接近它自己的DHT节点。它通过向更靠近的节点发出find_node消息来实现这一点,直到找不到更接近的节点。

"直到找不到更接近的节点"是什么意思?

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

我的程序何时必须停止发送find_node消息?

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

我是对的吗?

谢谢。

1个回答

5
主流 DHT 是 Kademlia 的一种实现,详情请参见论文
从收到的 8 个节点中,按照它们与您自己 ID 的接近程度进行排序,然后向前三个节点发送 find_node 消息。然后您将收到 8 x 3 个节点,将它们插入到您的节点列表中,仍按照节点与您的距离进行排序。继续向前三个节点发送 find_node 消息(忽略已经发送消息的节点),直到您收到的节点已经在列表中。即终止条件是您已向与您最接近的 8 个节点(列表顶部)发送了消息。
正如论文所解释的那样,距离度量采用异或运算。要计算您的节点 ID 与另一个节点之间的距离,您需要对节点 ID 进行 XOR 运算。结果越小,节点之间的距离越近。
在实际应用中,您可能希望更加复杂地处理这个问题,例如保持每次有 3 个未完成的请求,并在超时一半时暂时打开更多的未完成请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接