BitTorrent – это одноранговый сетевой протокол для кооперативного обмена файлами через интернет. Файлы передаются сегментами: каждый участник одновременно получает сегменты файлов и раздаёт их другим клиентам. По сравнению с обычной закачкой файла с сервера, это уменьшает зависимость клиентов от стабильности работы сервера.

image

Далее, чтобы не путаться, файл, который нужно скачать, мы будем называть просто “файл”, а служебный файл протокола – “torrent-файл”. Того, кто хочет скачать, будем называть “клиент”, а участников сети – “пиры”.

Общая схема скачивания через torrent

  1. Формируется torrent-файл с информацией о скачиваемом файле
  2. Клиент скачивает torrent-файл и подключается к трекеру
  3. Трекер сообщает клиенту список пиров, у которых можно скачать сегменты файла
  4. Клиент подключается к пирам напрямую и включается в обмен данными

image

Torrent-файл

Torrent-файл – это специально сформированный файл протокола BitTorrent. В нём содержится информация, необходимая для скачивания файла. Torrent-файл содержит только служебную информацию о том, как можно скачать файл и не содержит данных самого файла.

Поля torrent-файла:

ПолеОписание
Адрес трекераПо какому адресу обращаться к трекеру
Информация о файлеНазвание, длина файла и т. п.
Размер сегментаДлина одного сегмента в байтах
Хеши сегментовSHA-1 хеши каждого сегмента. Нужны для проверки целостности файла

Torrent-трекер

Трекер нужен, чтобы клиент мог узнать адреса пиров, у которых можно скачать файл. Клиент обращается к трекеру, передавая уникальный идентификатор файла. В ответ трекер сообщает список известных ему пиров. Трекер служит только для соединения пиров, скачивания файла происходит напрямую между пирами, без участия трекера.

Обмен данными между пирами

Клиент подключается к пирам напрямую. После процедуры рукопожатия начинается скачивание файла: клиент скачивает очередной сегмент и проверяет его хеш. После того как клиент успешно загрузил и проверил сегмент, он сообщает об этом остальным пирам и начинает раздавать этот сегмент.

image
У каждого пира есть только часть картинки, но вместе они могут собрать её полностью

Улучшения протокола

Можно заметить, что трекер является слабым местом в протоколе. Если трекер не работает, то пиры не смогут найти друг друга и начать обмен данными. Есть несколько механизмов, облегчающих поиск пиров:

PEX – пиры сообщают друг другу адреса других пиров, с которыми они обмениваются данными. Это не может помочь подключиться к раздаче новым пирам, но укрепляет связи между уже участвующими
DHT – каждый пир хранит таблицу маршрутизации ближайших (не в географическом смысле, а по внутренней логике сети) пиров. При поиске файла клиент итеративно запрашивает таблицы маршрутизации, пока не найдёт того, у кого есть нужные сегменты файла

📢тг-канал