繁体   English   中英

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

[英]Chord protocol. Distribuited Hash Table (DHT). Peer to peer. (P2P)

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

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

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

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

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

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

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

[/编辑]

你不能把你的散列值转换为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个节点之间的距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM