177

初めてマグネットリンクを使いました。それがどのように機能するのか興味があり、仕様を調べましたが、答えが見つかりませんでした。ウィキはxt「正確なトピック」を意味し、その後にbtihSHA1ハッシュを使用した形式(この場合)が続きます。base32 が言及されているのを見て、1 文字あたり 5 ビットで 32 文字であることを知っていたので、正確に 160 ビットを保持していることがわかりました。これは正確に SHA1 のサイズです。

IP アドレスなどを入れる余地はありません。ただの SHA1 です。では、BitTorrent クライアントはどのようにして実際のファイルを見つけるのでしょうか? URL Snooper をオンにして、(TCP を使用して) ページにアクセスするか、ルックアップなどを行うかを確認しましたが、何も起こりませんでした。クライアントがピアを見つける方法がわかりません。これはどのように作動しますか?

また、ハッシュは何ですか?すべてのファイルハッシュをまとめた配列のハッシュですか? 多分それは必要な実際のトレントファイルのハッシュです(特定の情報を取り除いています)?


VM で、uTorrent (新しくインストールしたもの) とのマグネット リンクを試してみたところ、ピアを見つけることができました。最初のピアはどこから来たのですか? 新鮮で他に激流はありませんでした。

4

6 に答える 6

52

ピア検出とリソース検出 (この場合はファイル) は 2 つの異なるものです。

私は JXTA の方が詳しいですが、すべてのピア ツー ピア ネットワークは同じ基本原理で動作します。

最初に行う必要があるのは、ピアの発見です。

ピアディスカバリー

ほとんどの p2p ネットワークは「シードされた」ネットワークです。最初にピアを起動すると、既知の (ハードコードされた) アドレスに接続して、実行中のピアのリストを取得します。これは、別の投稿で述べたように接続するような直接シード、 dht.transmissionbt.comまたはピアが他のピア ネットワーク アドレスのプレーン テキスト リストのみを配信するアドレスに接続する JXTA で通常行われる間接シードのいずれかです。

最初の (少数の) ピアとの接続が確立されると、接続しているピアは (要求を送信することによって) 他のピアの検出を実行し、それらのテーブルを維持します。他のピアの数が膨大になる可能性があるため、接続ピアはピアの分散ハッシュ テーブル (DHT) の一部のみを維持します。接続ピアが維持する必要があるテーブルの部分を決定するアルゴリズムは、ネットワークによって異なります。BitTorrent は、160 ビットの識別子/キーを持つ Kademlia を使用します。

リソースの発見

接続しているピアによっていくつかのピアが発見されると、後者はそれらにリソースを発見するためのいくつかのリクエストを送信します。マグネット リンクはこれらのリソースを識別し、それらがリソースの「署名」となり、すべてのピア間で要求されたコンテンツを一意に識別することを保証するように構築されています。接続しているピアは、マグネット リンク/リソースの検出要求を周囲のピアに送信します。DHT は、どのピアに最初にリソースを要求する必要があるかを判断するのに役立つように構築されています (詳細については、Wikipedia の Kademlia を参照してください)。要求されたピアが要求されたリソースを保持していない場合、通常は自身の DHT からフェッチされた追加のピアにクエリを「渡します」。

通常、クエリを渡すことができる「ホップ」の数は制限されています。4 は、JXTA タイプのネットワークでは通常の番号です。

ピアがリソースを保持している場合、完全な詳細を返信します。接続しているピアは、リソースを保持しているピアに (直接またはリレーを介して - ここでは詳しく説明しません) 接続し、フェッチを開始できます。

P2P ネットワークのリソース/サービスは、ネットワーク アドレスに直接接続されていません。それらは分散されており、それがこれらの非常にスケーラブルなネットワークの利点です。

于 2014-03-13T08:09:13.230 に答える
30

私は同じ質問に興味がありました。送信用のコードを読んだところ、次のことがわかりましたlibtrnasmission/tr-dht.c

3248:     bootstrap_from_name( "dht.transmissionbt.com", 6881,
                               bootstrap_af(session) );

