【发布时间】:2011-03-24 09:33:46
【问题描述】:
我刚开始研究 DHT 的实现和理论,并坚持部分,当节点启动并连接到网络时如何生成节点 ID。我读到 ID 是来自某些散列范围的随机散列,但是,它是唯一的散列吗?并且哈希是否生成关闭该节点存储的数据?帮我解决这个问题。
【问题讨论】:
标签: dht
我刚开始研究 DHT 的实现和理论,并坚持部分,当节点启动并连接到网络时如何生成节点 ID。我读到 ID 是来自某些散列范围的随机散列,但是,它是唯一的散列吗?并且哈希是否生成关闭该节点存储的数据?帮我解决这个问题。
【问题讨论】:
标签: dht
在大空间值上使用良好的哈希函数自生成节点 ID 是 DHT/P2P 系统中使用的常用技术。由于散列保证了良好的随机分布,因此发生冲突的概率非常小。从统计上看,ID 将(几乎总是)是唯一的。
该哈希独立于节点存储的数据。
【讨论】:
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()
【讨论】:
如前面的答案所述,节点的 ID 是通过散列它的 IP 地址(一般来说,像 Chord 这样的 DHT 中的情况)或其他唯一可识别信息生成的。
由于它在节点加入或离开 n 网络时使用Consistent Hashing,因此只需重新映射1/nkeys,因此它适用于高度动态的网络拓扑,例如对等网络。
从技术上讲,生成的哈希不会传达有关存储在此节点上的数据的任何信息。相反,某个键(或数据存储中的条目,如果用于此目的)的哈希源自对关键字(或文件名或文件内容)进行哈希处理。
作为一致性哈希的直接结果,出现了键之间距离的抽象概念。 (如here 所述)根据距离度量,节点拥有与其标识密钥 (ID) 最接近的所有密钥。
【讨论】: