Hash 和弦协议。分布式哈希表(DHT)。点对点。(P2P)

Hash 和弦协议。分布式哈希表(DHT)。点对点。(P2P),hash,protocols,p2p,dht,chord,Hash,Protocols,P2p,Dht,Chord,我正在尝试实现此协议:) 我从中了解到的是,加入“圆”的每个节点都被放置在圆内的一个随机位置,这取决于它的散列IP+端口值。但我的问题是。。。如何获取每个节点的整数值(索引)?如何将ip+端口的唯一散列值分配给唯一的索引号…一些函数检查id是否在某个间隔内(例如id>n&id您可以从创建者处下载Chord实现(它是免费的) (对不起,我以为你只是想要一辆能用的DHT!) [编辑] 我相信如果你想避免命名冲突,基于散列的方法是最好的方法。但是,如果你需要使用INT,你可以通过让你的DHT管理命名

我正在尝试实现此协议:)


我从中了解到的是,加入“圆”的每个节点都被放置在圆内的一个随机位置,这取决于它的散列IP+端口值。但我的问题是。。。如何获取每个节点的整数值(索引)?如何将ip+端口的唯一散列值分配给唯一的索引号…一些函数检查id是否在某个间隔内(例如id>n&id您可以从创建者处下载Chord实现(它是免费的)

(对不起,我以为你只是想要一辆能用的DHT!)

[编辑] 我相信如果你想避免命名冲突,基于散列的方法是最好的方法。但是,如果你需要使用INT,你可以通过让你的DHT管理命名冲突并以某种形式处理它来引入一些开销。然后,为了确保你有一个INT表示,你可以将I的最后两个地址空间相乘P地址。例如ip=192.168.2.14,ID为28

这显然会降低系统的健壮性。有什么原因不能使用哈希吗


[/edit]

难道不能将散列值转换成整数吗

例如,在python中,在获取(ip地址+端口)的sha1散列后,得到20个字节(160位)。(ip地址是字符串,端口是int)

将字节转换为整数。得到一个介于0和2**160-1之间的数字。例如

以字节为单位的数据为散列值

(int).from_bytes(data_in_bytes,byteorder='big')是整数值

测量两个散列值之间距离的一种方法是使用XOR运算符。
int1^int2是圆上两个节点之间的距离。

我不希望看完整的代码。有没有可能为我找到更具体的答案?:)嗯,我刚刚意识到一些事情,请告诉我我是否正确。我从IP和端口获得的160位散列值,我可以在它们之间进行比较吗?所以,如果我有3个节点,每个节点都有它们的散列值,我可以做一些像。。。如果((hash1>hash2)&&(hash1