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

时间:2012-01-22 12:34:59

标签: hash protocols p2p dht chord

我正在尝试实施此协议:http://en.wikipedia.org/wiki/Chord_(peer-to-peer

我从中理解的是,连接“圆圈”的每个节点都放置在圆圈内的随机位置,具体取决于它的散列IP +端口值。但我的问题是......我怎样才能获得每个节点的整数值(索引)?如何将ip +端口的唯一哈希值分配给唯一索引号...某些函数检查例如id是否在区间内(例如id> n& id< = successor),所以它似乎我需要为每个节点一个唯一的int,我不能只使用哈希值。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以从创作者处下载Chord实现(免费)

http://pdos.csail.mit.edu/chord/#downloads

(抱歉,您认为自己只是想要一个正常工作的DHT!)

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

这显然会使您的系统不那么健壮。你有什么理由不能使用哈希?

[/编辑]

答案 1 :(得分:0)

您是否只是将哈希值转换为int?

例如,在python中,在获取(ip-address + port)的sha1哈希后,得到20个字节(160位)。 (ip-address是一个字符串,port是一个int)

将字节转换为int。你得到一个0到2之间的数字** 160 - 1.例如,

让data_in_bytes为哈希值。

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

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