BitTorrentファイル配信システムでは、トレントファイルまたはメタ情報ファイルは、配信されるファイルやフォルダに関するメタデータ、および通常はトラッカーのネットワーク上の場所のリストを含むコンピュータファイルです。トラッカーとは、システム参加者が互いを見つけ、スウォームと呼ばれる効率的な配信グループを形成するのに役立つコンピュータです。[ 1 ]トレントファイルは通常、拡張子で命名されます。.torrent
トレントファイルは、トレントクライアントを使用してコンピュータが情報を検索できるようにする目次(インデックス)のような役割を果たします。トレントファイルを利用することで、既にダウンロード済みのコンピュータから元のファイルの小さな部分をダウンロードできます。これらの「ピア」は、プライマリサーバーに加えて、またはプライマリサーバーの代わりに、ファイルのダウンロードを可能にします。トレントファイルには、配布するコンテンツ自体は含まれていません。ファイルの名前、フォルダ構造、サイズ、ファイルの整合性を検証するための暗号化ハッシュ値など、ファイルに関する情報のみが含まれています。
トレントシステムは、中央サーバーへの負荷を軽減するために開発されました。個々のクライアントがサーバーからファイルを取得する代わりに、トレントはファイル転送に必要な帯域幅をクラウドソーシングで共有し、大容量ファイルのダウンロード時間を短縮します。多くのフリーウェアプログラムやオペレーティングシステム(各種Linuxディストリビューションなど)は、前述のメリットを求めるユーザー向けにトレントダウンロードオプションを提供しています。メディアファイルなどの大容量ファイルも、トレントでダウンロードされることがよくあります。
一般的に、インターネットアクセスは非対称であり、アップロード速度よりもダウンロード速度が速く、各ダウンロードの帯域幅が制限され、場合によっては帯域幅の上限が設定されたり、システムにアクセスできない期間が発生したりします。そのため、多くの人が単一のソースから同じファイルセットを取得しようとすると、非効率が生じます。ソースは常にオンラインで、膨大な送信帯域幅を備えている必要があるからです。トレントプロトコルは、配布を分散化し、人々が互いに「ピアツーピア」でネットワーク接続できる能力を活用することで、この問題を解決します。
配布される各ファイルは、ピースと呼ばれる小さな情報チャンクに分割されます。ダウンロードを行うピアは、スウォーム内の異なるコンピュータから複数のピースを同時に要求することで、高速なダウンロードを実現します。これらのピースは、取得後すぐにスウォーム内の他のピアがダウンロードできるようになります。このようにして、ネットワークの負荷は中央の配信ハブやクラスタに集中するのではなく、ダウンロードを行うピア間で分散されます。すべてのピースが利用可能であれば、ピア(ダウンロードを行うピアとアップロードを行うピア)は自由に出入りできます。他のピア間での配信を継続するために、どのピアもすべてのチャンクを保有している必要はなく、スウォームに接続したままである必要もありません。
共有するファイルまたはフォルダを表すために、小さなトレントファイルが作成されます。このトレントファイルは、実際のコンテンツのダウンロードを開始するための鍵として機能します。共有ファイルまたはフォルダを受け取りたいユーザーは、まず対応するトレントファイルを、直接ダウンロードするかマグネットリンクを使用して入手します。次に、ユーザーはそのファイルをトレントクライアントで開き、残りのプロセスを自動化します。ピースを共有している可能性のあるピアのインターネット上の場所を知るために、クライアントはトレントファイルに記載されているトラッカーに接続し、または分散ハッシュテーブル(DHS)を使用して同様の結果を得ます。その後、クライアントはピアに直接接続してピースを要求し、スウォームに参加します。クライアントは、トラッカーがピアの推奨を行う際に役立つように、トラッカーに進捗状況を報告することもできます。
クライアントがすべてのピースを入手すると、トレントクライアントはそれらを組み立てて使用可能な形式にします。また、ピースの共有を継続することで、通常のピアではなくシーダーとしての地位に昇格することも可能です。
torrent ファイルには、すべてのピースに関するファイルと整合性メタデータのリストが含まれており、オプションでトラッカーの大きなリストが含まれています。
トレントファイルは、以下のキーを持つベンエンコードされた辞書です(ベンエンコードされた辞書のキーは、辞書順に並んでいます)。
すべての文字列はUTF-8でエンコードする必要があります。ただし、バイナリデータを含むpiecesは例外です。
トレントは、 bencode形式の情報辞書の内容に対して計算されたSHA-1ハッシュであるinfohashによって一意に識別されます。トレントの他の部分への変更はハッシュに影響を与えません。このハッシュは、DHTを介して他のピアやトラッカーに対してトレントを識別するために使用されます。また、マグネットリンクにも使用されます。
BitTorrent v2プロトコル(BEP-0052)は、トレントファイルの新しい定義を導入しています。[ 2 ]基本的な構造は次のとおりです。
新しいフォーマットでは、ピースハッシュとインフォハッシュの両方でSHA-256を使用し、壊れたSHA-1ハッシュを置き換えます。「btmh」マグネットリンクには完全な32バイトのハッシュが含まれますが、トラッカーとの通信やDHT上では、古いメッセージ構造に収まるように20バイトに切り詰められたバージョンが使用されます。[ 2 ]「v2」トレントの場合は更新された新しいフィールドのみで、または「ハイブリッド」フォーマットの場合は古いフィールドと新しいフィールドの両方でトレントファイルを作成できます。ただし、v1ネットワークとv2ネットワークではトレントのインフォハッシュが異なるため、2つのスウォームが形成され、クライアントによる特別な処理で2つをマージする必要があります。[ 3 ]
新フォーマットのコア機能はマークルツリーの適用であり、これによりピースの 16KiB ブロックを個別に検証して再ダウンロードできます。各ファイルは常にピース全体のサイズを占め、独立したマークルルートハッシュを持つため、ピースの長さに関係なく、無関係なトレントファイル間で重複ファイルを見つけることが可能です。ファイルサイズは縮小されません (ピースサイズが同じであると仮定した場合。v2 のツリー構造では、悪影響が少なく、より大きなピースが可能になります) が、マグネットリンクに必要な情報辞書は縮小されます (v2 専用のトレントのみ)。[ 3 ]
トレントファイルには、BitTorrent仕様の拡張機能で定義された追加のメタデータも含まれる場合があります。[ 4 ]これらは「BitTorrent拡張提案」として知られています。このような提案の例としては、トレントを作成した人や作成日時を示すメタデータなどがあります。
これらの拡張機能は、1つ以上の実装で既に導入されており、一貫した広範な利用を通じてその有用性が実証されています。若干の修正が必要となる可能性はありますが、概ね完成しており、最終版/アクティブプロセスとして承認されるには、ブラム・コーエン氏の承認を待つばかりです。
BEP-0005 [ 5 ]は、分散ハッシュテーブル、特にメインライン DHT をサポートするように BitTorrent を拡張します。
トラッカーレスのトレント辞書には、 announceキーがありません。代わりに、トラッカーレスのトレントにはnodesキーがあります。
{ # ... 'nodes' : [[ "<host>" , <port> ], [ "<host>" , <port> ], ... ], # ... }例えば、
'nodes' : [[ "127.0.0.1" , 6881 ], [ "your.router.node" , 4804 ]] ,仕様書では、ノードは「トレント生成クライアントのルーティングテーブル内で最も近いK個のノードに設定すべきである。あるいは、キーは、トレント生成者が操作するノードなど、既知の正常なノードに設定することもできる」と推奨している。
BEP-0012 [ 6 ]は BitTorrent を拡張して複数のトラッカーをサポートする。
新しいキー「announce-list」が最上位の辞書(つまり、announceとinfoと同じ場所)に追加されます。
{ # ... 'announce-list' : [[ '<tracker1-url>' ][ '<tracker2-url>' ]], # ... }BEP-0019 [ 7 ]は、HTTP シードを BitTorrent で使用できるようにする 2 つの拡張機能のうちの 1 つです。
BEP-0019 では、新しいキーurl-listが最上位リストに配置されます。クライアントはリンクを使用して通常の HTTP URL を組み立てます。サーバー側のサポートは必要ありません。この機能は、ソフトウェアのダウンロードを提供するオープンソースプロジェクトでよく使用されます。Web シードを使用すると、クライアントはミラー サイト(P2P または HTTP(S))をスマートに選択して同時に使用できます。これにより、プロジェクトのサーバーへの負荷が軽減され、ダウンロード速度が最大化されます。MirrorBrainは、Web シードを使用してトレントを自動的に生成します。
BEP-0027 [ 8 ]は、プライベートトレントをサポートするように BitTorrent を拡張します。
情報辞書に新しいキー「private」が追加されます。トレントがプライベートの場合、このキーの値は1になります。
{ # ... 'info' : { # ... 'private' : 1 , # ... }, # ... }プライベートトレントは、プライベートトラッカーと併用して使用します。このようなトラッカーは、ピアのIPアドレスをチェックすることで、追跡対象のトレントへのアクセスを制限し、IPアドレスが不明な場合はピアリストの提供を拒否します。ピア自体は通常、アクセス制限のあるオンラインコミュニティを通じてトラッカーに登録されます。また、プライベートトラッカーは通常、コミュニティ内での利用のためにデータ転送の統計情報も保持します。
中央集権的な制御を維持するため、 DHT、PeX、LSDなどの分散型手法は無効になっています。プライベートトレントは手動で編集してプライベートフラグを削除できますが、そうすると情報ハッシュが(決定論的に)変更され、別のピアの「スウォーム」が形成されます。一方、トラッカーリストを変更してもハッシュは変更されません。このフラグは真のプライバシーを提供するものではなく、紳士協定として機能します。
これらの拡張機能は標準化に向けて検討中である。そのほとんどはすでに事実上の標準として広く採用されている。
BEP-0017 [ 9 ]は、HTTP シードをサポートするように BitTorrent を拡張し、後にHTTPSを含む「ウェブ シード」と呼ばれるようになりました。
BEP-0017では、新しいキー「httpseeds」が最上位リスト(announceとinfoと同じリスト)に追加されました。このキーの値は、トレントデータを取得できるWebアドレスのリストです。特別なサーバーサポートが必要です。現状はドラフト段階です。
{ # ... 'httpseeds' : [ 'http://www.site1.com/source1.php' , 'http://www.site2.com/source2.php' ], # ... }BEP-0030 [ 10 ]は、BitTorrent を拡張してマークルツリー(元々はTriblerで実装) をサポートするようにしました。目的は、トレントファイルのファイルサイズを小さくし、トレントファイルを提供する側の負担を軽減することです。
Merkleツリーを使用するトレントファイルには、情報リストにpiecesキーがありません。代わりに、そのようなトレントファイルには情報リストにroot_hashキーがあります。このキーの値は、Merkleハッシュのルートハッシュです。
{ # ... 'info' : { # ... 'root hash' : <バイナリSHA1ハッシュ> , # ... }, # ... }BitTorrent v2 は異なるタイプのマークルツリーを使用します。[ 3 ]
ファイルdebian-503-amd64-CD-1.iso (サイズは 678,301,696 バイト)のデコードされたトレントファイル (ピース長256 KiB = 262,144 バイト) は、次のようになります。
{ 'announce' : 'http://bttracker.debian.org:6969/announce' , 'info' : { 'length' : 678301696 , 'name' : 'debian-503-amd64-CD-1.iso' , 'piece length' : 262144 , 'pieces' : <バイナリSHA1ハッシュ> } }2つのファイル(111.txtと222.txt )をデコードしたトレントファイル(ピース長256 KiB = 262144 B)は、次のようになるかもしれません。
{ 'announce' : 'http://tracker.example.com/announce' , 'info' : { 'files' : [ { 'length' : 111 , 'path' : [ '111.txt' ]}, { 'length' : 222 , 'path' : [ '222.txt' ]} ], 'name' : 'directoryName' , 'piece length' : 262144 , 'pieces' : <バイナリSHA1ハッシュ> } }