![]() | |
| 開発者 | アルヴィド・ノーバーグ |
|---|---|
| 初回リリース | 2005年9月 |
| 安定リリース | 2.0.10 [1]
/ 2024年2月19日 |
| リポジトリ | github.com/arvidn/libtorrent/ |
| 書かれた | C++ |
| 利用可能 | 英語 |
| タイプ | BitTorrent ライブラリ |
| ライセンス | BSD-3条項 |
| Webサイト | libtorrent.org |
libtorrent は、 BitTorrentプロトコルのオープンソース実装です。 C++で記述されており、主要なライブラリ インターフェイスも C++ です。最も注目すべき機能は、メインライン DHT、IPv6、HTTP シード、μTorrentのピア交換のサポートです。 libtorrent は、プラットフォームの独立性を確保するためにBoost、具体的にはBoost.Asio を使用しています。 WindowsおよびほとんどのUnix 系オペレーティング システム ( OS X、Linux、および多くのBSD ) で構築できることが知られています。
libtorrent は、開発者が最も有用と考える Bittorrent 拡張機能で最新の状態に保たれており、より広範な環境で動作するように積極的に最適化されています。その機能の多くは、特定のユースケースで使用されないコードを含まないように、コンパイル時に無効にすることができます。組み込みデバイス、デスクトップ、シード サーバーに最適な libtorrent 実装を目指しています。その実装の詳細については、機能セクションで説明されています。
libtorrent の原作者は Arvid Norberg です。これは、現在では他の多くの拡張機能の基盤となっている μTorrentとともに拡張プロトコルをサポートする最初のクライアントです。
特徴
実装されたBEP
BEP は、BitTorrent 拡張提案プロセスの一部です。BEP は、BitTorrent コミュニティに情報を提供したり、BitTorrent プロトコルの新機能を説明したりする設計ドキュメントです。BEP では、機能の簡潔な技術仕様と機能の根拠を示す必要があります。BEP は、新機能を提案したり、問題に関するコミュニティの意見を集めたり、BitTorrent に盛り込まれた設計上の決定を文書化したりするための主要なメカニズムとなることを目指しています。BEP の作成者は、コミュニティ内で合意を形成し、反対意見を文書化する責任があります。
BEPはバージョン管理されたリポジトリ内の再構築されたテキストファイルとして維持されるため、その改訂履歴は機能提案の履歴記録となる[2]
BEP には 3 種類あります。
- 標準化過程の BEP は、BitTorrent プロトコルの 1 つに対する拡張、またはこれらのプロトコルのアクターの 1 つの動作の変更 (アクターは現在クライアント、トラッカー、Web サーバー) について説明します。
- 情報 BEP は、BitTorrent の設計上の問題を説明し、BitTorrent コミュニティに一般的なガイドラインや情報を提供しますが、拡張を提案するものではありません。情報 BEP は必ずしも BitTorrent コミュニティの合意や推奨事項を表すものではないため、ユーザーや実装者は情報 BEP を無視したり、そのアドバイスに従ったりすることができます。
- プロセス BEP は、BitTorrent を取り巻くプロセスを説明するか、プロセスの変更 (またはプロセス内のイベント) を提案します。プロセス BEP は、Standards Track BEP に似ていますが、BitTorrent プロトコル以外の領域に適用されます。これらは推奨事項以上のものであり、通常、ユーザーはこれを無視することはできません。例としては、リリース スケジュール、手順、ガイドライン、意思決定プロセスの変更、BitTorrent 開発で使用されるツールまたは環境の変更などがあります。
その他の機能一覧
- libtorrent を変更することなくカスタム Bittorrent 拡張機能を実装するためのプラグイン インターフェイス
- μTorrent ピア交換プロトコル (PEX) をサポートします。
- ローカルピア検出(同じローカルネットワーク上のピアへのマルチキャスト)をサポート
- トラッカースクレイプ
- ピア間でトラッカーを交換するためのlt_trackers拡張をサポートします
- トラッカーの負荷を軽減する no_peer_id=1 拡張をサポートします。
- compact=1 トラッカー パラメータをサポートします。
- マークル ハッシュ ツリー トレントのサポート。これにより、トレント ファイルのサイズがコンテンツのサイズに合わせて適切に調整されます。
- ネットワークまたはクライアントとのやり取りでディスクがブロックされないように、別のディスク I/O スレッドを使用します。
- 2 ギガバイトを超えるファイルは、それをサポートするシステムでサポートされます。
- 高速再開サポート。再開されたトレントの開始時にコストのかかるピース チェックをなくす方法です。ストレージ状態、piece_picker 状態、およびすべてのローカル ピアを別の高速再開ファイルに保存します。
- 調整可能な読み取りおよび書き込みディスク キャッシュを備え、ディスク スループットが向上します。
- すべてのトレントを並列にチェックするのではなく、ファイル チェックのためにキューに入れます。
- 再開するトレント内のピースの順序に関する要件はありません。つまり、どのクライアントによってダウンロードされたトレントでも再開できます。
- スパースファイルとコンパクトファイル割り当て(ディスク上で断片が統合された状態で保持される)の両方をサポートします。
- シード モードでは、ディスク上のファイルは完全であると想定され、各部分のハッシュは最初に要求されたときに検証されます。
- ダウンロード速度に応じてリクエストキューの長さを調整します。
- 単一のポートと単一のスレッドで複数のトレントを提供する
- httpプロキシと基本的なプロキシ認証をサポート
- gzip圧縮されたトラッカーレスポンスをサポート
- アップロードとダウンロードの帯域幅の使用と、チョークされていないピアの最大数を制限できます。
- 接続数を制限する可能性。
- ピアへの他の送信トラフィックがない場合、have メッセージを遅延し、ピースをすでに持っているピアには have メッセージを送信しません。これにより、帯域幅が節約されます。
- 選択的ダウンロード。トレントのどの部分をダウンロードするか選択する機能。
- IP アドレスと IP 範囲の接続と接続されるのを禁止する IP フィルター
- NAT-PMP および UPnP のサポート (サポートしているルーターでの自動ポート マッピング)
- I2P匿名ネットワークを介してトレント トラフィックをプロキシできます。
ディスクキャッシュ
libtorrent のすべてのディスク I/O は、ディスク I/O スレッドによって、ネットワーク スレッドとは非同期に実行されます。ブロックが読み取られると、ディスク I/O スレッドは、そのブロックを要求しているピアが同じブロックからさらにブロックを要求すると想定して、そのブロックから後続のすべてのブロックを読み取りキャッシュに読み込みます。これにより、データ読み取りのためのシステム コールの数が減少します。また、シークによる遅延も減少します。
同様に、書き込み要求の場合、ブロックはキャッシュされ、1 つの完全なピースが完成するか、またはさらにキャッシュ スペースが必要な場合にそのピースが最も最近更新されていないピースになるとディスクにフラッシュされます。キャッシュは、書き込みキャッシュと読み取りキャッシュの間でスペースを動的に割り当てます。書き込みキャッシュは読み取りキャッシュよりも厳密に優先されます。
使用中のキャッシュ ブロックは、ディスクにページ アウトされないように物理メモリにロックされます。ディスク キャッシュをディスクにページ アウトできるようにすると、キャッシュをフラッシュすることが非常に非効率になります。これは、キャッシュを物理メモリに読み戻してから、再びディスクにフラッシュする必要があるためです。
メモリとシステム コールを節約するために、iovec ファイル操作を使用して、1 回の呼び出しで複数のキャッシュ ブロックをフラッシュします。
メモリの少ないシステムでは、メモリを節約するために、ディスク キャッシュを完全に無効にしたり、制限を小さく設定したりすることができます。
ネットワークバッファ
L2 キャッシュが小さい CPU では、メモリのコピーはコストのかかる操作になる可能性があります。このようなマシンでは、コピーを最小限に抑えることが重要です。これは主に組み込みシステムに当てはまります。
受信データのコピー回数を最小限に抑えるため、ペイロード データの受信バッファは、ページ アラインメントされたディスク バッファに直接受信されます。接続が暗号化されている場合、バッファはインプレースで復号化されます。その後、バッファはコピーされずにディスク キャッシュに移動されます。ピースのすべてのブロックが受信されるか、キャッシュをフラッシュする必要がある場合、すべてのブロックはwritev()に直接渡され、1 回のシステムコールでフラッシュされます。つまり、ユーザー空間メモリへのコピーが 1 回行われ、カーネル メモリへのコピーが 1 回行われます。
一般的にシードとアップロードを行う際、ブロックを整列バッファにキャッシュし、ピアの送信バッファに一度コピーすることで、不要なコピーを回避します。ピアの送信バッファは、ほとんどの場合整列していますが、必ずしも整列しているとは限りません。送信バッファは、ピア固有のキーで暗号化され、送信のためにiovecにチェーンされます。つまり、整列していないピア要求とピア固有の暗号化を可能にするために、ユーザー空間のコピーが 1 つあるということです。
ピースピッカー
ピース ピッカーは、Bittorrent 実装の中心的なコンポーネントです。libtorrent のピース ピッカーは、最も希少なピースを素早く見つけられるように最適化されています。ピース ピッカーは、希少性によってソートされたすべての利用可能なピースのリストを保持し、同じ希少性のピースはシャッフルします。最も希少なピースを優先するモードが、ピース ピッカーの主なモードです。他のモードもサポートされており、特定の状況でピアによって使用されます。
ピース ピッカーを使用すると、ピースの可用性と優先度を組み合わせることができます。これらを組み合わせてピース リストの並べ替え順序を決定します。優先度 0 のピースは選択されません。これは選択的ダウンロード機能に使用されます。
未完成のピースをできるだけ少なくするために、ピアは同じ速度カテゴリの他のピアと同じピースからブロックを選択する傾向があります。速度カテゴリは、ダウンロード速度に基づいたピアの大まかな分類です。これにより、低速ピアは同じピースからブロックを選択し、高速ピアは同じピースから選択するため、低速ピアがピースの完成をブロックする可能性が低くなります。
ピースピッカーは、ピースを順番にダウンロードするように設定することもできます。
マークルハッシュツリートレント
これは BitTorrent プロトコルの BEP30 です。Merkleハッシュ ツリートレントは、トレント ファイルにピース ハッシュを形成するハッシュ ツリーのルート ハッシュのみを含めることができる拡張機能です。[5]この機能の主な利点は、トレントにピースがいくつあっても、.torrent ファイルのサイズは常に同じであることです。ファイルの数に応じてサイズが大きくなります (ファイル名を含める必要があるため)。
通常のトレントでは、データがピース ハッシュに対して検証される前に、クライアントはピースの複数のブロック (通常は異なるピアから) を要求する必要があります。ピースが大きいほど、完全なピースをダウンロードして検証するのに時間がかかります。ピースが検証される前に、ピースをスウォームと共有することはできません。つまり、ピースのサイズが大きいほど、ピアによってダウンロードされるデータのターンアラウンドが遅くなります。平均すると、データは検証されて再度アップロードできるようになるまで、クライアント バッファー内で待機する必要があります。
ピースのサイズが大きい場合のもう 1 つの問題は、ピースが失敗したときにクライアントが悪意のあるピアまたはバグのあるピアを特定するのが難しくなることです。また、ピースが大きいほど、ピースの再ダウンロードに時間がかかり、ピースが成功するまでに試行回数が増えます。
通常のトレントのピース サイズは、.torrent ファイル自体のサイズとピース サイズの間のトレードオフです。多くの場合、4 GB のファイルの場合、.torrent ファイルが大きくなりすぎないようにするため、ピース サイズは 2 MB または 4 MB になります。
Merkle トレントは、.torrent サイズとピース サイズの間のトレードオフを排除することで、これらの問題を解決します。Merkle トレントでは、ピース サイズを最小ブロック サイズ (16 KB) にすることができるため、ピアはピアから受信したすべてのデータ ブロックを即座に検証できます。これにより、ターンアラウンド時間が最小限に抑えられ、悪意のあるピアを特定する問題が完全になくなります。
アプリケーション
libtorrent を使用する注目すべきアプリケーション:
- Deluge、クロスプラットフォームBitTorrentクライアント
- Electric Sheepスクリーンセーバー、スクリーンセーバー用BitTorrentクライアント
- 無料のダウンロード マネージャー、Windowsオープン ソースダウンロード マネージャー
- LimeWire、マルチプラットフォームのファイル共有クライアント
- クロスプラットフォームのインターネットテレビアプリケーション、Miro
- qBittorrent、C++ / Qt BitTorrentクライアント
- Tribler、分散型匿名ピアツーピアBitTorrentクライアント
- Runes of Magicは、FOG ダウンローダーがゲーム クライアントの更新に libtorrent を使用する MMORPG です[引用が必要]
- World of Tanks は、ゲームクライアントのアップデートに libtorrent を使用するランチャーを備えた MMORPG です[引用が必要]
参照
参考文献
- ^ “リリース 2.0.10”. 2024年2月19日. 2024年2月20日閲覧。
- ^ “bep_0001.rst_post”. www.bittorrent.org . 2020年2月12日時点のオリジナルよりアーカイブ。2020年2月19日閲覧。
- ^ 「Google Code アーカイブ - Google Code プロジェクト ホスティング用の長期ストレージ」。code.google.com。2021年 4 月 18 日時点のオリジナルよりアーカイブ。2022 年 2 月 5 日に閲覧。
- ^ abcdefg "arvidn/libtorrent". 2022年2月4日. 2022年2月5日時点のオリジナルよりアーカイブ。 2022年2月5日閲覧– GitHub経由。
- ^ 「アーカイブコピー」(PDF) 。 2014年12月18日時点のオリジナル(PDF)からアーカイブ。 2010年12月6日閲覧。
{{cite web}}: CS1 maint: archived copy as title (link)
外部リンク
- 公式サイト

