BitTorrentプロトコル
「みんなで分け合うと速くなる」を実現するために、BitTorrentはピース選択・帯域配分・検証のそれぞれに緻密な戦略を組み込んでいます。プロトコルの内部と、正当な利用の広がりを覗いてみましょう。
.torrentとマグネットリンク:info hashによる識別
配布単位となるのが、ファイル群のピースサイズと各ピースのハッシュ値を記したメタデータ(.torrentファイル)です。このメタデータのハッシュ(infoハッシュ)がスウォームの識別子となり、トラッカー・DHT・PEX(ピア交換)を通じて同じinfoハッシュを持つピアを見つけます。マグネットリンクの場合はメタデータ自体もピアから取得します(BEP 9)。
.torrentファイルはBencode(Bエンコード)という単純なバイナリ形式で書かれ、中心となるinfo辞書には、ファイル名、ピース長(一般に256KB〜16MB程度で、ファイルサイズに応じて選ばれる)、そして全ピースのSHA-1ハッシュを連結したpiecesフィールドが含まれます。infoハッシュはこのinfo辞書全体をSHA-1でハッシュ化した20バイトの値で、magnet:?xt=urn:btih:<infoハッシュ>の形でURLに埋め込めば、.torrentファイルを配布・保存せずにスウォームへ参加できます。
ピース選択:レアレストファーストの知恵
- ランダムファーストピース: 参加直後はまず何か1ピースを素早く手に入れ、交換の元手を作る。統計的にレア度の判断材料がまだ乏しいため、この段階だけはランダムに選ぶ。
- レアレストファースト: 以後はスウォーム内で最も保有者が少ないピースを優先。これにより特定ピースの絶滅(シーダー離脱でファイルが永遠に完成しなくなる事態)を防ぎ、ピースの分布が均等化されて交換機会が最大化される。
- エンドゲームモード: 残りわずかになったら、最後のピースを複数ピアへ並行要求して「最後の1ピースを遅いピアに握られる」停滞を防ぐ。取得済みの重複分は
Cancelメッセージで打ち切り、帯域の無駄を最小化する。
なお、大量のダウンローダーへ配信を開始する初回シーダー(オリジナルアップローダー)は、あえてピースをランダムでなく計画的な順序で配り分けるスーパーシーディングという手法を使うことがあります。1本のシーダーしか存在しない立ち上げ期に、各ピースを1コピーだけ先にばらまいてピア同士の交換を促すことで、シーダー自身のアップロード帯域を節約しながらスウォーム全体の完成を早める効果があります。
チョーキング:帯域という通貨の配り方
各ピアは同時にアップロードする相手を数本(典型4本)に絞り、それ以外をチョーク(絞る)します。どの相手をアンチョークするかの基準は「直近に自分へ最も速くアップロードしてくれた相手」であり、これがtit-for-tatの実装です。通常は10秒程度の周期でアップロード速度を再評価し、上位の相手を維持したまま入れ替えます。さらに30秒ごとに1枠をランダムな相手に開放する楽観的アンチョークがあり、新参ピアにも最初のチャンスが与えられます。この2つの組み合わせが、中央の調停者なしに「貢献するほど得をする」市場を作り出しています。
- アンチスナビング: 一定時間(目安60秒)誰からもアンチョークされない状態が続くと、そのピアは「見捨てられた」と判断し、アップロード中の相手数を絞って新しい相手探しを優先するなど、行き詰まりを自己検出する仕組みも備わっています。
- シーダーの場合: ダウンロードするものがないシーダーは「アップロード速度が最も速い相手」ではなく「最近アンチョークしてあげていない相手」を優先する方式に切り替え、公平性を保ちます。
トラッカーとDHT/PEX:ピア発見の三重化
BitTorrentのピア発見は単一の仕組みに依存しません。中央集権的なトラッカー(HTTP/UDPでスウォームの参加者リストを配布するサーバー)、サーバーレスなDHT(BEP 5、Mainline DHT)、そして既存の接続を経由してピア同士が知り合いを教え合うPEX(Peer Exchange、BEP 11)の3系統を組み合わせることで、トラッカーが落ちてもDHT/PEXだけでスウォームが機能し続ける耐障害性を実現しています。
| 方式 | 仕組み | 長所 | 短所 |
|---|---|---|---|
| トラッカー | 中央サーバーへHTTP/UDPでannounceし参加者リストを取得 | 実装が単純、統計収集や規約管理がしやすい | 単一障害点になりうる、運営コストがかかる |
| DHT (BEP 5) | Kademlia系DHTでinfoハッシュをキーにピア情報を検索 | トラッカー不要、検閲耐性が高い | クエリが観測可能、初回ピア発見がやや遅い場合がある |
| PEX (BEP 11) | 既に接続済みのピア同士がピアリストを定期交換 | トラッカー・DHT双方を補完し発見を高速化 | 既存の接続がゼロの状態では機能しない |
uTPと輻輳制御
輻輳制御を改善したuTP(LEDBAT、Low Extra Delay Background Transport)はバックグラウンド転送が前景通信を圧迫しないよう設計されています。従来のTCPはパケットロスを輻輳の兆候として検知しますが、uTPは片道遅延(one-way delay)の増加を早期の輻輳シグナルとして使うのが特徴です。同じ回線上の他のTCP通信(Webブラウジングなど)よりも先に送信レートを絞り込むことで、「BitTorrentのせいで家中のネットが遅くなる」問題を緩和します。トランスポートはUDP上に実装され、順序保証や再送はuTP自身が担います。
BitTorrent v2(BEP 52)の変更点
2020年に標準化されたBitTorrent v2は、ハッシュ方式とファイル構造にいくつかの重要な変更を加えました。
- ハッシュ関数の刷新: v1のSHA-1(衝突攻撃が実証済み)に代えてSHA-256を採用し、暗号学的な安全性を高めました。
- ファイル単位のMerkleツリー: v1は全ピースのハッシュを単純に連結したリストでしたが、v2はファイルごとに独立したMerkleツリー(ピースレイヤー)を構成します。これにより同じファイルが複数のtorrentに含まれる場合の重複検出・重複排除がしやすくなりました。
- 部分検証の効率化: Merkleツリーの性質上、ファイルの一部分だけを効率よく検証できるようになり、破損検出後の再取得コストが下がりました。
- ハイブリッドtorrent: v1とv2の両方のinfoハッシュを含む「ハイブリッドtorrent」を作ることで、新旧クライアント双方から同じスウォームに参加できる互換性が確保されています。
正当な利用例:「違法ファイル共有」だけではない
BitTorrentは著作権侵害コンテンツの流通経路として語られがちですが、プロトコル自体は用途を選ばない汎用の分散配信技術であり、正当な大容量データ配布に広く使われています。
| 分野 | 代表例 | 採用理由 |
|---|---|---|
| Linuxディストリビューション配布 | Ubuntu・DebianなどのインストールISOイメージ | 公式ミラーサーバーの帯域コストを利用者間の相互アップロードで肩代わりできる |
| ゲーム/ソフトウェア配信 | 大型パッチやアップデートファイルの配布 | リリース直後のアクセス集中でも、ダウンロードするユーザー自身が配信力になるため輻輳しにくい |
| 学術・アーカイブ | Internet Archiveなどが公開する大容量データセット | 恒久的な再配布経路を、単一の運営主体に依存せず維持できる |
| 社内インフラ | 大規模データセンター内でのソフトウェア配布 | 中央サーバーへの同時アクセス集中を避け、水平方向にスケールする配布を実現 |
いずれの例にも共通するのは、「需要が集中するほど配信力も増す」というBitTorrentの自己スケーリング性です。合法・違法という利用目的とプロトコルの技術的な優劣は本来別の話であり、攻撃と防御で扱うような悪用への対策と、正当な用途での活用は両立します。P2Pファイル配布の研究系譜は参考文献も参照してください。