BitTorrent
BitTorrent — P2P-протокол для распределённой раздачи файлов. Изобретён Брэмом Коэном в 2001. Ключевая идея: файл разбит на куски (chunks), каждый peer одновременно и качает недостающие куски, и раздаёт уже имеющиеся. Чем больше нагрузка на «раздачу», тем быстрее качается всем — обратная зависимость от классических серверов.
Основные термины
| Термин | Что значит |
|---|---|
| Torrent-файл | Мета-файл (.torrent) с метаданными: имена файлов, хеши кусков, tracker URL. |
| Info-hash | SHA-1 хеш метаданных. Уникальный ID торрента. |
| Magnet-ссылка | magnet:?xt=urn:btih:HASH — вместо файла. Метаданные загружаются из DHT. |
| Peer | Любой узел в рое (seeder или leecher). |
| Seeder | Уже имеет 100% файла, только раздаёт. |
| Leecher | Ещё качает (и параллельно раздаёт уже скачанные куски). |
| Swarm (рой) | Все peers, участвующие в одной раздаче. |
| Piece | Кусок файла, обычно 256 КБ – 4 МБ. Проверяется по SHA-1. |
| Tracker | Централизованный сервер, знает список peers данного роя. Не хранит файлы. |
| Ratio | Отношение отдано/скачано. На приватных трекерах требуется > 1. |
Как работает
- Взял .torrent или magnet-ссылку.
- Клиент идёт на tracker (для .torrent) или в DHT (для magnet) и получает список peers для этого info-hash.
- Соединяется с этими peers по TCP или uTP (UDP-based).
- Обменивается bitfields — «у меня есть эти куски, у тебя эти».
- Использует стратегии rarest first (сначала редкие куски) и tit-for-tat (кому отдаёшь — те быстрее отдают тебе).
- После скачивания и проверки SHA-1 куска — начинает раздавать его.
- Когда 100% — становится seeder-ом.
Peer discovery — как находят друг друга
- Tracker (HTTP/UDP) — классика. Клиент шлёт GET на tracker с info-hash, получает peer-list.
- DHT (Mainline) — распределённая хеш-таблица (Kademlia). Работает без tracker.
- PEX (Peer Exchange) — существующие peers обмениваются между собой списками других peers.
- LSD (Local Service Discovery) — multicast в LAN.
Magnet-ссылки
magnet:?xt=urn:btih:abcdef0123456789...&dn=Ubuntu.iso&tr=udp://tracker.example.com:1337
xt— exact topic, info-hash.dn— display name (человеко-читаемое имя).tr— tracker URL (можно много).- Метаданные (список файлов, хеши) загружаются из DHT через extension protocol.
Расширения протокола (BEP)
| BEP | Что даёт |
|---|---|
| BEP 5 | DHT (Kademlia) |
| BEP 6 | Fast Extension |
| BEP 9 | Metadata (для magnet-ссылок) |
| BEP 10 | Extension Protocol (base для остальных) |
| BEP 11 | PEX |
| BEP 15 | UDP Tracker |
| BEP 19 | WebSeed (HTTP-раздача) |
| BEP 29 | uTP (Micro Transport Protocol) — congestion-friendly UDP |
| BEP 52 | BitTorrent v2 — SHA-256 вместо SHA-1, per-file hashing (Merkle tree) |
Клиенты
- qBittorrent — открытый, лидер. Есть web-UI (headless).
- Transmission — простой, для NAS/серверов.
- Deluge — плагиновая архитектура.
- Vuze, rTorrent, libtorrent (библиотека).
- μTorrent, BitComet — популярные, но с рекламой.
- Web-Torrent — прямо в браузере через WebRTC.
Тонкости
- Публичный vs приватный трекер. Публичные (rutracker, TPB, 1337x) — открытые. Приватные (What.CD-наследники, HDBits, PT-сцена) — с приглашениями, требуют ratio.
- Порт-форвардинг нужен для нормальной работы. Иначе только исходящие соединения = меньше peers.
- VPN. В юрисдикциях с активным преследованием (Германия, Франция, США) — обязательно.
- WebTorrent расширяет протокол до WebRTC — работает в браузере, но peers из разных «миров» не видят друг друга.