11

Kademlia DHT の結合プロセスについて頭を悩ませることはできません。オンラインでいくつかのチュートリアルとプレゼンテーションを見てきましたが、それらはすべて同じように言っているようで、すべての疑似コードなどはほとんど同じです (実際のコピー/貼り付け)。

誰かがこれについて高レベルのウォークスルーを提供できますか?

4

2 に答える 2

25

Kademlia の論文を読んだことがあると思います。これは私の記事「カデムリア DHT の紹介と仕組み」からの抜粋です。

背景情報:

  1. Kademlia ネットワークを実行している場合、ネットワークに参加するために、他のすべてのノードが認識しているノードが常に存在する必要があります。これを Bootstrap ノード と呼びましょうBN

  2. Kは、ノードのルーティング テーブル内のバケットのサイズと、データの一部を保存する必要があるノードの量を決定する Kademlia の定数です。

参加プロセス:

  1. 新しいノードNNは、NodeId (何らかの方法で割り当てられます) と IP アドレス (ホストされているコンピューターの IP) を使用して作成されます。

  2. NNにを送信LookupRequest(A.NodeId)BNます。ルックアップ リクエストは基本的に、特定の NodeId に認識されている K-Closest ノードを受信ノードに要求します。この場合、BNは、認識している K-Closest ノードを返しNNます。

  3. BNNNがルーティング テーブルに追加されるようNNになり、ネットワークに追加されます。

  4. NNから自身に K-Closest ノードのリストを受け取りBNます。ルーティング テーブルにNN追加します。BN

  5. NNから受信したこれらの K ノードに ping を実行しBN、応答したノードが、距離に基づいて必要なバケット内のルーティング テーブルに追加されます。これらのノードに ping を実行することで、ノードの存在を認識し、ルーティング テーブルにNN追加します。NN

  6. NNは現在ネットワークに接続されており、ネットワーク上のノードによって認識されています。

  7. NN各 K-Buckets をループするようになりました

    foreach(K-Buckets as KB)         
        1. NN generates a random NodeId `RNID` // A NodeId that will be in KB 
        2. NN sends LookupRequest(RNID) to the K-Closest nodes it knows to RNID. 
        3. The response will be K nodes closest to RNID.
        4. NN now fills KB. 
    

    NNこれらのバケットを満たすために、バケットごとにこれを行います。この操作の後NN、ネットワーク上で自分自身から離れたさまざまな距離にあるノードをよりよく把握できます。

    注:この手順は必須ではありませんが、各ノードがネットワークに参加したときにネットワークをよりよく把握できるように、Kademlia の実装で実行しました。

An Introduction to Kademlia DHT & How It Worksで Kademlia の完全な紹介を書きました

于 2014-03-30T05:22:27.320 に答える
-3

私の推測では、いくつかのスーパー ノードと地理空間情報を使用して、最小スパニング ツリーを計算しています。また、スーパー ノードからボロノイ図または二重ドローネ三角形分割を計算し、それを使用して近接検索を実行することもできます。例を次に示します: http://www.mathworks.de/de/help/matlab/math/spatial-searching.html

于 2013-10-23T11:17:24.440 に答える