【问题标题】:Kademlia XOR Distance as an IntegerKademlia XOR 距离作为整数
【发布时间】:2018-11-06 03:26:54
【问题描述】:

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

我发现了this 的问题,但我正试图更好地了解它是如何工作的。

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

【问题讨论】:

    标签: encoding p2p xor kademlia


    【解决方案1】:

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

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

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

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

    我也可以将每个 NodeID 转换为十进制并对这些值进行异或吗?

    考虑数字的大小十进制表示并不是特别有用。对于人类读者来说,十六进制或单个位更有用,计算机以二进制运行,几乎从不使用十进制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2012-04-17
      • 2012-12-23
      相关资源
      最近更新 更多