2

bep44 の実装に取り​​組んでいます。定義済みの kademlia アルゴリズムを使用して、与えられたハッシュ ID に最も近い適切なノードを見つけます。

私のプログラムを使用してgo run main.go -put "Hello World!" -kname mykey -salt foobar2 -b public、100ノード以上に保存された値を取得します(良い)。

ここで、複数回連続して実行すると、put リクエストによって書き込まれた ip のセットがうまく交差しません。

get リクエストを実行しようとすると、クエリされた ips のセットが put セットと交差しないため、値が見つからないという問題があります。

私のテストでは、パブリック dht ブートストラップ ノードを使用します。

        "router.utorrent.com:6881",
        "router.bittorrent.com:6881",
        "dht.transmissionbt.com:6881",

ノードにクエリを実行するとき、最も近い 8 つのノード ( nodes := s.ClosestGoodNodes(8, msg.InfoHash())) を選択します。これは通常、再帰的なトラバーサルの後、約 1K のクエリのリストになります。

私の理解では、情報ハッシュのアドレスを dht テーブルに格納することは、テーブルのステータスを考えると決定論的です。連続したクエリを実行しているため、テーブルが実際に変更されることを期待していますが、それほどではありません。

ストア ノード セットが交差しないのはなぜですか?

4

1 に答える 1