rustorrent — Rust製の最小限BitTorrentクライアント

Tool

概要

rustorrentは「最小限」を志向したBitTorrentクライアントで、機能性とバイナリサイズの両立を目指しています。単一バイナリで約840KB、依存は3つに抑えられており、学習用や組み込み用途、軽量クライアントが求められる場面に向きます。プロトコル面では、SHA-1によるピース検証を含む完全なダウンロード/アップロード処理、マグネットリンクのメタデータ取得(ピアとDHT経由)、HTTPおよびUDPトラッカー(BEP 15)への対応、さらにBEP 5準拠のDHT実装(K-bucketによるルーティング、ノードの永続化など)といった主要機能を備えています。macOSとLinuxで動作し、Windowsはビルド可能だがNAT-PMPのゲートウェイ検出は未実装です。

GitHub

リポジトリの統計情報

  • スター数: 4
  • フォーク数: 0
  • ウォッチャー数: 4
  • コミット数: 5
  • ファイル数: 9
  • メインの言語: Rust

主な特徴

  • BitTorrentプロトコルのフル実装(ダウンロード/アップロード、SHA-1ピース検証)
  • マグネットリンクのメタデータ取得(ピアとDHT両対応)
  • トラッカー対応:HTTPおよびUDP(BEP 15)
  • DHT実装:BEP 5 準拠、K-bucketルーティング、ノードの永続化

技術的なポイント

rustorrentの注目点は「機能を削がずに極小化した実装」にあります。BitTorrentの基本要素(ハンドシェイク、ピア管理、ピース要求/供給、SHA-1によるピース検証)はきちんと実装されており、これらをRustの静的型付けと所有権モデルで安全に表現することで、バグやメモリ破損のリスクを低減しています。特にピース検証はプロトコルの整合性に直結するため、ネットワークから受信したデータをSHA-1で検証し、不一致時に再取得する流れが組み込まれています。

マグネットリンクはメタデータ(.torrentの情報)を直接含まないため、ネットワークを介した取得が必要です。rustorrentはDHTとピア両方を利用してinfohashに対応するメタデータを取得する設計で、これによりトラッカーに依存せずにハッシュからコンテンツを探せます。DHT実装はBEP 5に準拠し、K-bucketベースのルーティングテーブルを用いるため、ノード探索(find_node/find_value)やストアの操作が可能です。READMEの記述によれば「ノード永続化(node persistence)」を行っているため、ノード情報をローカルに保存しておき、再起動後もDHTネットワークへの繋がりを早く回復できます。

トラッカー周りはHTTP/UDP両対応(BEP 15)となっており、UDPトラッカーの軽量性を活かしつつ互換性を確保しています。ネットワークのNATやポートフォワーディングについては注意が必要で、macOS/Linuxでは一般的な動作を確認できる一方、WindowsではNAT-PMPのゲートウェイ検出が未実装のため、フル機能を期待する場合は制限があります。軽量化の工夫としては依存関係を最小に抑え、バイナリサイズを約840KBに収めている点が挙げられます。これは学習目的や組み込み環境、コンテナイメージの軽量化など用途を広げる利点になります。

設計上のトレードオフとして、極小化のために高機能なUIや詳細な設定、広範なプラットフォーム互換性は割愛されている可能性があります。しかしプロトコル実装のコア部分にフォーカスしているため、プロトコルの学習、テスト、カスタムクライアントのベースとしては非常に有用です。拡張ポイントとしては、WindowsでのNAT対応強化や、プラグイン的に転送制御・帯域制御を追加すること、より多くのトラッカー拡張(BEP)に対応することなどが考えられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • Cargo.lock: file
  • Cargo.toml: file
  • README.md: file
  • docs: dir

…他 4 ファイル

まとめ

プロトコル重視で極小化された学習・組み込み向けの良質なRust製BitTorrentクライアント。

リポジトリ情報:

READMEの抜粋:

rustorrent

A minimal BitTorrent client implemented in Rust. Single binary, ~840KB, three dependencies.

Works on macOS and Linux. Windows support is partial (builds, but NAT-PMP gateway detection is not implemented).

Features

  • BitTorrent protocol — full download and upload with SHA-1 piece verification
  • Magnet links — metadata fetching via peers and DHT
  • Trackers — HTTP and UDP (BEP 15)
  • DHT — Distributed Hash Table (BEP 5) with K-bucket routing and node persi…