Kademlia XOR 距离作为整数

Kademlia XOR Distance as an Integer

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

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

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

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

然后可以逐个子单元地应用异或或比较。 IE。 xor只是所有字节的异或,比较是二进制数组比较。

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

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

Could I also just convert each NodeID into decimal and XOR those values?

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