2011-03-24 103 views
1

我刚开始学习DHT的实现和理论部分,如何在节点启动并连接到网络时生成节点id。我读过的ID是来自某些哈希的随机哈希,但是,它是独一无二的哈希?并且哈希产生关闭该节点存储的数据?帮我解决这个问题。DHT节点ID生成?

回答

1

DHT/P2P系统中使用的一种常用技术是在大值空间中使用良好散列函数自行生成节点ID。由于散列保证了良好的随机分布,碰撞的可能性非常小。统计上,ID(几乎总是)是唯一的。

该散列与节点存储的数据无关。

+0

(几乎总是来自ID空间2^160,大概10^47(巨大!)) – gsk 2012-08-20 06:31:35

0
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() 
0

如在先前所述的答案,是通过散列它的IP地址产生的节点的ID(一般来说,例如是在像Chord一个DHT的情况下)或其他唯一识别的信息。

由于它使用Consistent Hashing当一个节点将加入或离开n-网络,只有1/n键需要重新映射,因此它适用于高度动态的网络拓扑,如点对点。

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

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