Libtorrent

libtorrentはオープンソースのBitTorrentプロトコル実装である。C でプログラミングされており、主要なライブラリインタ�…

Libtorrent
libtorrent
開発元 アルヴィド・ノーバーグ
初版 2005年9月 (20年前) (2005-09)
最新版
2.1.1[1] ウィキデータを編集 / 2026年8月10日 (9日前)
リポジトリ github.com/arvidn/libtorrent/
プログラミング
言語
C++
対応言語 英語
種別 BitTorrentライブラリ
ライセンス 三条項BSDライセンス
公式サイト libtorrent.org
テンプレートを表示

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

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

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

特徴

実装されたBEP

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

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

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

  1. Standards Track BEPは、BitTorrentプロトコルの拡張、またはプロトコル内のアクター(現在はクライアント、トラッカー、Webサーバ)の動作の変更を記述する。
  2. Informational BEPは、BitTorrent設計上の問題について説明したり、BitTorrentコミュニティに対して一般的なガイドラインや情報を提供するが、拡張提案は行わない。Informational BEPは必ずしもBitTorrentコミュニティのコンセンサスや推奨を反映しているわけではないため、ユーザーや実装者はこれらを無視してもよいし、参考にしてもよい。
  3. 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以降[3]
30 ハッシュ木 バージョン0.15以降[4]
32 BitTorrent DHTのIPv6拡張 バージョン1.2以降
33 DHTスクレイプ バージョン0.16以降[4]
38 ミュータブルトレント バージョン1.1以降[4]
40 標準化ピア優先順位 バージョン1.0以降[4]
43 読み取り専用DHTノード バージョン1.0.3以降[4]
44 DHT put/get バージョン1.0以降[4]
47 パッドファイルとファイル属性 バージョン0.15以降[4]
51 DHT infohashインデクシング バージョン1.2以降
52 BitTorrentプロトコル仕様バージョン2 バージョン2.0以降
53 マグネットリンクのファイル選択 バージョン1.2以降
55 ホールパンチ拡張

Merkle hash tree torrents

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

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

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

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

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

アプリケーション

libtorrentを使用している主なアプリケーションは以下の通りである。

関連項目

脚注

  1. ^ Release 2.1.1” (2026年8月10日). 2026年8月11日閲覧。
  2. ^ bep_0001.rst_post”. www.bittorrent.org. 2020年2月12日時点のオリジナルよりアーカイブ。2020年2月19日閲覧。
  3. ^ Google Code Archive - Long-term storage for Google Code Project Hosting.”. code.google.com. 2021年4月18日時点のオリジナルよりアーカイブ。2022年2月5日閲覧。
  4. ^ a b c d e f g arvidn/libtorrent” (2022年2月4日). 2022年2月5日時点のオリジナルよりアーカイブ。2022年2月5日閲覧。
  5. ^ Archived copy”. 2014年12月18日時点のオリジナルよりアーカイブ。2010年12月6日閲覧。

外部リンク

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.