簡単に言えば、BitTorrent クライアントが DHT を使用してピアを最初に検出する方法は?

bittorrent

私はすでにこのSuperUserの回答このWikipediaの記事を読んでいますが、どちらも技術的なことが多すぎて、私の頭の中を整理するには難しいです

私はトラッカーのアイデアを理解しています: クライアントは、大群のピアのリストを維持する中央サーバーに接続します

私はピアエクスチェンジの考え方も理解しています。すでにスワームにいるクライアントは、お互いにピアの完全なリストを送信します。新しいピアが発見されると、そのリストに追加されます

私の質問は、DHTはどのように機能するのでしょうか?つまり、トラッカーがいなくても、スワームの少なくとも1人のメンバーの知識がなくても、新しいクライアントがスワームに参加するにはどうしたらいいのでしょうか?

注:簡単な説明がベストです)

  46  Steve V.  2013-05-06


ベストアンサー

Summary

トラッカーやスワームの少なくとも1人のメンバーの知識がなくても、新しいクライアントがスワームに参加するにはどうすればいいのでしょうか?

無理だよ不可能です

* (ローカルエリアネットワーク上のノードが、たまたまDHTのノードになっている場合を除きます。この場合、Avahi のようなブロードキャスト機構を使って、このピアを「発見」し、そこからブートストラップすることができます。しかし、どのようにして彼らは自分自身をブートストラップしたのでしょうか?最終的には、パブリック・インターネットに接続しなければならない状況にぶつかるでしょう。そして、パブリックインターネットはユニキャストのみで、マルチキャストではないので、あらかじめ決められたピアのリストを使うことに行き詰ってしまいます)


References

Bittorrent DHTは、Kademliaとして知られるプロトコルを介して実装されており、分散ハッシュテーブルの理論的な概念の特別なケースです


Exposition

Kademlia プロトコルでは、ネットワークに参加する際に、bootstrappingの手順を踏むことになりますが、この手順では、すでに DHT ネットワークに参加している少なくとも 1 つのノードの IP アドレスとポートを事前に知っておく必要があります。例えば、あなたが接続しているトラッカーは、それ自体がDHTノードであるかもしれません。一旦1つのDHTノードに接続されると、次に、より多くのノードへの接続性情報を提供するDHTからの情報のダウンロードに進み、次に、他のノードへの接続性とペイロードデータ(ダウンロードのチャンク)の両方を提供することができる、より多くのノードへの接続を得るために、その「グラフ」構造をナビゲートします

太字で書かれているあなたの実際の質問は、他のメンバーを知らずに Kademlia DHT ネットワークに参加するにはどうしたらいいかというものですが、それは間違った仮定に基づいていると思います

太字の質問に対する簡単な答えは、あなたは知らないということです。DHTのメタデータを含んでいる可能性のあるホストについての情報を全く知らないのであれば、あなたは行き詰ってしまいます。つまり、確かに、公開インターネット上のポートが開いていて、たまたまDHT情報をブロードキャストしているIPをブルートフォースで発見しようとすることはできます。しかし、より可能性が高いのは、BTクライアントが特定の静的IPやDNSにハードコードされていて、安定したDHTノードに解決し、DHTメタデータを提供している場合です

基本的に、DHT は結合メカニズムと同じくらいしか分散化されておらず、結合メカニズムはかなり脆いので(インターネット全体に「ブロードキャスト」する方法がない!だから、DHT データを取得するためには、あらかじめ割り当てられた個々のホストにユニキャストしなければならない)、Kademlia DHT は本当の意味で分散化されていません。厳密な意味での分散化ではありません

このシナリオを想像してみてください。P2P を停止させたいと思っている人が外に出て、ブートストラップに使われている一般的に使われている安定した DHT ノードすべてに対して攻撃の準備をします。攻撃の準備ができたら、すべてのノードに一斉に攻撃を仕掛けます。ブートストラップを行っている DHT ノードが一斉にダウンします。さて、どうしますか?あなたは集中型トラッカーに接続して、そこから従来のピアのリストをダウンロードするしかありません。トラッカーも攻撃されたら、あなたは本当に困った状況に陥ることになる。つまり、KademliaやBTネットワーク全体は、インターネット自体の限界によって制約を受けているのです。つまり、90%のユーザーがネットワークに接続しないようにするために、攻撃に成功したり、オフラインにしたりしなければならないコンピュータの数には限りがあります

擬似的に集中化された」ブートストラップノードがすべてなくなると、DHT の内部ノードは、DHT の外部の誰も内部ノードのことを知らないので、ブートストラップを行っていません。そのため、各内部ノードが時間の経過とともに DHT から切断されると、人々がコンピュータをシャットダウンしたり、更新のために再起動したりするなどして、ネットワークは崩壊してしまいます

