Kademlia XOR距离作为整数

时间:2018-11-04 05:59:40

标签: encoding p2p xor kademlia

在Kademlia论文中,它提到将XOR中的NodeID解释为整数。假设我的NodeID1aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d,而我的NodeID2ab4d8d2a5f480a137067da17100271cd176607a1。将其解释为整数以比较NodeID1NodeID2的合适方法是什么?我会把它们转换成BigIntXOR那两个BigInt吗?我在一个实现中看到了这一点。我是否也可以将每个NodeID转换为十进制并XOR转换为这些值?

我发现了this个问题,但我试图更好地理解它的工作原理。

注意:这不是为了实现,我只是想了解整数解释的工作原理。

1 个答案:

答案 0 :(得分:0)

对于基本的kademlia实现,您只需对ID进行2位算术运算:异或和比较。对于这两种情况,ID在概念上都是具有溢出的160位无符号整数,即模2 ^ 160算术。假设在后一种情况下正确的字节序转换,则可以将其分解为20字节或5×u32数组。网络协议最常见的字节序为big-endian,因此字节0将包含160个字节中的最高8位。

然后,异或比较可以在一个子单元的基础上应用。即xor只是所有字节的xor,比较是二进制数组比较。

使用bigint库函数可能足以实现,但不是最优的,因为与在固定大小的数组上实现必要的位旋转相比,它们具有大小和符号开销。

更完整的实现可能还需要一些附加的算术和实用函数。

  

我还可以将每个NodeID转换为十进制,然后将这些值异或吗?

考虑数字的大小,十进制表示不是特别有用。对于人类读者而言,十六进制或单个位更有用,并且计算机以二进制形式运行,而实际上绝不以十进制形式运行。