我已经有一段时间没有真正阅读这篇论文了,所以我主要是通过我的实现经验来拼凑这个内容,而不是试图将我头脑中的概念与论文中的正式定义相匹配,因此请带着一点怀疑看待以下内容。
"最不重要的空桶"和"最重要的k桶"是什么意思?
这基本上是指相对于节点自身ID的XOR距离排序的桶。
如何用视觉方式解释深度和桶高度?
每个桶覆盖一个键空间区域。例如,从0x0000简化为2个字节到0x0FFF表示1/16的键空间。这可以用类似CIDR的掩码表示,0x0/4(4个前缀位)。
这更或多或少是一个桶的深度。
有几种组织路由表的方法。“正确”的方法是将其表示为树形或基于桶所代表的最低ID的排序列表。
这种方法允许任意的桶分割操作,因为一些路由表优化需要,并且还可以用于实现节点多重归属。
一种简化的实现方式是使用固定长度的数组,并将每个桶放置在相对于节点自身ID的共享前缀位的位置。即,数组中的位置0将具有0个共享前缀位,它是最远的桶,覆盖50%的键空间和最重要的位是节点自身ID的反转MSB的桶。
在这种情况下,深度就是数组位置。
如何理解第二个和第三个结论,例如,为什么是log k和h-log k?
假设你正在寻找一个与你自己节点ID最远的ID。那么你只有一个桶覆盖该部分键空间,即它将用与你不同的最高有效位覆盖一半的键空间。因此,你会向来自该桶的一个(或多个)节点询问。由于他们的ID位与你的查找目标具有共同的第一位,他们几乎可以保证将其分成两个或更多个,即至少将目标空间的键空间覆盖范围加倍。因此,他们可以提供至少1位更好的信息。
当你查询接近目标的节点时,他们也会在目标区域附近具有更好的键空间覆盖范围,因为这也更接近他们自己的节点ID。
重复执行,直到找不到更近的节点为止。
由于每次跳跃至少切掉 1 比特的距离,所以你基本上需要 O(log(n)) 跳数,其中 n 是网络大小。由于网络大小基本上决定了节点之间的平均距离,从而需要你的主要桶的深度。
如果目标密钥靠近您自己的 ID,则需要较少的步骤,因为您将更好地覆盖该密钥空间区域。
由于 k 是一个常数(每个桶中的节点数),log k 也是一个常数。将桶中的节点数翻倍,它将具有给定键空间区域的两倍分辨率,因此(概率上)会产生比 k/2 大小的桶更接近目标的节点。也就是说,您必须将每个附加位每跳一次所需的条目数量翻倍。
编辑:这是一个实际的单宿主bittorrent DHT路由表的可视化,按其前缀排序,即与本地节点ID无关:
Node ID: 2A631C8E 7655EF7B C6E99D8A 3BF810E2 1428BFD4
buckets: 23 / entries: 173
000... entries:8 replacements:8
00100... entries:8 replacements:0
0010100... entries:8 replacements:2
0010101000... entries:8 replacements:4
00101010010... entries:8 replacements:7
001010100110000... entries:8 replacements:3
0010101001100010... entries:8 replacements:3
00101010011000110000... entries:8 replacements:1
001010100110001100010... entries:3 replacements:0
0010101001100011000110... entries:6 replacements:0
0010101001100011000111... entries:6 replacements:0
0010101001100011001... entries:8 replacements:2
001010100110001101... entries:8 replacements:1
00101010011000111... entries:8 replacements:2
00101010011001... entries:7 replacements:0
0010101001101... entries:8 replacements:0
001010100111... entries:8 replacements:0
001010101... entries:8 replacements:1
00101011... entries:7 replacements:0
001011... entries:8 replacements:0
0011... entries:8 replacements:8
01... entries:8 replacements:8
1... entries:8 replacements:8