Chord协议。分布式哈希表(DHT)。点对点(P2P)。

4
我正在尝试实现这个协议:http://en.wikipedia.org/wiki/Chord_(peer-to-peer)。
从中我理解到,每个加入“圆环”的节点都被随机放置在圆环内的某个位置,这取决于其散列IP+端口值。但我的问题是...如何为每个节点获取一个整数值(索引)?如何将ip +端口的唯一哈希值分配给唯一的索引号码...有些函数检查例如一个ID是否在一个区间内(例如id> n& id<=successor),所以似乎我需要为每个节点提供一个唯一的整数,我不能仅使用哈希值。 有什么建议吗?
2个回答

2
您可以从创建者那里免费下载Chord实现。 http://pdos.csail.mit.edu/chord/#downloads
(抱歉,我以为您只需要一个可用的DHT!)
[编辑] 如果您想避免命名冲突,我认为基于哈希的方法是最好的方法。但是,如果您需要使用INT,则可以通过让DHT管理命名冲突并以某种形式处理它来引入轻微的开销。然后,为确保您具有int表示形式,您可以仅将IP地址的最后两个地址空间相乘。例如,ip = 192.168.2.14,则ID将为28。
这显然会使您的系统不太健壮。您不能使用哈希的原因是什么?
[/编辑]

我希望不必查看整个代码。你有更具体的答案吗? :) - AndreiBogdan
哦,我刚意识到一件事情,请告诉我是否正确。我从IP和端口获取的160位哈希值,可以相互比较吗?所以如果我有3个节点,每个节点都有它们的哈希值,我可以做这样的事情...如果((hash1> hash2)&&(hash1 <= hash3))...? - AndreiBogdan

0

你不能将哈希值转换为整数吗?

例如,在Python中,当你对(IP地址+端口)进行sha1哈希后,你会得到20个字节(160位)。其中,IP地址是一个字符串,端口是一个整数。

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

假设data_in_bytes是哈希值。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接