rustorrent — Rust製の最小限BitTorrentクライアント
概要
rustorrentは「最小限」を志向したBitTorrentクライアントで、機能性とバイナリサイズの両立を目指しています。単一バイナリで約840KB、依存は3つに抑えられており、学習用や組み込み用途、軽量クライアントが求められる場面に向きます。プロトコル面では、SHA-1によるピース検証を含む完全なダウンロード/アップロード処理、マグネットリンクのメタデータ取得(ピアとDHT経由)、HTTPおよびUDPトラッカー(BEP 15)への対応、さらにBEP 5準拠のDHT実装(K-bucketによるルーティング、ノードの永続化など)といった主要機能を備えています。macOSとLinuxで動作し、Windowsはビルド可能だがNAT-PMPのゲートウェイ検出は未実装です。
リポジトリの統計情報
- スター数: 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クライアント。
リポジトリ情報:
- 名前: rustorrent
- 説明: A minimal BitTorrent client implemented in Rust. Single binary under 1MB
- スター数: 4
- 言語: Rust
- URL: https://github.com/josusanmartin/rustorrent
- オーナー: josusanmartin
- アバター: https://avatars.githubusercontent.com/u/5554649?v=4
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…