もちろん、これを回避するには、パッチを適用した BitTorrent クライアントに、あらかじめ決められた安定した DHT ノードまたは DNS アドレスの新しいリストを導入し、この新しいリストを使用するように P2P コミュニティに大声で宣伝することができます。しかし、これは「モグラたたき」のような状況になり、攻撃者 (ノードを食べる側) がこれらのリストを徐々にダウンロードし、勇敢な新しいブートストラップ ノードをターゲットにして、オフラインにしてしまうことになります

49  allquixotic  2013-05-06


簡単に言うとトレント ファイルから取得します

BitTorrent クライアントがトラッカーレスの .torrent ファイルを生成するとき (つまり、誰かが BitTorrent で新しいものを共有しようとしているとき)、そのクライアントが知っている最も近い K 個の DHT ノードを含む .torrent ファイルに “nodes” キー (「キー/値のペア」のキー。暗号キーではなく、セクション ヘッダーのようなもの) を追加します

bep_0005.rst_post

トラッカーレス トレント辞書には “アナウンス” キーはありません。代わりに、トラッカーレス トレントには “nodes” キーがあります。このキーは、トレント生成クライアントのルーティング テーブルで最も近い K 個のノードに設定する必要があります。または、トレントを生成する人が操作するノードなど、既知のグッド ノードにキーを設定することもできます。トレント ファイルに ” router.bittorrent.com ” を自動的に追加したり、このノードをクライアントのルーティング テーブルに自動的に追加したりしないでください

そのため、ダウンロードするトラッカーレス トレントの .torrent ファイルを BitTorrent クライアントに送信すると、.torrent ファイルの “nodes” キーの値を使用して、最初の数個の DHT ノードを検出します

19  Spiff  2013-05-06


それはできません!群のうちの1つのIPを少なくとも1つ知っていなければなりません。盲目的にブロードキャストして最初のIPを見つけることもできますが、大規模なネットワークでは、全員がそれをしていると混雑の問題が発生します。キャッシュを使うこともできますが、それは大規模なネットワークでのみ可能です(より大きなピアアドレスキャッシュ)。常にトラッカーを接続して最初のIPだけを聞く必要があります

DHTでの分散とは、クライアントが共有ファイル名のmd5の和を含むリストをすべて保持する必要がないことを意味します。ハッシュのリストは等しい部分に形作られ、スウォーム全体に冗長性を持って分散されています。あるピアが切断した場合、ハッシュリストの同じ部分を持つ別のピアがどこかに存在します。ハッシュリストの同じ部分を持っている他の人のアドレスを共有しています

torrent-freak さんがこの話題で投稿しました

1  z8po  2013-05-06


トラッカーやスワームの少なくとも1人のメンバーの知識がなくても、新しいクライアントがスワームに参加するにはどうすればいいのでしょうか?

それはそれを求めています

DHT をサポートする Bittorrent クライアントは、2 つの異なるピアツーピア アプリケーションを実行します

最初のものはファイル共有を行います。ビトレントの用語でスウォームとは、ビトレント オブジェクト (ファイルやディレクトリ構造など) を共有するピアのグループのことです。各ビトレント オブジェクトには、.torrent-file に保存されるメタデータがあります。(オブジェクト サイズ、フォルダ名、トラッカー情報やノードなどが含まれます。)この bittorrent オブジェクトをダウンロードするために必要なメタデータのハッシュは infohash と呼ばれます

DHTは基本的にトラッカーの代替を目的とした第二のP2Pアプリケーションです。(infohash、swarm) のペアを保存し、アナウンス メッセージを受信するとswarmを更新します。新しいクライアントは、DHTの情報をブートストラップするために、いくつかの「ノード」(DHTのピアのためのbittorrentの専門用語)の知識を持っていなければなりません。ここでは、@allquixotic によって与えられた引数が適用されます。MDHT は現在 700 万以上のピアで構成されているため、持続的なサービス拒否攻撃は考えにくいと思われます

それはその後、infohashに関してDHTをクエリすることができ、トラッカーを使用したり、前に群の一部であるピアを知っている必要はありません。彼が接触するピアの 1 つが sharing metadata をサポートしている場合、必要なのは infohash だけで、スウォームから .torrent-file を取得することができます

0  tameit  2014-10-21


ほとんどの p2p ネットワーククライアントは、最初に接続するシードピアのリストからブートストラップされています…一旦ブートストラップされたピアに接続すると、残りのピアを分散してダウンロードします。ブートストラップされたピアに接続すると、残りのピアを分散してダウンロードします

For example:

ブートストラップノードの一覧です

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

ここでは、クライアントがピアリストを潤すためにそれらに接続します

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

これはトラッカーがどのように動作するかに似ていますが、かなり誰でもブートストラップノードになることができるので、それらをシャットダウンすることはほぼ不可能です

ビットコインコアウォレットも同じように動作します。これは、何らかの理由でデフォルトのものがシャットダウンされた場合に、ブートストラップシードピアを変更することができます

0  chovy  2016-12-08


タイトルとURLをコピーしました