簡単に言えば、BitTorrentクライアントは最初にDHTを使用してピアをどのように発見しますか?


45

私はすでにこのスーパーユーザーの回答このウィキペディアの記事を読んでいますが、どちらも私にはあまりにも技術的すぎるので、本当に頭を包み込むことはできません。

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

また、ピア交換のアイデアも理解しています。すでにスウォームにいるクライアントは、ピアの完全なリストを互いに送信します。新しいピアが検出されると、それらがリストに追加されます。

私の質問は、DHTがどのように機能するかです。つまり、新しいクライアントは、トラッカーやピアを交換するスウォームの少なくとも1つのメンバーの知識がなくてもどのようにスウォームに参加できますか?

(注:簡単な説明が最適です。)

回答:


48

概要

新しいクライアントは、トラッカーや、ピアを交換するスウォームの少なくとも1人のメンバーの知識なしで、スウォームに参加できますか?

できません。それは無理だ。*

*ローカルエリアネットワークのノードがたまたまDHTのノードである場合を除きます。この場合、Avahiなどのブロードキャストメカニズムを使用して、このピアを「発見」し、そこからブートストラップできます。彼らは自分自身をブートストラップ?結局、マルチキャストではなく、あなたが公共のインターネットに接続する必要がある状況を打つでしょう。そして、公共のインターネットは、ユニキャストのみで、ピアの所定のリストを使用している立ち往生しそう。)


参照資料

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


博覧会

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

私は太字であなたの実際の質問を考える-知らずにKademliaのDHTネットワークに参加する方法のことを任意の他のメンバーを-偽の仮定に基づいています。

あなたの質問に対する太字の簡単な答えは、そうではありません。DHTメタデータを含む可能性のある1つのホストに関する情報もまったく知らないと、立ち往生します。開始することすらできません。つまり、DHT情報をブロードキャストするために開かれたポートを使用して、公共のインターネットでブルートフォース攻撃でIPを発見しようとする可能性があります。しかし、おそらく、BTクライアントは特定の静的IPまたはDNSにハードコーディングされ、DHTメタデータを提供するだけの安定したDHTノードに解決されます。

基本的には、DHTは唯一のように接合機構として分散化され、かつ接合機構はかなり脆いので、あなたが持っているので(!全体のインターネット上で「放送」に方法はありませんユニキャスト DHTを取得するには、個々の事前に割り当てられたホストにデータ)、Kademlia DHTは実際には分散化されていませ。厳密な意味ではありません。

このシナリオを想像してください。P2Pを停止したい人が出て、ブートストラップに使用される一般的に使用されるすべての安定したDHTノードで攻撃を準備します。攻撃を開始すると、一度にすべてのノードに攻撃を仕掛けます。ワム ; ブートストラップDHTノードはすべて1回ですべてダウンします。それで?集中型トラッカーに接続して、そこからピアの従来のリストをダウンロードする必要があります。まあ、彼らもトラッカーを攻撃するなら、あなたは本当に、本当に入り江。つまり、KademliaとBTネットワーク全体は、インターネット自体の制限に制約されています。つまり、90%以上を防ぐために、正常に攻撃またはオフラインにする必要があるコンピューターの数は限られています(比較的少数です)ネットワークへの接続からのユーザーの。

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

もちろん、これを回避するために、誰かが事前に定義された安定したDHTノードまたはDNSアドレスの新しいリストでパッチを適用したBitTorrentクライアントを展開し、代わりにこの新しいリストを使用するようにP2Pコミュニティに大々的に広告を出すことができます。しかし、これは、攻撃者(ノードイーター)がこれらのリストを徐々にダウンロードし、勇敢な新しいブートストラップノードをターゲットにして、オフラインにする「モグラ叩き」の状況になります。


DHTの記述方法は、ピア交換と同じように聞こえます。
セレリタス

DHTに関して配布されるのは、実際のデータペイロード(つまり、ファイルをダウンロードできるIPとポートのリスト)が配布されるということです。ピア交換では、リスト全体が1台のコンピューター(通常はトラッカー)に保存され、ファイルのダウンロードとは異なりますがダウンロードされます。私の答えでそれを言及することができますが、この質問全体(および答え)は、DHTネットワークの最初の発見または参加に関するものであり、参加後の出来事に関するものではありません。
-allquixotic