それを 6 回試行し、試行間で 40(!) 秒待機します。~/.config/transmission構成ファイルを削除して ( UNIX の場合)、 へのすべての通信をブロックすることでテストできると思いますdht.transmissionbt.com。何が起こるかを確認してください (少なくとも 240 秒待ちます)。

そのため、クライアントには最初からブートストラップ ノードが組み込まれているようです。もちろん、ネットワークに入ると、そのブートストラップ ノードはもう必要ありません。

于 2011-07-15T19:25:17.770 に答える
10

私があなたの質問に答え始めたとき、あなたがマグネットスキームがどのように機能するかを尋ねていることに気づきませんでした. bittorrent プロトコルに関連する部分がどのように生成されたかを知りたいと思っただけです。


マグネット uri にリストされているハッシュは、base32 でエンコードされた torrent の情報ハッシュです。情報ハッシュは、トレントのベンコードされた情報ブロックの sha1 ハッシュです。

このpython コードは、計算方法を示しています。

手元にベンコーダーがなく、クライアントから期待されるものと一致するため、これをテストするために (非常に単純な) C# 実装を作成しました。

static string CalculateInfoHash(string path)
{
    // assumes info block is last entry in dictionary
    var infokey = "e4:info";
    var offset = File.ReadAllText(path).IndexOf(infokey) + infokey.Length;
    byte[] fileHash = File.ReadAllBytes(path).Skip(offset).ToArray();
    byte[] bytes;
    using (SHA1 sha1 = SHA1.Create())
        bytes = sha1.ComputeHash(fileHash, 0, fileHash.Length - 1); // need to remove last 'e' to compensate for bencoding
    return String.Join("", bytes.Select(b => b.ToString("X2")));
}

私が理解しているように、このハッシュにはトラッカーの場所を特定する方法に関する情報は含まれていません。クライアントは他の手段 (提供されたアナウンス URL) でこれを見つける必要があります。これは、トラッカー上でトレントを別のトレントと区別するものです。

BitTorrent プロトコルに関連するものはすべて、依然としてトラッカーを中心に展開しています。それは今でも群れの間の主要な通信手段です。マグネット URI スキームは、bittorrent で使用するために特別に設計されたものではありません。これは、通信の代替形式として、あらゆる P2P プロトコルで使用されます。Bittorrent クライアントは、トレントを識別する別の方法としてマグネット リンクを受け入れるようになりました。これにより、.torrent ファイルをダウンロードする必要がなくなりました。マグネット uri はtr、クライアントが参加できるように、アッカーを特定するためにアッカーを指定する必要があります。他のプロトコルに関する情報を含めることができますが、bittorrent プロトコルとは無関係です。bittorrent プロトコルは、最終的にトラッカーなしでは機能しません。

于 2010-10-02T06:47:19.257 に答える
9

やっと仕様がわかった。初めてグーグルは役に立ちませんでした。(メイン サイトである bittorrent.com にリンクされている wiki。開発者のリンクをクリックすると、右側に bittorrent.org タブがあることに注意してください。そこからは簡単でした。ラベルが何なのかわからないと、リンクを見つけるのが難しく、多くのリンクが表示されます。クリックして離れます)。

すべての torrent にはピアのネットワークがあるようです。トラッカーからピアを見つけ、セッション間でそれらを保持します。ネットワークを使用すると、ピアやその他のものを見つけることができます。マグネットリンクでの使用方法を読んだことはありませんが、新しいクライアントがピアを見つける方法は未定義のようです. おそらく一部は組み込まれているか、ホームサーバーまたはクライアントに埋め込まれた既知のトラッカーを使用して、ネットワーク内の最初のピアを取得しています。

于 2010-10-02T08:50:57.777 に答える
3

ピアのリストは、おそらくクライアントをアップグレードする torrent から取り込まれます (たとえば、それをアップグレードする utorrent の torrent があります)。全員が同じクライアントを使用している限り、アップグレードを共有する以外に選択肢がないため、それで問題ありません。

于 2010-10-27T15:36:06.703 に答える