Libtorrent

libtorrentはオープンソースのBitTorrentプロトコル実装である。C++でプログラミングされており、主要なライブラリインタフェースもC++である。主な特徴としては、Mainline DHT、IPv6、HTTPシード、μTorrentのピア交換への対応が挙げられる。libtorrentはBoost、特にBoost.Asioを使用することで、プラットフォーム非依存性を実現している。libtorrentはWindowsおよびほとんどのUnix系オペレーティングシステム（macOS、Linux、多数のBSD）でビルド可能であることが知られている。

libtorrentは、開発者にとって最も有用と見なされるBitTorrent拡張に対応するよう継続的に更新されており、より幅広い環境で動作するよう最適化が進められている。その多くの機能はコンパイル時に無効化することが可能であり、特定のユースケースで使用されないコードを含めないようにできる。libtorrentは、組み込みデバイス、デスクトップ、シードサーバにとって最も適したlibtorrent実装を目指している。その実装の詳細については、「特徴」の節で述べられている。

libtorrentのオリジナル作者は アルヴィド・ノーバーグである。これはμTorrentと共に拡張プロトコルに初めて対応したクライアントであり、現在では多くの他の拡張の基盤となっている。

特徴
実装されたBEP
BEP（BitTorrent Enhancement Proposal）は、BitTorrent拡張提案プロセスの一部である。BEPとは、BitTorrentコミュニティに情報を提供する設計文書であり、またはBitTorrentプロトコルの新機能を説明するものである。BEPは、機能の簡潔な技術仕様と、その機能の根拠を提供すべきである。BEPは、新機能の提案、問題に対するコミュニティの意見収集、BitTorrentに関する設計決定の記録手段として機能することを目的としている。BEPの著者は、コミュニティ内でコンセンサスを構築し、反対意見を記録する責任を負う。

BEPはバージョン管理されたリポジトリ内でreStructured textファイルとして管理されており、そのリビジョン履歴は機能提案の歴史的記録となる

BEPには以下の三種類がある。

 Standards Track BEPは、BitTorrentプロトコルの拡張、またはプロトコル内のアクター（現在はクライアント、トラッカー、Webサーバ）の動作の変更を記述する。
 Informational BEPは、BitTorrent設計上の問題について説明したり、BitTorrentコミュニティに対して一般的なガイドラインや情報を提供するが、拡張提案は行わない。Informational BEPは必ずしもBitTorrentコミュニティのコンセンサスや推奨を反映しているわけではないため、ユーザーや実装者はこれらを無視してもよいし、参考にしてもよい。
 Process BEPは、BitTorrentを取り巻くプロセスを説明したり、プロセスへの変更（または出来事）を提案する。Process BEPはStandards Track BEPに似ているが、BitTorrentプロトコル以外の分野に適用される。これらは単なる推奨にとどまらず、ユーザーは通常これを無視できない。例としては、リリーススケジュール、手順、ガイドライン、意思決定プロセスの変更、BitTorrent開発に使用されるツールや環境の変更などがある。

 BEP #  タイトル  備考 3  BitTorrentプロトコル  5  DHTプロトコル  トラッカーなしトレント、メインライン Kademlia DHTプロトコル 7  IPv6 トラッカー拡張  9  ピアからメタデータファイルを送信するための拡張  メタデータ転送プロトコル、マグネットリンクを有効化 10  拡張プロトコル  11  ピア交換  μTorrent PEX 12  マルチトラッカーメタデータ拡張  μTorrentの解釈にも対応 14  ローカルピア検出   15  UDP トラッカープロトコル  16  スーパーシーディング  17  HTTPシーディング  ホフマン方式 19  WebSeed - HTTP/FTPシーディング（GetRight方式）  21  部分シードのアップロードのみ  24  トラッカーが外部IPを返す  27  プライベートトレント  29  Micro Transport Protocol  バージョン0.16.0以降 30  ハッシュ木  バージョン0.15以降 32BitTorrent DHTのIPv6拡張バージョン1.2以降 33  DHTスクレイプ  バージョン0.16以降 38  ミュータブルトレント  バージョン1.1以降 40  標準化ピア優先順位  バージョン1.0以降 43  読み取り専用DHTノード  バージョン1.0.3以降 44  DHT put/get  バージョン1.0以降 47  パッドファイルとファイル属性  バージョン0.15以降 51DHT infohashインデクシングバージョン1.2以降 52BitTorrentプロトコル仕様バージョン2バージョン2.0以降 53マグネットリンクのファイル選択バージョン1.2以降 55  ホールパンチ拡張 

Merkle hash tree torrents
これはBitTorrentプロトコルのBEP30である。Merkle hash tree torrentsは、ピースハッシュを形成するハッシュツリーのルートハッシュのみをトレントファイルに含めることを可能にする拡張である。この機能の主な利点は、トレント内にいくつピースがあっても、.torrentファイルのサイズが常に一定であることである。.torrentファイルのサイズはファイル数に応じてのみ増加する（ファイル名を含める必要があるため）。

通常のトレントでは、クライアントはピースを検証する前に、複数のブロックを異なるピアから取得しなければならない。ピースのサイズが大きくなるほど、ピース全体をダウンロードして検証するまでに時間がかかる。ピースが検証されるまで、そのデータはスウォームと共有できないため、ピースサイズが大きいほど、ピアによってダウンロードされたデータの再配布までの時間が長くなる。平均すると、データはクライアントのバッファ内で検証待ちの状態になる時間が長くなる。

もう一つの大きなピースサイズの問題は、ピースが失敗した場合に悪意のある、またはバグのあるピアを特定しにくくなり、再ダウンロードに時間がかかり、成功するまでに試行回数が増えることである。

通常のトレントにおけるピースサイズは、.torrentファイルのサイズとピースサイズとのトレードオフである。例えば、4GBのファイルでは、.torrentファイルのサイズを大きくしすぎないようにするために、ピースサイズが2MBまたは4MBになることが多い。

Merkle hash tree torrentsは、この.torrentファイルサイズとピースサイズのトレードオフを解消することで、これらの問題を解決する。ピースサイズを最小のブロックサイズ (16KB) にし、これによりピアは他のピアから受け取ったすべてのデータブロックを即座に検証することが可能になる。これによりターンアラウンドタイムが最小化され、悪意のあるピアの特定の問題は完全に排除される。

アプリケーション
libtorrentを使用している主なアプリケーションは以下の通りである。
 Deluge：クロスプラットフォームのBitTorrentクライアント
 Electric Sheep：スクリーンセーバー用のBitTorrentクライアント
 Free Download Manager：Windows向けのオープンソースダウンロードマネージャー
 LimeWire：マルチプラットフォームのファイル共有クライアント
 Miro：クロスプラットフォームのインターネットテレビアプリケーション
 qBittorrent：C++/Qtを使用したBitTorrentクライアント
 Tribler：分散型で匿名性を備えたBitTorrentクライアント
 『』：FOGダウンローダーがゲームクライアントのアップデートにlibtorrentを使用しているMMORPG
 『World of Tanks』：ランチャーがゲームクライアントのアップデートにlibtorrentを使用しているMMORPG

関連項目



脚注

外部リンク


Category:BitTorrent
Category:BitTorrentクライアント
Category:C++でプログラムされた自由ソフトウェア