- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
遵循 XLattice 中的 Kademlia 规范,我想知道 iterativeFindNode 操作的确切工作原理以及它对引导和刷新存储桶有何用处。文件说:
At the end of this process, the node will have accumulated a set of k active contacts or (if the RPC was FIND_VALUE) may have found a data value. Either a set of triples or the value is returned to the caller. (§4.5, Node Lookup)
找到的节点将返回给调用者,但规范没有指定返回后如何处理这些值。特别是在刷新和引导的上下文中:
If no node lookups have been performed in any given bucket's range for tRefresh (an hour in basic Kademlia), the node selects a random number in that range and does a refresh, an iterativeFindNode using that number as key. (§4.6, Refresh)
A node joins the network as follows: [...] it does an iterativeFindNode for n [the node id] (§4.7, Join)
运行 iterativeFindNode 操作本身是否足以刷新联系人的 k 桶,或者规范是否忽略了应将结果插入联系人桶?
注意:iterativeFindNode 操作使用底层 RPC 并通过它们可以更新指定的 k-buckets:
Whenever a node receives a communication from another, it updates the corresponding bucket. (§3.4.4, Updates)
但是,只有 FIND_NODE RPC 的接收者会被插入到 k-buckets 中,来自该节点的响应(包含 k-contacts 列表)将被忽略。
最佳答案
However, only the recipient of the FIND_NODE RPC will be inserted in the k-buckets, and the response from that node (containing a list of k-contacts) will be ignored.
我不能代表 XLattice,但在 bittorrent kademlia 实现方面工作让我觉得很奇怪。
传入请求未验证为可达节点(NAT 和防火墙问题),而对传出 RPC 调用的响应是节点确实可达的良好指标。因此传入请求只能添加为尚待验证的暂定联系人,而传入响应应立即用于路由表维护。
但是区分响应中包含的三元组和响应本身很重要。三元组未经验证,另一方面,响应本身可以很好地验证该节点的 active 。
总结:
传入请求
传入响应
响应中的元组
关于algorithm - Kademlia iterativeFindNode 操作是否在 k-buckets 中存储找到联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24402802/
遵循 XLattice 中的 Kademlia 规范,我想知道 iterativeFindNode 操作的确切工作原理以及它对引导和刷新存储桶有何用处。文件说: At the end of this
我是一名优秀的程序员,十分优秀!