BitTorrent

BitTorrent — P2P-протокол для распределённой раздачи файлов. Изобретён Брэмом Коэном в 2001. Ключевая идея: файл разбит на куски (chunks), каждый peer одновременно и качает недостающие куски, и раздаёт уже имеющиеся. Чем больше нагрузка на «раздачу», тем быстрее качается всем — обратная зависимость от классических серверов.

Основные термины

ТерминЧто значит
Torrent-файлМета-файл (.torrent) с метаданными: имена файлов, хеши кусков, tracker URL.
Info-hashSHA-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.

Как работает

  1. Взял .torrent или magnet-ссылку.
  2. Клиент идёт на tracker (для .torrent) или в DHT (для magnet) и получает список peers для этого info-hash.
  3. Соединяется с этими peers по TCP или uTP (UDP-based).
  4. Обменивается bitfields — «у меня есть эти куски, у тебя эти».
  5. Использует стратегии rarest first (сначала редкие куски) и tit-for-tat (кому отдаёшь — те быстрее отдают тебе).
  6. После скачивания и проверки SHA-1 куска — начинает раздавать его.
  7. Когда 100% — становится seeder-ом.

Peer discovery — как находят друг друга

Magnet-ссылки

magnet:?xt=urn:btih:abcdef0123456789...&dn=Ubuntu.iso&tr=udp://tracker.example.com:1337

Расширения протокола (BEP)

BEPЧто даёт
BEP 5DHT (Kademlia)
BEP 6Fast Extension
BEP 9Metadata (для magnet-ссылок)
BEP 10Extension Protocol (base для остальных)
BEP 11PEX
BEP 15UDP Tracker
BEP 19WebSeed (HTTP-раздача)
BEP 29uTP (Micro Transport Protocol) — congestion-friendly UDP
BEP 52BitTorrent v2 — SHA-256 вместо SHA-1, per-file hashing (Merkle tree)

Клиенты

Тонкости

См. также