Kademlia论文讨论了桶的组织、分割、合并以及在摘要、简明和混乱的术语中找到正确的桶进行插入。
第2.2节讲述了一组固定的160个桶,每个桶覆盖了keyspace的一个固定子集。但是后面的章节涉及到额外的分割和覆盖keyspace不同部分的桶。这些不适合于固定列表。
Meta:由于混淆反映在许多问题中,并且部分信息已经散布在许多答案中,因此本Q&A旨在提供易于链接的澄清。
Kademlia论文讨论了桶的组织、分割、合并以及在摘要、简明和混乱的术语中找到正确的桶进行插入。
第2.2节讲述了一组固定的160个桶,每个桶覆盖了keyspace的一个固定子集。但是后面的章节涉及到额外的分割和覆盖keyspace不同部分的桶。这些不适合于固定列表。
Meta:由于混淆反映在许多问题中,并且部分信息已经散布在许多答案中,因此本Q&A旨在提供易于链接的澄清。
混淆源自不同版本的论文。
这是来自预印本版本,主要用于以理论方式概述Kademlia的基本属性,并仍反映在完整版本的§2.2和§3中。
许多实际实现采用此方法,但它们不实现桶拆分、合并或节点多重归属。
它涉及将联系人放入与节点共享i
前缀位的第i
个桶中。这意味着该布局使用相对于节点自身ID的距离。
这在第§2.4节中描述。
要实现像在§2.4结尾描述的处理高度不平衡的树或在§4.2中描述的更深层次的非本地分割等改进,需要将每个桶与其所覆盖的键空间范围相关联,这可以类比CIDR范围进行表达,即起始ID和用于掩码ID末尾的共享前缀位数。增加一个前缀位并将添加的位分别设置为0和1来拆分桶。无论采用哪种方法,在响应find_node
请求时填充正确的与请求目标匹配的联系人集并不容易,因为任何单个存储桶可能不足以填充它,因此需要遍历多个存储桶。扫描整个路由表以获取回复的最佳可用候选者可能更简单。
ith
位。如果这是基于1的索引,则共享前缀从开头长度为i
。 - CMCDragonkai