Art*_*sky 4 implementation bootstrapping bittorrent dht
有人能否澄清主线DHT规范中的陈述?
在将第一节点插入其路由表中并且此后启动时,该节点应该尝试在DHT中找到与其自身最近的节点.它通过向更近和更近的节点发出find_node消息来做到这一点,直到找不到更近的节点.
什么"直到它找不到更近"是什么意思?
当我的程序开始发送find_node消息时,它有空的节点集.对find_node消息的每个响应都返回大约8个dht节点.我的程序在列表中收集它们.
我的程序何时必须停止发送查找节点消息?
我认为它必须停止发送它何时会收到dht节点的集合,其中所有元素都在已经收集的节点列表中?
我对吗?
先感谢您.
主线DHT是一个kademlia实现,详情请参阅论文.
从您收到的8个节点中,按节点ID与您自己的ID的接近程度对它们进行排序,然后发送find_node到3个最顶层的节点(距离您最近的3个节点).然后,您将收到8 x 3个节点,将它们插入节点列表中,仍按节点与您的距离排序.继续向find_node3个顶级节点发送消息(忽略已经发送消息的节点),直到您返回的节点已经在列表中.即终止条件是您已向最靠近您的所有8个节点发送消息(在列表顶部).
如本文所述,距离度量是异或.要计算您的节点ID与另一个节点的距离,您需要对节点ID进行异或.结果越低,节点越接近彼此.
在现实生活中,您可能希望通过在任何给定时间保留3个未完成的请求并在超时中途暂时打开更多未完成的请求来更复杂一点.