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 アドレスの最後の 2 つのアドレス空間を乗算するだけです。たとえば、ip = 192.168.2.14 の場合、ID は 28 になります。

これにより、明らかにシステムの堅牢性が低下します。ハッシュを使用できない理由はありますか?

[/編集]

于 2012-01-22T12:38:34.027 に答える
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 つのハッシュ値間の距離を測定する 1 つの方法は、XOR 演算子を使用することです。int1 ^ int2 は、円上の 2 つのノード間の距離です。

于 2015-12-19T21:57:36.770 に答える