更改 Kademlia 指标 - 单向 属性 重要性

Changing Kademlia Metric - Unidirectional Property Importance

Kademlia 使用 XOR 度量。除其他事项外,这有所谓的 "unidirectional" 属性(= 对于任何给定的点 x 和距离 e>0,恰好有一个点 y 使得 d(x,y)=e)。

第一个问题是一个一般性问题:这个 属性 指标对 Kademlia 的功能至关重要吗,或者它只是有助于揭示来自某些节点的压力(如原始论文所建议的那样) .换句话说,如果我们想更改指标,那么指标也是 "unidirectional" 有多重要?

第二个问题是关于指标的具体变化:假设我们有节点标识符(地址)作为 X 位数字,以下任何指标是否适用于 Kademlia?

  1. d(x,y) = abs(x-y)
  2. d(x,y) = abs(x-y) + 1/(x xor y)

第一个指标只是提供数字之间的差异,因此对于节点 ID 100,ID 为 90 和 110 的节点距离相等,因此这不是单向指标。在第二种情况下,我们修复了添加 1/(x xor y) 的问题,我们知道 (x xor y) 是单向的,因此具有 1/(x xor y) 应该保留此 属性。

因此对于节点ID 100,节点ID 90为d(100,90) = 10 + 1/62,而与节点ID 110的距离为d(100,110) = 10 + 1/10

你不会再和 kademlia 打交道了。还有许多其他路由算法使用不同的距离度量,有些甚至是不均匀的距离度量,但它们不依赖于 kademlia 特定的假设,有时会结合其他功能来补偿这些度量的一些不良方面。

由于度量中可能存在联系(每个点有两个候选点),因此查找不再会聚在一组精确的最近节点上。

桶拆分和其他路由 table 维护算法需要更改,因为它们假设相同的距离只能出现在节点身份上。

我不确定它是否会影响 Big-O 属性或 kademlia 的其他保证。

无论如何,这似乎是一个 X-Y 问题。您想要修改指标以服务于特定目标。也许您应该寻找考虑到该目标而设计的路由覆盖。

d(x,y) = abs(x-y) + 1/(x xor y)

这似乎不切实际,整数除法会四舍五入。实际上,您不会处理这么小的数字,而是要处理更大(例如 160 位)的数字,从而使除法的成本也更高。