[英]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.