BitTorrent – это одноранговый сетевой протокол для кооперативного обмена файлами через интернет. Файлы передаются сегментами: каждый участник одновременно получает сегменты файлов и раздаёт их другим клиентам. По сравнению с обычной закачкой файла с сервера, это уменьшает зависимость клиентов от стабильности работы сервера.
Далее, чтобы не путаться, файл, который нужно скачать, мы будем называть просто “файл”, а служебный файл протокола – “torrent-файл”. Того, кто хочет скачать, будем называть “клиент”, а участников сети – “пиры”.
Общая схема скачивания через torrent
- Формируется torrent-файл с информацией о скачиваемом файле
- Клиент скачивает torrent-файл и подключается к трекеру
- Трекер сообщает клиенту список пиров, у которых можно скачать сегменты файла
- Клиент подключается к пирам напрямую и включается в обмен данными
Torrent-файл
Torrent-файл – это специально сформированный файл протокола BitTorrent. В нём содержится информация, необходимая для скачивания файла. Torrent-файл содержит только служебную информацию о том, как можно скачать файл и не содержит данных самого файла.
Поля torrent-файла:
Поле | Описание |
---|---|
Адрес трекера | По какому адресу обращаться к трекеру |
Информация о файле | Название, длина файла и т. п. |
Размер сегмента | Длина одного сегмента в байтах |
Хеши сегментов | SHA-1 хеши каждого сегмента. Нужны для проверки целостности файла |
Torrent-трекер
Трекер нужен, чтобы клиент мог узнать адреса пиров, у которых можно скачать файл. Клиент обращается к трекеру, передавая уникальный идентификатор файла. В ответ трекер сообщает список известных ему пиров. Трекер служит только для соединения пиров, скачивания файла происходит напрямую между пирами, без участия трекера.
Обмен данными между пирами
Клиент подключается к пирам напрямую. После процедуры рукопожатия начинается скачивание файла: клиент скачивает очередной сегмент и проверяет его хеш. После того как клиент успешно загрузил и проверил сегмент, он сообщает об этом остальным пирам и начинает раздавать этот сегмент.
Улучшения протокола
Можно заметить, что трекер является слабым местом в протоколе. Если трекер не работает, то пиры не смогут найти друг друга и начать обмен данными. Есть несколько механизмов, облегчающих поиск пиров:
PEX – пиры сообщают друг другу адреса других пиров, с которыми они обмениваются данными. Это не может помочь подключиться к раздаче новым пирам, но укрепляет связи между уже участвующими
DHT – каждый пир хранит таблицу маршрутизации ближайших (не в географическом смысле, а по внутренней логике сети) пиров. При поиске файла клиент итеративно запрашивает таблицы маршрутизации, пока не найдёт того, у кого есть нужные сегменты файла