2012-01-22 9 views
3

私は、このプロトコルを実装しようとしている:私はそれから理解何)http://en.wikipedia.org/wiki/Chord_(peer-to-peerコードプロトコル。分散ハッシュテーブル(DHT)。ピアツーピア。 (P2P)

は「円」を参加する各ノードは、それがIPハッシュされていますに応じて、円の内側にランダムな場所に配置されていることです+ポート値。しかし、私の質問は...どのように私は各ノードの整数値(インデックス)を得ることができますか?どのようにユニークなインデックス番号にip +ポートの一意のハッシュ値を割り当てる...いくつかの関数は、例えばidがn> & id < =後継者)のようなインターバル内にあるかどうかをチェックするので、私は各ノードに一意のintを必要とします、私はちょうどハッシュ値を使用することはできません。 提案がありますか?

答えて

2

あなたは[編集] 私はハッシュをベースと信じ

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

(申し訳ありませんが、あなただけの作業DHTを望んでいたと思った!)

(無料)クリエイターからのコードの実装をダウンロードすることができます衝突の命名を避けたい場合は、アプローチが最善の方法です。ただし、INTを使用する必要がある場合は、DHTで名前の衝突を管理し、何らかの形でそれを処理することで、わずかなオーバーヘッドが発生する可能性があります。次に、IPアドレスの最後の2つのアドレススペースを整数倍で表すことができます。たとえばip = 192.168.2.14の場合、IDは28になります。

これは明らかにシステムのロバスト性を低下させます。ハッシュを使用できない理由は何ですか?

[編集]

+0

私はコード全体を調べないことを望んでいました。私にとってより具体的な答えが得られましたか? :) – AndreiBogdan

+0

うーん、私はちょうど何かを実現し、私が正しいかどうか教えてください。 IPとポートから取得する160ビットのハッシュ値は、それらの値を比較できますか?だから、私は3つのノードそれぞれのハッシュ値を持っている場合、私は何かを行うことができますか... if((hash1> hash2)&&(hash1 <= hash3))...? – AndreiBogdan

0

ハッシュ値をintに変換できませんか?

たとえば、pythonでは、(ip-address + port)のsha1ハッシュを取った後、20バイト(160ビット)が得られます。 (ip-addressは文字列、ポートはint)

バイトをintに変換します。 0〜2 ** 160 - 1の数値が得られます。たとえば、

data_in_bytesをハッシュ値とします。

(int).from_bytes(data_in_bytes、byteorder = 'big')は整数値です。

2つのハッシュ値の間の距離を測定する方法の1つは、XOR演算子を使用することです。 int1^int2は円上の2つのノード間の距離です。