在Kademlia论文的第2.4节的最后一段中,指出为了正确处理高度不平衡的树,Kademlia节点将所有有效联系人保留在至少包含k个节点的子树中,即使这需要分裂桶(bucket),其中节点自身ID不存在。
然而,论文的前一节似乎表明,如果k-bucket已经有k个元素,则对该k-bucket的任何进一步添加都需要删除最陈旧的节点(先ping它以查看其是否存活),否则将缓存该添加,直到k-bucket中有可用的插槽。
这篇论文似乎在这两点上存在矛盾。
在什么情况下应该拆分k-bucket?为什么?将“所有有效联系人”保存在路由表中似乎是不切实际的,因为路由表会很快变得非常大。该例子讨论了一个具有许多以001开头的节点和一个以000开头的节点的树。以000开头的节点将不得不不断地分裂其k-bucket,以便001能够容纳以001开头的每个有效节点?在160位地址空间中,这不会最终可能在000的路由表中存储2^157个节点吗?
引用块中的措辞也非常令人困惑...
“在一个子树中”--在路由表的哪个子树中?
“至少包含k个节点的子树”--我们使用什么指标来确定子树的大小?这里的节点是指Kademlia节点、k-buckets还是其他东西?
然而,论文的前一节似乎表明,如果k-bucket已经有k个元素,则对该k-bucket的任何进一步添加都需要删除最陈旧的节点(先ping它以查看其是否存活),否则将缓存该添加,直到k-bucket中有可用的插槽。
这篇论文似乎在这两点上存在矛盾。
在什么情况下应该拆分k-bucket?为什么?将“所有有效联系人”保存在路由表中似乎是不切实际的,因为路由表会很快变得非常大。该例子讨论了一个具有许多以001开头的节点和一个以000开头的节点的树。以000开头的节点将不得不不断地分裂其k-bucket,以便001能够容纳以001开头的每个有效节点?在160位地址空间中,这不会最终可能在000的路由表中存储2^157个节点吗?
引用块中的措辞也非常令人困惑...
“在一个子树中”--在路由表的哪个子树中?
“至少包含k个节点的子树”--我们使用什么指标来确定子树的大小?这里的节点是指Kademlia节点、k-buckets还是其他东西?
##bittorrent
。 - the8472