Multitracker Metadata Extension(多 Tracker 元データ拡張)は、BitTorrent プロトコルのメタデータ拡張であり、複数の BitTorrent トラッカー間の協調作業の効率を向上させることを目的としています。この拡張機能により、Torrent ファイルには複数のトラッカーのアドレスリストが含まれ、クライアントはこれらのアドレスを使用して利用可能なトラッカーに接続することができます。そのため、1 つのトラッカーがオフライン状態でも、クライアントは他のトラッカーを介してファイルをダウンロードまたは共有することができます。
標準の BitTorrent プロトコルとは異なり、Multitracker Metadata Extension ではトラッカーのアドレスリストが含まれています。そのため、クライアントはアクティブなトラッカーをより速く見つけることができます。これにより、Torrent ファイルのダウンロードがより速く開始され、単一のトラッカーの負荷が軽減されます。
メタデータ拡張#
BitTorrent のメタデータファイルには 2 つのキーが含まれています:1 つは標準の「announce」キーであり、もう 1 つは新しい「announce-list」キーです。これらのキーは、クライアントが使用する BitTorrent トラッカーサーバーの URL アドレスリストを指定するために使用されます。
「announce」キーとは異なり、「announce-list」キーはネストされたリスト(リストのリスト)を参照しています。各内部リストはトラッカーサーバーの優先度を表しています。つまり、クライアントは最初に最初の内部リストのすべてのサーバーにリクエストを送信し、利用できないか応答がない場合は次の内部リストのサーバーを順番に試し、利用可能なトラッカーサーバーが見つかるまで続けます。
クライアントが複数のトラッカー仕様をサポートし、メタデータファイルに「announce」と「announce-list」の両方のキーが存在する場合、クライアントは「announce-list」の URL アドレスリストのみを使用し、「announce」キーのアドレスは無視します。これにより、複数のトラッカーサーバーを使用することで、ダウンロードの効率と信頼性が向上し、ダウンロードタスクが他のピアノードを見つけやすくなり、ダウンロード速度が向上します。
実行順序#
「announce-list」キーの URL アドレスリストは優先度(tiers)ごとに個別に処理され、クライアントはリスト内の URL アドレスを優先度ごとに処理します。各優先度内では、URL アドレスはランダムな順序で処理されるため、前にあるアドレスが遅くなったり失敗したりすることを避けることができます。また、クライアントが特定のトラッカーサーバーに接続した場合、そのサーバーが所属する優先度はリストの最前部に移動され、そのサーバーとの通信の確率が向上し、ダウンロード速度が速くなります。
例:
d['announce-list'] = [ [tracker1], [backup1], [backup2] ]
「announce」イベントが発生した場合、まず「tracker1」に接続を試みることをお勧めします。接続に失敗した場合(トラッカーが利用できない可能性があります)、次に「backup1」に接続し、それでも失敗した場合は「backup2」に接続します。次回のアナウンス時には、同じ試行順序を繰り返す必要があります - 最初に「tracker1」を試し、次に「backup1」、最後に「backup2」を試します。この方法を採用する理由は、異なるトラッカーが互いの情報を共有できないためのようです。各トラッカーに対して毎回同じ順序で接続を試みることにより、システムは常に最優先のトラッカーに接続を試みることを確保し、同時に代替オプションを持つことで、そのトラッカーが利用できない場合に備えます。
d['announce-list'] = [[ tracker1, tracker2, tracker3 ]]
まず、トラッカーリストがシャッフルされているとします。クライアントがトラッカーに接続する必要がある場合、次の順序で接続を試みます:
- 最初に「tracker1」に接続を試みます。
- 「tracker1」に接続できない場合、「tracker2」に接続を試みます。
- 「tracker2」に接続できる場合、トラッカーリストは「tracker2,tracker1,tracker3」に再配置され、この順序で後続の接続試行が行われます。
- 「tracker2」または「tracker1」に接続できないが、「tracker3」に接続できる場合、トラッカーリストは「tracker3,tracker2,tracker1」に再配置され、この順序で後続の接続試行が行われます。
トラッカー間の負荷分散ポリシー。この方法により、クライアントとトラッカー間で情報を交換し、負荷分散を実現し、特定のトラッカーが過負荷になることによるシステム全体のパフォーマンスの低下を防ぐことができます。
d['announce-list'] = [ [ tracker1, tracker2 ], [backup1] ]
プロセス中には 3 つのレベルがあります:tracker1、tracker2、および backup1。最初のレベルには tracker1 と tracker2 が含まれ、その順序はランダムかもしれません。 「announce」イベントが発生した場合、システムは特定の順序で(各イベントごとに異なる順序があるかもしれません)tracker1 と tracker2 に接続を試み、その後に backup1 を使用しようとします。つまり、backup1 を使用する前に、システムはまず tracker1 と tracker2 に接続を試みます。