Як це працює? | BitTorrent

BitTorrent — це мережевий протокол для обміну файлами через Інтернет. Він був створений американським програмістом Бремом Коеном, який написав перший torrent-клієнт «BitTorrent» на мові Python у квітні 2001 року. Файли з такого протоколу передаються частинами, а кожен torrent-клієнт, отримуючи ці частини, в той же час віддає їх іншим клієнтам. Як же працює протокол BitTorrent — про це у сьогоднішньому випуску!

Принцип роботи протоколу полягає в тому, що навантаження на розповсюджувача файлу зменшується завдяки скачивающим клієнтам. Вони починають обмінюватися даними відразу ж, навіть якщо файл не докачан ними до кінця.

Для роботи BitTorrent, як правило, необхідний трекер — спеціалізований сервер, що працює по протоколу HTTP. Він потрібен, щоб клієнти, іменовані бенкетами, могли знайти один одного. Перед початком скачування клієнт під’єднується до трекера по вказаному в торрент-файлі адресою, повідомляє йому свою адресу та ідентифікатор файлу, який потрібно завантажити (він іменується хеш-сумою). У відповідь клієнт отримує адреси інших клієнтів, завантажують або роздають файл. Згодом клієнт періодично інформує трекер про хід процесу і отримує оновлені списки адрес. Бенкети з’єднуються один з одним і обмінюються сегментами файлів без безпосередньої участі трекера. Він лише зберігає інформацію, одержувану від клієнтів. Існують також і бестрекерные системи, в яких трекер доступний децентралізовано — на клієнтів у формі розподіленої хеш-таблиці.

При з’єднанні клієнти відразу обмінюються інформацією про наявні у них сегментах. Обмін даними починається, коли кожна із сторін має сегменти, яких немає у іншої. Бенкет, який бажаючий скачати сегмент, іменований також личем, посилає запит, і отримує його від відповідного клієнта. Після цього він перевіряє контрольну суму сегмента. Якщо вона збіглася з тієї, що записана в торрент-файлі, сегмент вважається успішно скачаним, і клієнт повідомляє всіх про наявність у нього цього сегмента. Якщо ж контрольні суми розрізняються, то сегмент завантажується заново.

Кількість переданих сегментів підраховується, і якщо одна із сторін виявляє, що передає в середньому більше, ніж приймає, вона блокує на деякий час віддачу іншій стороні. Це робиться для більш ефективного використання каналу віддачі. При виборі кого розблокувати, перевага надається клієнтам, які передали багато сегментів.

Порядок обміну вибирається таким чином, щоб спочатку клієнти обмінювалися найбільш рідкісними сегментами: таким чином підвищується доступність файлів на роздачі. Самі сегменти поділяються на блоки розміром від 16 до 4000 кілобайт. Одночасно можуть запитуватися блоки з різних сегментів.

Коли скачування майже завершено, клієнт входить в режим, іменований end game. Він запитує всі сегменти у всіх роздають клієнтів, що дозволяє уникнути уповільнення майже завершеною закачування.

При отриманні повного файлу клієнт стає сідом, тобто переходить у спеціальний режим роботи, в якому він тільки віддає дані. Далі сід періодично інформує трекер про зміни в стані торентів і оновлює списки IP-адрес.