由于DHT节点可能是恶意的,并报告假values
(即假对等体(,我们不应该在收到任何响应后立即停止搜索对等体,希望从另一个好的节点中获得真正的对等体。
我们甚至不必假设有恶意:当我们探索DHT的另一个分支时,如果我们只关注最短的分支,我们可能会错过更多(甚至更好(的同行。
我应该何时停止递归get_peers
DHT搜索?我们是否应该继续搜索,直到搜索空间中的所有节点都用完为止?即,一旦我们没有从最后一位候选人那里得到任何未查询的nodes
。
如果,则对K-最近节点集的迭代查找完成
A( 以下都是真正的
- 飞行中没有任何请求(即得到响应、ICMP错误或超时(的响应可能会更改最近节点的集合
- 最接近的集合至少有K个条目
- 从
nodes
/nodes6
字段中检索到的候选项不比结果集中最远的K项更接近
或
B( 当您查询的候选人用完时
在计算K-closest-set时,您还需要考虑是否有资格进行后续操作(如果有的话(。例如,如果您想继续使用announce_peer
,那么K-closest-node-set必须由返回token
的节点组成,因为不返回令牌意味着无法存储其他值。