DHT路由表-为什么要使用存储桶而不是地图?

时间:2018-10-12 12:27:26

标签: routing bittorrent dht kademlia

Closest question to this I think.

构造路由表的一种显而易见的方法是简单地维护 文字表。 地图(异或,节点)

Kademlia讨论了“桶”的使用,这些桶由XOR的最高有效位组织。 “存储桶”的实际目的是什么? 当我们只需将“实际” XOR用作地图中的键时,为什么还要搞乱“最长前缀”呢?

显然,地图可能会大2 ^ 160,但是我们可以使用一些试探法来限制地图的大小,而不是实施一些任意的存储桶概念? 在任何情况下(无论是否有存储桶),当搜索一个接近我们被要求查找的nodeId时,我们仍然必须遍历表中的所有节点并对每个节点进行XOR?

我想念什么?

1 个答案:

答案 0 :(得分:0)

  

构造路由表的一种明显方法是简单地维护文字表。地图(异或,节点)

我读到的密钥是xor,但是xor是什么? xor接受两个参数:

distance = xor(hash, peerid)
  

“存储桶”的实际目的是什么?

k-bukcets可以加快以下python代码的速度:

nsmallest(k, peers, key=functools.partial(operator.xor, hash))

即找到与给定哈希最接近的对等点。

  

当我们仅将“实际” XOR用作地图中的键时,为什么会与“最长前缀”混为一谈?

就像我说的那样,上面您无法存储所有可能的哈希值的异或值。

  

当搜索接近我们被要求找到的nodeId时,我们仍然必须遍历表中的所有节点并对每个节点进行XOR?

带有k-bucket的东西不需要遍历整个地图以找到最接近的对等体,因为对等体又名哈希。 peerid是按前缀组织的,并且您知道最近的对等节点与给定的哈希共享相同的前缀。

  

为什么要使用存储桶而不是地图?

您可以使用地图代替k-bucket。