Kademlia使用XOR指标。除此之外,这就是所谓的单向"属性(=对于任何给定点x和距离e> 0,恰好有一个点y使得d(x,y)= e)。
第一个问题是一个普遍的问题:度量的这个属性是否对Kademlia的功能至关重要,或者它是否有助于揭示来自某些节点的压力(正如原始论文所暗示的那样)。换句话说,如果我们想要更改指标,那么提供一个“单向”指标的重要性是多么重要。还有吗?
第二个问题是关于指标的具体变化:假设我们将节点标识符(地址)作为X位数,以下任何一个指标都适用于Kademlia吗?
d(x,y) = abs(x-y)
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
。
答案 0 :(得分:1)
你再也不会处理kademlia了。有人使用不同的距离度量的其他路由算法,有些甚至是非均匀距离度量,但它们不依赖于kademlia特定的假设,有时还包含其他功能以补偿这些度量的某些不良方面。
由于度量标准中可能存在联系(每个点有两个候选项),因此查找无法再收敛到一组精确的最近节点上。
需要更改存储桶拆分和其他路由表维护算法,因为它们假设相同的距离只能与节点标识一起发生。
我不确定它是否会影响Big-O属性或kademlia的其他保证。
无论如何,这似乎是一个X-Y问题。您希望修改指标以服务于特定目标。也许您应该考虑设计符合该目标的路由覆盖。
d(x,y)= abs(x-y)+ 1 /(x xor y)
这似乎不切实际,对整数的划分受到四舍五入的影响。而实际上你不会处理如此小的数字,而是处理更大(例如160位)的数字,这使得分部也更加昂贵。