// Engineering Log

Протоколы передачи файлов: Часть 8 — BitTorrent

Опубликовано 22.09.2026

BitTorrent — протокол пиринговой передачи файлов, созданный Брэмом Коэном в 2001 году. В отличие от HTTP или FTP, где все скачивают файл с одного сервера, в BitTorrent каждый участник одновременно скачивает и раздаёт части файла другим. Чем больше людей получают файл, тем быстрее он распространяется, а нагрузка на исходный сервер почти не растёт.

Как устроена раздача

Файл (или набор файлов) делится на части — куски (pieces) фиксированного размера. Для каждого куска вычисляется хеш, и эти хеши вместе со списком файлов записываются в метаданные раздачи — .torrent-файл. Участник, получив кусок, проверяет его по хешу и сразу начинает раздавать другим. Повреждённые или подменённые данные отбрасываются автоматически.

Участников называют пирами. Тот, у кого файл есть целиком, — сид (seed). Раздачу начинает хотя бы один сид, дальше данные расходятся между пирами.

Как пиры находят друг друга

  • Трекер — сервер, который хранит список участников раздачи и выдаёт его клиентам. Сами файлы через трекер не проходят.
  • DHT — распределённая хеш-таблица, где список участников хранят сами клиенты. Раздача продолжает работать, даже если трекер недоступен.
  • PEX (обмен пирами) — клиенты сообщают друг другу адреса других участников.
  • Локальное обнаружение — клиенты в одной локальной сети находят друг друга без интернета, что удобно для раздачи внутри офиса.

Magnet-ссылки

Вместо .torrent-файла можно передать magnet-ссылку: она содержит хеш метаданных раздачи (info hash). Клиент находит пиров через DHT или трекер, получает от них метаданные, проверяет их по хешу и начинает загрузку. Это удобно, когда раздачу нужно опубликовать одной строкой.

BitTorrent v2

Спецификация BEP 52 описывает вторую версию протокола. Главные изменения:

  • SHA-256 вместо SHA-1 — устаревшая хеш-функция SHA-1 заменена надёжной;
  • дерево хешей для каждого файла — каждый файл описывается своим деревом Меркла из блоков по 16 КиБ, поэтому одинаковые файлы в разных раздачах распознаются и можно проверять отдельные блоки;
  • гибридные раздачи — .torrent-файл может одновременно содержать описание в формате v1 и v2, чтобы раздачу понимали и старые, и новые клиенты.

Полный хеш v2 занимает 32 байта; для совместимости с трекерами используется его укороченная до 20 байт версия. Загрузку раздач v2 и гибридных поддерживают современные клиенты — например, Transmission начиная с версии 4.0, — но многие раздачи по-прежнему создаются в формате v1 или гибридном.

Где протокол полезен в работе

  • Образы операционных систем. Многие дистрибутивы Linux публикуют официальные торренты рядом с прямыми ссылками: это разгружает зеркала и ускоряет загрузку.
  • Раздача обновлений и больших файлов внутри компании. Когда один и тот же многогигабайтный образ или архив нужен на десятках машин, BitTorrent с локальным обнаружением распределяет нагрузку между ними вместо одного файлового сервера.
  • Архивы и наборы данных. Научные и общественные проекты распространяют через BitTorrent большие наборы данных, которые дорого раздавать с одного сервера.
  • Загрузка в условиях нестабильной связи. Каждый кусок проверяется отдельно, поэтому обрывы не приводят к повреждению файла, а загрузка продолжается с любого места.

Безопасность и ограничения

  • Сам протокол не шифрует данные. Клиенты поддерживают шифрование потока (MSE/PE), но оно скрывает трафик от простых фильтров, а не делает обмен анонимным: адреса участников видны друг другу и трекеру.
  • Проверка по хешам гарантирует, что данные совпадают с метаданными, но не то, что метаданные взяты из надёжного источника. Берите .torrent-файлы и magnet-ссылки только с официальных сайтов проектов.
  • Во многих корпоративных сетях пиринговый трафик блокируется политиками безопасности. Использование BitTorrent внутри компании стоит согласовать и ограничить внутренней сетью.
  • Распространение материалов, защищённых авторским правом, без разрешения правообладателя незаконно — протокол здесь ни при чём, но ответственность несёт тот, кто раздаёт.

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