【发布时间】:2015-11-14 18:54:56
【问题描述】:
在 Kademlia 论文中,第 2.4 节的最后一段指出,为了正确处理高度不平衡的树...
Kademlia 节点将所有有效联系人保存在大小至少为 k 的子树中 节点,即使这需要拆分节点自己的存储桶 ID 不存在。
但是,论文的前一部分似乎指出,如果 k-bucket 已经有 k 个元素,则对该 k-bucket 的任何进一步添加都需要删除最旧的节点(首先对其进行 ping 操作以查看其是否存在)或以其他方式缓存添加,直到该 k-bucket 中的插槽可用。
这篇论文似乎与这两点自相矛盾。
在什么条件下应该拆分 k-bucket,为什么?在路由表中保留“所有有效联系人”似乎不切实际,因为路由表会很快变得非常大。该示例讨论了一棵树,它有许多以 001 开头的节点和一个以 000 开头的节点。以 000 开头的节点必须不断地将其 k-bucket 拆分为 001 以容纳每个以 001 开头的有效节点?在 160 位的地址空间中,那最终不会在 000 的路由表中存储 2^157 个节点吗??
引用块中的措辞也很混乱……
"in a subtree" -- 在路由表的哪个子树中?
“大小至少 k 个节点”——我们使用什么度量来确定子树的大小?在这种情况下,节点是指 kademlia 节点或 k-buckets 或其他什么?
【问题讨论】: