有人能澄清一下主干线DHT的说明吗?
在将第一个节点插入其路由表并随后启动时,该节点应尝试在DHT中找到与其自身最近的节点。它通过向越来越近的节点发出find_node消息来做到这一点,直到它找不到更接近的节点。
“直到找不到更近的距离”意味着什么?
当我的程序开始发送find_node消息时,它有一组空节点。每个对find_node消息的响应返回大约8个dht节点。我的程序把它们收集在列表中。
我的程序何时必须停止发送查找节点消息?
我认为它必须停止发送,当它将接收dht节点集合时,所有元素都在已经收集的节点列表中?
我说的对吗?
提前谢谢你。
发布于 2011-09-29 04:20:14
Mainline是一个kademlia实现,有关详细信息,请参阅论文。
从您接收的8个节点中,按照它们的节点- ID与您自己的ID的接近程度对它们进行排序,然后将find_node发送到最上面的3个节点(离您最近的3个节点)。然后再接收8x3个节点,将它们插入到节点列表中,按节点与您的距离的大小排序。继续向3个顶级节点发送find_node消息(忽略已经发送消息的节点),直到返回的节点已经在列表中。也就是说,终止条件是您已经向与您最近的所有8个节点发送了一条消息(位于列表的顶部)。
正如本文所解释的那样,距离度量是异或。要计算您的节点ID与另一个节点的距离有多远,您可以将节点ID异或。结果越低,节点之间就越接近。
在现实生活中,您可能想要这样做更复杂一点,保持3个未完成的请求在任何时间,并暂时打开更多的未决请求中途超时。
https://stackoverflow.com/questions/7589717
复制相似问题