私はすでに このスーパーユーザーの回答 と このWikipediaの記事 を読みましたが、どちらもあまりにも専門的すぎて、本当に頭を抱え込むことはできません。
トラッカーの考え方を理解しています。クライアントは、スウォーム内のピアのリストを保持する中央サーバーに接続します。
ピア交換の概念も理解しています。すでにスウォームに参加しているクライアントは、ピアの完全なリストを相互に送信します。新しいピアが検出されると、それらはリストに追加されます。
私の質問は、DHTはどのように機能するのですか?つまり、新しいクライアントが、トラッカーまたはピアを交換するためのスウォームの少なくとも1つのメンバーの知識なしに、スウォームに参加するにはどうすればよいですか
(注:簡単な説明が最適です。)
新しいクライアントは、トラッカーや、ピアを交換するためのスウォームの少なくとも1つのメンバーの知識なしに、どのようにしてスウォームに参加できますか?
できません。不可能です。*
*(あなたのローカルエリアネットワーク上のノードが既にDHTのノードである場合を除きます。この場合、ブロードキャストメカニズムを使用できます。 Avahiのように、このピアを「発見」し、bootstrapそれらから。しかし、どのようにthey bootstrap自分自身?パブリックインターネットに接続する必要がある状況に遭遇します。パブリックインターネットはマルチキャストではなくユニキャストのみであるため、事前に定義されたピアのリストを使用する必要があります。)
Bittorrent DHT は Kademlia と呼ばれるプロトコルを介して実装されます。これは 分散ハッシュテーブル の理論的概念の特殊なケースです。
Kademliaプロトコルを使用すると、ネットワークに参加するときに bootstrapping の手順を実行します。これには、IPアドレスを事前に知っておく必要があります DHTネットワークにすでに参加している少なくとも1つのノードのポート。たとえば、接続するトラッカー自体がDHTノードである場合があります。 1つのDHTノードに接続したら、さらに多くのノードの接続情報を提供するDHTから情報をダウンロードし、その「グラフ」構造をナビゲートして、両方を提供できるより多くのノードへの接続を取得します。他のノードへの接続、およびペイロードデータ(ダウンロードのチャンク)。
私の太字の実際の質問は、any他のメンバーを知らずにKademlia DHTネットワークに参加する方法について-誤った仮定に基づいていると思います。
太字の質問に対する簡単な答えは、しないです。 DHTメタデータを含んでいる可能性のある1つのホストについても情報がまったくわからない場合は、行き詰まっていて、開始することすらできません。つまり、DHT情報をブロードキャストするポートが開いているパブリックインターネット上でIPをブルートフォースで発見しようとする可能性があります。しかし、BTクライアントは、DHTメタデータを提供するだけの安定したDHTノードに解決される特定の静的IPまたはDNSにハードコードされている可能性が高いです。
基本的に、DHTは参加メカニズムと同じくらい分散化されているだけです。参加メカニズムはかなり壊れやすいためです(インターネット全体に「ブロードキャスト」する方法はないので、unicastDHTデータを取得するために事前に割り当てられた個々のホストに)、Kademlia DHTは実際には分散されていません。言葉の厳密な意味ではありません。
このシナリオを想像してみてください。P2Pを停止したい誰かが外に出て、ブートストラップに使用されるall一般的に使用される安定したDHTノードへの攻撃を準備します。攻撃を開始すると、allノードに一度に攻撃します。 ワムすべてのブートストラップDHTノードはすべて一気に停止します。それで? centralized trackersに接続して、ピアから従来のピアリストをダウンロードするのに悩まされています。まあ、彼らもトラッカーを攻撃するなら、あなたは本当に、本当に小川を登っています。言い換えると、KademliaとBTネットワーク全体はインターネット自体の制限によって制約されています。つまり、90%以上を防止するために攻撃またはオフラインにする必要があるコンピューターの数は有限です(そして比較的少ない)。ユーザーがネットワークに接続できないようにします。
「疑似集中型」のブートストラップノードがすべてなくなると、DHTの外部の誰も内部ノードを知らないため、DHTの内部ノードはブートストラップされません。役に立たない。新しいノードをDHTに取り込むことはできません。そのため、時間の経過とともに内部の各ノードがDHTから切断されると、ユーザーがコンピュータをシャットダウンしたり、更新のために再起動したりするなどして、ネットワークが崩壊します。
もちろん、これを回避するために、誰かが事前に決定された安定したDHTノードまたはDNSアドレスの新しいリストを使用してパッチを適用したBitTorrentクライアントを配備し、代わりにこの新しいリストを使用するようにP2Pコミュニティに大声で宣伝することができます。しかし、これはアグレッサー(ノードイーター)がこれらのリストを徐々にダウンロードし、勇敢な新しいブートストラップノードをターゲットにしてオフラインにするという「モグラたたき」の状況になります。
短い答え:.torrentファイルから取得します。
BitTorrentクライアントがトラッカーのない.torrentファイルを生成するとき(つまり、誰かがBitTorrentを介して新しいものを共有する準備ができているとき)、「ノード」キー( 「キー/値のペア」(セクションヘッダーのようで、暗号キーではありません)。
http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions
トラッカーのない急流辞書には、「発表」キーがありません。代わりに、トラッカーのないトレントには「ノード」キーがあります。このキーは、急流生成クライアントのルーティングテーブルのK個の最も近いノードに設定する必要があります。あるいは、急流を生成する人が操作するノードなど、既知の良好なノードにキーを設定することもできます。トレントファイルに「router.bittorrent.com」を自動的に追加したり、このノードをクライアントのルーティングテーブルに自動的に追加したりしないでください。
したがって、ダウンロードするトラッカーレストレントの.torrentファイルをBitTorrentクライアントに提供する場合、.torrentファイルの「nodes」キーの値を使用して、最初のいくつかのDHTノードを見つけます。
あなたはできません!スウォームの1つのIPを少なくとも1つ知っている必要があります。これがp2pネットワークの弱点です。盲目的にブロードキャストして最初のIPを見つけることができますが、大規模なネットワークでは、だれもがそうしていると、輻輳の問題が発生します。キャッシュを使用できますが、大規模な群(大きなピアアドレスキャッシュ)でのみ可能です。最初のIPだけを要求するには、常にトラッカーを接続する必要があります。
DHTの分散は、クライアントが共有ファイル名のmd5合計を含むすべてのリストを、対応するピアと一緒に保持する必要がないことを意味します。ハッシュのリストは、等しい部分に整形され、スウォーム全体に冗長性をもって配布されます。ピアが切断した場合、ハッシュリストの同じ部分を持つ別の場所がどこかにあります。ピアは、ハッシュリスト部分の適切な所有者のアドレスを互いに共有します。
新しいクライアントは、トラッカーや、ピアを交換するためのスウォームの少なくとも1つのメンバーの知識なしに、どのようにしてスウォームに参加できますか?
お願いします。
[〜#〜] dht [〜#〜] をサポートするビットトレントクライアントは、2つの別個のピアツーピアアプリケーションを実行します。
最初のものはファイル共有を行います:bittorrent lingoのswarmは、bittorrentオブジェクト(ファイルやディレクトリ構造など)を共有するピアのグループです。各bittorentオブジェクトには、.torrentファイルに保存されるメタデータがいくつかあります。 (オブジェクトサイズ、フォルダー名、トラッカー情報またはノードなどが含まれます。このビットトレントオブジェクトをダウンロードするために必要なメタデータのハッシュは、infohashと呼ばれます。
DHTは基本的にトラッカーを置き換えることを目的とした2番目のP2Pアプリケーションです。DHTは(infohash、swarm)のペアを格納し、アナウンスメッセージを受信した場合はswarmを更新します。新しいクライアントは、いくつかの「ノード」(DHTのピアのビットトレント用語)をbootstrap DHTの情報)について知っている必要があります。ここでは、@ allquixoticによって与えられる引数が適用されます。MDHTとして現在700万を超えるピアで構成されており、持続的なサービス拒否攻撃はありそうにありません。
次に、InfoHashに関してDHTにクエリを実行でき、トラッカーを使用したり、以前に群れの一部であるピアを認識したりする必要はありません。彼がコンタクトするピアの1つが メタデータの共有 をサポートしている場合、infohashが.torrent-ファイルを群から取得できることのみが必要です。
ほとんどのp2pネットワーククライアントは、最初に接続するシードピアのリストからブートストラップされます。1つのブートストラップピアに接続すると、残りは分散方式でダウンロードされます。 bootstrapピアに接続し、ピアのDHTリストをダウンロードしてから、それぞれのピアにアクセスして同じことを行います、など。
例えば:
bootstrapノードのリスト:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L1
ここで、クライアントがそれらに接続してピアリストをハイドレートします。
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L6
これはトラッカーの動作に似ていますが、だれでもbootstrapノードになることができるため、シャットダウンすることはほとんど不可能です。
ビットコインコアウォレットは同じように機能します。何らかの理由でデフォルトのピアがシャットダウンした場合、bootstrapシードピアを変更できます。