// 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)
Или оставьте заявку здесь:
// Related