【问题标题】:How to represent Kademlia distance metric as integer如何将 Kademlia 距离度量表示为整数
【发布时间】:2018-02-03 21:20:49
【问题描述】:

我是 P2P 网络的新手,目前我尝试了解 Kademlia 论文指定的一些基本内容。我无法理解的主要事情是 Kademlia 距离度量。所有论文都将距离定义为两个 ID 的 XOR。 ID 大小为 160 位,因此结果也有 160 位。 问题:将这个距离表示为整数的便捷方法是什么? 我检查过的一些实现使用以下内容: distance = 160 - 前缀长度(其中前缀长度是前导零的数量)。 这是正确的方法吗?

【问题讨论】:

  • 它已经是一个整数(一个 160 位整数)。您是否尝试将 160 位数字放入特定编程语言定义的整数中?
  • 是的(我用java写的)。由于距离被用作k-bucket的索引
  • 好吧,除非您对这些 ID 有所了解,例如它们有一个共同的前缀/后缀,或者其他一些允许您“压缩”它们的结构,否则无法适应任意 160 位数成 32 位

标签: p2p kademlia


【解决方案1】:

我检查过的一些实现使用以下内容:距离 = 160 - 前缀长度(其中前缀长度是前导零的数量)。这是正确的方法吗?

这种方法is based on an early revision of the kademlia paper 并不足以实现最终论文的一些后续章节。

一个成熟的实现应该使用一个树状的路由表,它根据桶在键空间中的绝对位置对桶进行排序,当桶分裂发生时可以调整其大小。

ID 大小是 160 位,所以结果也是 160 位。问题:用整数表示这个距离的方便方法是什么?

距离度量是 160 位整数。您可以使用大整数类或基于数组滚动您自己的类。要获得共享前缀位数,您只需计算前导零,它与网络大小成对数比例,一旦完成,通常应该适合更小的整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2020-04-20
    • 1970-01-01
    • 2011-05-05
    • 2015-06-23
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多