1
すべてのブートストラップノードを押すと、新しいユーザーのブートストラップが停止しますが、必ずしもオフラインになってから戻ってくる既存のユーザーとは限りません。いくつかのクライアントは、毎回ブートストラップするのではなく、アクティブノードセットを記憶し、それらを使用して再接続するという印象を持っています。
クラック

masscan(github.com/robertdavidgraham/masscan)のようなプロジェクトでは、集中化されたディレクトリなしでDHTノードを検出することが可能です
newlog

19

短い答え: .torrentファイルから取得します。

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

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

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

したがって、ダウンロードするトラッカーレストレントの.torrentファイルをBitTorrentクライアントにフィードすると、.torrentファイルの「nodes」キーの値を使用して、最初のいくつかのDHTノードが検索されます。


3
これは適切な説明情報です。あなたの答えは、現在のBitTorrentクライアントが私の答えで特定された理論的な制限と問題を処理するために何をするかを説明すると思う。うまくいけば、答えのさまざまな側面を説明するため、両方の答えが支持されます。
-allquixotic

3
多くのクライアントで「新しいtorrentファイルとダウンロードtorrentをマージ」することで、死んだtorrentが生き返るのはなぜですか?
ジェビンホセ

2
@aitchnyuはい、ただしトレントファイルには追加/異なるトラッカーが含まれている場合があります。
ロングネック

2
BitTorrentクライアントは実際にはノード情報を含んでいないようです。Transmission、Vuze、Deluge、Mainlineなどをテストしました。
Aeyoun

1

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

DHTで配布されることは、クライアントが共有ファイル名のmd5合計を含むすべてのリストを、対応するピアとともに保持する必要がないことを意味します。ハッシュのリストは、等しい部分にシェープされ、群れ全体に冗長性を持たせて配布されます。ピアが切断された場合、ハッシュリストの同じ部分を持つ別のピアがどこかにあります。ピアは、ハッシュリスト部分の良い所有者へのアドレスを互いに共有します。

torrent-freakはこのテーマに関する投稿を書きました


0

新しいクライアントは、トラッカーや、ピアを交換するスウォームの少なくとも1人のメンバーの知識なしで、スウォームに参加できますか?

それを求めます。

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

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

DHTは、基本的にトラッカーの置き換えを目的とした2番目のP2Pアプリケーションです。(infohash、swarm)のペアを保存し、アナウンスメッセージを受信した場合にswarmを更新します。新しいクライアントは、DHTの情報をブートストラップするために、「ノード」(DHTのピアのビットトレント用語)の知識を持っている必要があります。ここでは、@ allquixoticで指定された引数が適用されます。MDHTは現在700万以上のピアで構成されているため、持続的なサービス拒否攻撃は考えられません。

その後、infohashに関してDHTを照会でき、トラッカーを使用したり、以前にswarmの一部であるピアを知る必要はありません。彼が連絡するピアの1つがメタデータの共有をサポート ている場合、infohashがswarmから.torrentファイルを取得できることだけが必要です。


0

ほとんどのp2pネットワーククライアントは、最初に接続するシードピアのリストからブートストラップされます...ブートストラップされた1つのピアに接続すると、残りを分散方式でダウンロードします。ブートストラップピアに接続し、ピアのDHTリストをダウンロードしてから、それらのそれぞれにアクセスして、同じことを行います。

例えば:

ブートストラップノードのリストは次のとおりです。

https://github.com/dontcontactme/p2pspider/blob/master/lib/dh​​tspider.js#L10

クライアントがピアリストにハイドレートするためにクライアントに接続する場所は次のとおりです。

https://github.com/dontcontactme/p2pspider/blob/master/lib/dh​​tspider.js#L60

これはトラッカーの動作に似ていますが、ほとんど誰でもブートストラップノードになることができるため、シャットダウンすることはほぼ不可能です。

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


リンクは死んでいます
ゼラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.