4

メインラインDHTの仕様から誰かが私に声明を明確にすることができますか?

最初のノードをルーティングテーブルに挿入し、その後起動すると、ノードはDHT内で自分自身に最も近いノードを見つけようとする必要があります。これは、より近いノードが見つからなくなるまで、より近いノードにfind_nodeメッセージを発行することによって行われます。

「近くが見つからなくなるまで」とはどういう意味ですか?

プログラムがfind_nodeメッセージの送信を開始すると、ノードのセットが空になります。find_nodeメッセージへの各応答は、約8dhtノードを返します。私のプログラムはそれらをリストに集めます。

プログラムはいつfindnodeメッセージの送信を停止する必要がありますか?

すでに収集されたノードのリストにすべての要素が含まれているdhtノードのセットを受信するときに送信を停止する必要があると思いますか?

私は正しいですか?

前もって感謝します。

4

1 に答える 1

6

Mainline DHTはkademliaの実装です。詳細については、ペーパーを参照してください。

受信した8つのノードから、ノードIDが自分のIDに近いことで並べ替えてfind_nodeから、上位3つのノード(最も近い3つのノード)に送信します。次に、さらに8 x 3のノードを受け取り、それらをノードリストに挿入しますが、ノードがどれだけ近いかによって並べ替えられます。find_node返されるノードがすでにリストに含まれるまで、上位3つのノードにメッセージを送信し続けます(既にメッセージを送信したノードは無視します)。つまり、終了条件は、(リストの一番上にある)最も近い8つのノードすべてにメッセージを送信したことです。

論文で説明されているように、距離メトリックはXORです。ノードIDが別のノードからどれだけ離れているかを計算するには、ノードIDをXORします。結果が低いほど、ノードは互いに近くなります。

実際には、これをもう少し洗練されたものにしたい場合があります。これは、任意の時点で3つの未処理の要求を保持し、タイムアウトの途中でより多くの未処理の要求を一時的に開くことです。

于 2011-09-29T04:20:14.383 に答える