1

遵循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 列表)将被忽略。

4

1 回答 1

2

然而,只有 FIND_NODE RPC 的接收者会被插入到 k-buckets 中,并且来自该节点的响应(包含 k-contacts 列表)将被忽略。

我不能为 XLattice 说话,但是在从事 bittorrent kademlia 实现工作后,这让我觉得很奇怪。

传入请求未被验证为可访问节点(NAT 和防火墙问题),而对传出 RPC 调用的响应是节点确实可访问的一个很好的指标。因此,传入的请求只能作为暂定联系人添加,这些联系人仍有待验证,而传入的响应应该对路由表维护立即有用。

但是区分响应中包含的三元组和响应本身很重要。三元组未经验证,另一方面,响应本身可以很好地验证该节点的活跃性。

概括:

传入请求

  • 对路由表半有用
  • 可达性需要测试

传入响应

  • 对路由表立即有用

响应中的元组

  • 自己没用
  • 但是您最终可能会在查找过程中访问它们,因此它们可以成为响应
于 2014-11-20T11:01:08.020 回答