2017-07-26 5 views
2

与えられたターゲットID x ... 19xは、プログラムが再帰クエリを実行し、テーブルを構築し、さらに質問するノードがなくなると、最も近い結果ノードが8未満である状況を検出します。特定のターゲットを検索すると、検索を広げる方法は?

どのようにすれば、特定のIDに対してテーブルが少なくとも8つのノードを返すように検索を広げることができますか?

ターゲットid(infoハッシュ)を取得し、info_hash + 1/info_hash-1を検索するだけでいいですか?

もしそうなら、プログラミングの言葉で、このフォーム "afe0 ..."で与えられたIDを増減する方法は?

もしそうでなければ、その数の冗長ノードに到達するために何ができるでしょうか?

+1

* find_node *クエリへの応答には、回答者が知っているK = 8の最も近いノードが含まれている必要があります。唯一の可能性はそれほどありません.DHTには合計8ノード未満しか存在しないか、深刻な実装からの応答しか得られません。 – Encombe

+0

ええ、私は同意するが、私は現在、bep44のリクエストを実行するときにノードにテーブルを追加するルールを強化している。 –

+1

さて、BEP44を扱うのは別の質問です。照会されたノードに最も近い8つのノードを表示するには、照会されたノードidにターゲットを設定します。ただし、そのリスクはEclipse攻撃に対する保護をトリガーします。だからターゲットを '(照会ノードid)XOR(0x0000000C 0F0F0F0F 0F0F0F0F 0F0F0F0F 0F0F0F0F)'にすることをお勧めします。 – Encombe

答えて

1

私は問題がXOR距離のために自明ではないと思います。あなたが本当に望んでいるのは、 "OK、あなたはすでにあなたに知っているN.最も遠いノードを教えてくれました。今N + 1. Mについて教えてください"。そのためのDHTクエリはありません。

この質問は、結果セットから単一ノードを尋ねることができる単一のクエリにはマップされません。

は、私が「自身のノードIDに関する第8遠いノードを頼む」アプローチをテストするために少しのシミュレーションを実行し、ここでの結果照会ノードが16件の連絡先を返すとき、これがあることを

