我只能代表 Kademlia,也许其他人可以提供更笼统的答案。同时...
- d(x,x) = 0
- d(x,y) > 0,如果 x != y
这两个点一起有效地意味着最接近的点x
就是x
它自己;每隔一个点就更远了。(这可能看起来很直观,但 XOR 度量的其他方面并非如此。)
在 Kademlia 的上下文中,这很重要,因为查找具有 ID 的节点x
会将该节点作为最近的节点。如果不是这种情况会很尴尬,因为收敛到的搜索x
可能找不到 node x
。
Kademlia 路由表的结构使得节点保持对最接近它们的地址空间的详细了解,并且对更远的地址空间的了解呈指数下降。简而言之,一个节点试图保留它所听到的所有最近的联系人。k
对称性很有用,因为这意味着这些最接近的联系人中的每一个都将保持对地址空间相似部分的详细了解,而不是远程部分。
如果我们没有这个属性,那么将搜索想象成更像是时钟的指针绕着钟面朝一个方向移动可能会有所帮助。1点钟的节点(Node1)在2点钟(30°)靠近Node2,但Node2远离Node1(330°)。所以想象一下,我们正在寻找最接近 3 点钟的两个(即 Node1 和 Node2)。如果搜索到 Node2,它不会知道 Node1,因为它很远。整个查找和拓扑必须改变。
- d(x,z) <= d(x,y) + d(y,z)
如果不是这种情况,节点就不可能知道在查找期间要从其路由表中返回哪些联系人。它会知道k
最接近目标的位置,但不能保证其他更远的联系人之一不会产生更短的整体路径。
由于这种特性和单向性,从非常分离的点开始的不同搜索将趋向于沿着相同的路径收敛。
单向性意味着没有两个节点可以与给定点具有相同的距离。如果不是这种情况,那么目标点可能被一堆节点包围,距离它都相同。然后各种不同的搜索将可以自由选择任何一个通过。然而,单向性保证了这组中的一个将是最接近的,并且在该组之间进行选择的任何搜索将始终选择同一个。