遵循XLattice上的 Kademlia 规范,我想知道iterativeFindNode操作的确切工作原理以及它对引导和刷新存储桶有何用处。文件说:
在此过程结束时,节点将累积一组 k 个活动联系人,或者(如果 RPC 为 FIND_VALUE)可能已找到数据值。一组三元组或值返回给调用者。(§4.5,节点查找)
找到的节点将返回给调用者,但规范没有指定一旦返回这些值如何处理。特别是在刷新和引导的上下文中:
如果在 tRefresh(基本 Kademlia 中为一小时)的任何给定存储桶范围内没有执行节点查找,则节点会在该范围内选择一个随机数并执行刷新,使用该数字作为键的 iterativeFindNode。(§4.6,刷新)
节点按如下方式加入网络:[...] 它为 n [节点 id] 执行 iterativeFindNode(第 4.7 节,加入)
运行iterativeFindNode操作本身是否足以刷新联系人的 k 桶,或者规范是否忽略了结果应插入联系人桶中?
注意:iterativeFindNode操作使用底层 RPC,通过它们可以更新指定的 k-buckets:
每当一个节点接收到另一个节点的通信时,它都会更新相应的存储桶。(§3.4.4,更新)
但是,只有 FIND_NODE RPC 的接收者会被插入到 k-buckets 中,并且来自该节点的响应(包含 k-contacts 列表)将被忽略。