t:1FBD4155 B667C234 90E0B021 FF837239 38FF5A2C 
c:1FB6AC2D CA183942 6BE2B523 2BD998F7 0ACB59B2 d:000BED78 7C7FFB76 FB020502 D45AEACE 3234039E 
c:1FADC99B D3CAC04B 9468220D D779F063 DB605C52 d:001088CE 65AD027F 0488922C 28FA825A E39F067E 
c:1FAFDD9A 74CB2535 5256CF21 A9B0AB3A 7D6752D3 d:00129CCF C2ACE701 C2B67F00 5633D903 459808FF 
c:1FA9B8DA 9940F605 272E0B72 8057B89B 259E9D6D d:0014F98F 2F273431 B7CEBB53 7FD4CAA2 1D61C741 
c:1FA7B21D D2183104 3BC1CEC5 968FB208 A3B64A34 d:001AF348 647FF330 AB217EE4 690CC031 9B491018 
c:1FA132B5 9F044131 A4C2FB18 11727030 D5912386 d:001C73E0 29638305 34224B39 EEF10209 ED6E79AA 
c:1FA06A42 09653EDB CB913184 6C1FB8DD 39CD3661 d:001D2B17 BF02FCEF 5B7181A5 939CCAE4 01326C4D 
c:1FA30C2F 7FA17089 BA5C85CA CDE555A1 74F6AD19 d:001E4D7A C9C6B2BD 2ABC35EB 32662798 4C09F735 
expecting to find next 
e:1F9DD0D4 B21795DC 82298E53 E594D647 0353F0C3 d:00209181 047057E8 12C93E72 1A17A47E 3BACAAEF 
asking 1FA30C2F 7FA17089 BA5C85CA CDE555A1 74F6AD19 with its own ID 
it returned 
n:1FA30C2F 7FA17089 BA5C85CA CDE555A1 74F6AD19 d:001E4D7A C9C6B2BD 2ABC35EB 32662798 4C09F735 
n:1FA132B5 9F044131 A4C2FB18 11727030 D5912386 d:001C73E0 29638305 34224B39 EEF10209 ED6E79AA 
n:1FA06A42 09653EDB CB913184 6C1FB8DD 39CD3661 d:001D2B17 BF02FCEF 5B7181A5 939CCAE4 01326C4D 
n:1FA7B21D D2183104 3BC1CEC5 968FB208 A3B64A34 d:001AF348 647FF330 AB217EE4 690CC031 9B491018 
n:1FA9B8DA 9940F605 272E0B72 8057B89B 259E9D6D d:0014F98F 2F273431 B7CEBB53 7FD4CAA2 1D61C741 
n:1FAFDD9A 74CB2535 5256CF21 A9B0AB3A 7D6752D3 d:00129CCF C2ACE701 C2B67F00 5633D903 459808FF 
n:1FADC99B D3CAC04B 9468220D D779F063 DB605C52 d:001088CE 65AD027F 0488922C 28FA825A E39F067E 
n:1FB6AC2D CA183942 6BE2B523 2BD998F7 0ACB59B2 d:000BED78 7C7FFB76 FB020502 D45AEACE 3234039E 
n:1F8248F8 8CEA3B04 5196FFEE F9B4F6C1 3B3B2707 d:003F09AD 3A8DF930 C1764FCF 063784F8 03C47D2B 
n:1F8F0556 D1B0BCBF 42D54567 825058D8 155BA5E4 d:00324403 67D77E8B D235F546 7DD32AE1 2DA4FFC8 
n:1F8D9186 86C1AEFE A2C24C73 59F5A2F5 D4C2FA5E d:0030D0D3 30A66CCA 3222FC52 A676D0CC EC3DA072 
n:1F8C71EF C8B0A12E 40B5233C 680D2373 A3D730A1 d:003130BA 7ED7631A D055931D 978E514A 9B286A8D 
n:1F93C42A BA85A26C 184185B1 A79A6E60 253DBC2D d:002E857F 0CE26058 88A13590 58191C59 1DC2E601 
n:1F96B634 A043FC17 616A549F F521E9F9 4F5600FD d:002BF761 16243E23 F18AE4BE 0AA29BC0 77A95AD1 
n:1F953B74 8977DCE8 8636338B A2EC4ED2 14A83E35 d:00287A21 3F101EDC 16D683AA 5D6F3CEB 2C576419 
n:1F9A39EF 59885496 ED794C02 49545D6C 92565959 d:002778BA EFEF96A2 7D99FC23 B6D72F55 AAA90375 

65 failures in 1000 runs 

注意です。それが8を返すだけであれば、失敗率は〜20%になります。この失敗率は無関係な事象ではなく、共有プレフィックスの働きによる集団的振る舞いです。言い換えれば、最も近い8つのセットの他のノードを照会するだけで、チャンスが大幅に向上することはありません。

ターゲットのIDが配置されている可能性があることは明らかです。すでに知り合っていないノードの次に近いものまだ。

適切な解決策は、ホームバケットが対象の対象キーをカバーするように編成された一時的なルーティングテーブルを作成し、次にホームバケットとそのネイバーを段階的に設定して(必要に応じて分割する)十分なBEP-44準拠の連絡先があります。

これはかなり複雑なアプローチです。通常、ターゲットIDについてまだ質問していない連絡先をバックトラックして尋ねると、8つ以上の最も近いノードが提供されるはずです。なぜなら、多くの実装が8つ以上の連絡先を渡すだけなのでです。

+0

私はこの問題をよりよく知るために、より多くのノードを使い果たして、テーブルのビュー。複数の同一の順次クエリ(//で試していない)のため、距離(ターゲット、最も近い[0])は非常に揮発性です。多分、私はそれをもっと安定した結果にすることができます。より多くのノードを使い切るには、別のIDを要求する必要があります。同じブートストラップ(シーダー)を使用すると、同じ結果(+/-少数のノード)を受け取る必要があります。だから私は別の方向に行くように求める必要がありますよね? –

+0

私は非常に正確ではありません、その小さすぎるボックスを申し訳ありません。 –

+0

心配しないで、私は単純に最寄りのテストを書いて、それで十分でないならば、新しいノードのセットをターゲットにしてターゲットにシフトを適用し、そのテーブルを構築し、最も近い新しいノードをテストし、私は正しくn番目の冗長ノードを書きました。読んでも私は同じように進めるべきです。 –

関連する問題