4

我正在尝试实现这个协议:http ://en.wikipedia.org/wiki/Chord_(peer-to-peer )

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

4

2 回答 2

2

您可以从创建者那里下载 Chord 实现(它是免费的)

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

(抱歉,您只是想要一个有效的 DHT!)

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

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

[/编辑]

于 2012-01-22T12:38:34.027 回答
0

你不能把你的散列值转换成一个整数吗?

例如,在 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 个节点之间的距离。

于 2015-12-19T21:57:36.770 回答