【问题标题】:DHT Node ID Generation?DHT 节点 ID 生成?
【发布时间】:2011-03-24 09:33:46
【问题描述】:

我刚开始研究 DHT 的实现和理论,并坚持部分,当节点启动并连接到网络时如何生成节点 ID。我读到 ID 是来自某些散列范围的随机散列,但是,它是唯一的散列吗?并且哈希是否生成关闭该节点存储的数据?帮我解决这个问题。

【问题讨论】:

    标签: dht


    【解决方案1】:

    在大空间值上使用良好的哈希函数自生成节点 ID 是 DHT/P2P 系统中使用的常用技术。由于散列保证了良好的随机分布,因此发生冲突的概率非常小。从统计上看,ID 将(几乎总是)是唯一的。

    该哈希独立于节点存储的数据。

    【讨论】:

    • (几乎总是来自 ID 空间为 2^160,大约是 10^47(巨大!))
    • 这可以很容易地毒化 Kademlia 路由。至少强制执行 IP 最高有效位的哈希,并允许用户选择其余部分。
    【解决方案2】:
    import random
    import hashlib
    
    def newID():
      s = ""
      for i in range(20):
        s += chr(random.randint(0, 255))
      m = hashlib.sha1()
      m.update(s)
      return m.digest()
    

    【讨论】:

      【解决方案3】:

      如前面的答案所述,节点的 ID 是通过散列它的 IP 地址(一般来说,像 Chord 这样的 DHT 中的情况)或其他唯一可识别信息生成的。

      由于它在节点加入或离开 n 网络时使用Consistent Hashing,因此只需重新映射1/nkeys,因此它适用于高度动态的网络拓扑,例如对等网络。

      从技术上讲,生成的哈希不会传达有关存储在此节点上的数据的任何信息。相反,某个键(或数据存储中的条目,如果用于此目的)的哈希源自对关键字(或文件名或文件内容)进行哈希处理。

      作为一致性哈希的直接结果,出现了键之间距离的抽象概念。 (如here 所述)根据距离度量,节点拥有与其标识密钥 (ID) 最接近的所有密钥。

      【讨论】:

        猜你喜欢
        • 2020-09-17
        • 2020-04-07
        • 2022-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多