«БітТо́рент» (BitTorrent) — відкритий протокол обміну інформацією у мережах типу peer-to-peer. Автором проєкту є Брем Коен, який створив першу версію у квітні 2001 разом із першим клієнтом з тією ж назвою.
Протокол розробляли таким чином, аби обмін файлами великих розмірів у мережі був полегшений для її учасників. Один із принципів роботи протоколу BitTorrent такий: навантаження на учасника, який розповсюджує певний файл, зменшується завдяки тому, що клієнти, які його скачують, починають обмінюватися даними між собою одразу, навіть поки файл повністю не скачано. Таким чином, клієнти, які скачали певну частину великого файлу, одразу можуть бути джерелами його розповсюдження.
Така ідея організації протоколу має переваги порівняно з протоколами peer-to-peer-мереж першого покоління, де файл скачується з одного розповсюджувача чи з декількох розповсюджувачів частинами.
Для отримання інформації про розповсюджувачів певного файлу клієнт може звернутися до так званих трекерів.
Трекер (англ. tracker) — спеціалізований сервер, який працює по протоколу HTTP. Трекер використовується для того, щоб клієнти могли знайти один одного. На трекері зберігаються IP-адреси клієнтів, вхідні порти клієнтів та хеш-суми, які унікальним чином ідентифікують об'єкти, що беруть участь у скачуваннях. За стандартом, імена файлів на трекері не зберігаються, та дізнатися їх за хеш-сумами не можна. Проте на практиці часто трекер, окрім своєї основної функції, виконує також функцію невеличкого вебсерверу. Такий сервер зберігає файли метаданих, що містять значення хеш-функції, та разом з ними опис файлів, які розповсюджуються, кількість розповсюджувачів, статистику завантажень тощо.
Перед початком завантаження файлу клієнт з'єднується з трекером, повідомляє йому свою IP-адресу та хеш-суму файла, що завантажується. У відповідь клієнт отримує адреси інших учасників мережі, які розповсюджують або закачують той самий файл. Далі клієнт періодично інформує трекер про хід процесу завантаження та отримує оновлений перелік адрес.
Клієнти з'єднуються один з одним та обмін даними відбувається без безпосередньої участі трекера. Учасники закачування обмінюються інформацією про наявність сегментів файлу. Клієнт, який бажає закачати певний фрагмент, надсилає запит, і, якщо інший клієнт готовий його надати, відбувається процес закачування. Після цього клієнт перевіряє контрольну суму сегменту та сповіщає всіх приєднаних учасників закачування про його наявність.
Для ефективної роботи мережі BitTorrent необхідно, щоб якомога більше клієнтів були здатні приймати вхідні з'єднання. Неправильна настройка NAT чи файрволу можуть цьому заважати.
Кожен клієнт має можливість тимчасово блокувати віддачу іншому клієнтові (англ. choke). Це робиться для ефективнішого використання каналу віддачі. Крім того, при виборі — кого розблокувати, перевага віддається пірам, які самі передали цьому клієнтові багато сегментів. Таким чином, піри з хорошими швидкостями віддачі заохочують один одного за принципом «ти — мені, я — тобі».
Обмін сегментами ведеться за принципом «ти — мені, я — тобі» симетрично в двох напрямках. Клієнти повідомляють один одному про наявні у них сегменти при підключенні та потім при отриманні нових сегментів, і тому кожен клієнт може зберігати інформацію про те, які сегменти є у інших підключених пірів. Порядок обміну обирається таким чином, щоб спочатку клієнти обмінювалися найрідкіснішими сегментами: таким чином підвищується доступність файлів в роздачі. Водночас вибір сегмента серед найрідкісніших випадковий, і тому можна уникнути ситуації, коли всі клієнти починають завантажувати один і той же самий рідкісний сегмент, що мало б негативний вплив на продуктивність.
Обмін даними починається, коли обидві сторони в ньому зацікавлені, тобто, кожна зі сторін має сегменти, яких немає в іншої. Кількість переданих сегментів підраховується, і якщо одна із сторін виявляє, що передає в середньому більше, ніж приймає, вона блокує (англ. choke) на деякий час віддачу іншій стороні. Таким чином, в протокол закладено захист від лічерів.
Сегменти діляться на блоки розміром 16—4096 кілобайт, і кожен клієнт запитує саме ці блоки. Одночасно можуть запитуватися блоки з різних сегментів. Більш того, деякі клієнти підтримують скачування блоків одного сегмента у різних пірів. У цьому випадку описані вище алгоритми і механізми обміну застосовуються і до рівня блоків.
Коли скачування майже завершено, клієнт входить в особливий режим, так званий end game. У цьому режимі він запитує всі сегменти, що залишилися у всіх підключених пірів, що дозволяє уникнути уповільнення або повного «Зависання» майже завершеного закачування через кілька повільних клієнтів.
Специфікація протоколу не визначає, коли саме клієнт повинен увійти в режим «end game», однак існує набір загальноприйнятих практик. Деякі клієнти входять в цей режим, коли не залишилося незапитаних блоків, інші — поки кількість блоків, що залишилися, менше кількості тих що передаються і не більше 20. Існує думка, що краще підтримувати кількість очікуваних блоків низьким (1 або 2) для мінімізації надлишковості, і що при випадковому запиту менший шанс отримати дублікати одного і того ж блоку.
При отриманні повного файлу клієнт переходить в спеціальний режим роботи, в якому він тільки віддає дані (стає сідом). Далі сід періодично інформує трекер про зміни в стані закачувань і оновлює списки IP-адрес.
Для кожного файлу, що розповсюджується, створюється файл метаданих з розширенням .torrent, який містить наступну інформацію: URL трекеру, загальну інформацію про файл (ім'я, розмір та ін.), контрольні суми сегментів файлу.
Файли метаданих можуть розповсюджуватися через будь-які канали зв'язку: вони, чи посилання на них, можуть розміщатися на вебсерверах, пересилатися електронною поштою, публікуватися у блогах та ін. Клієнт може розпочинати завантаження, отримавши будь-яким чином файл з метаданими, у якому є посилання на трекер.
У нових версіях протоколу розроблено безтрекерні (англ. trackerless) механізми обміну інформацією. Таким чином працездатність всієї мережі не залежатиме від роботи трекера.
Починаючи з версії 4.2.0 офіційного BitTorrent-клієнта, в ньому реалізована функція безтрекерної роботи, яка базується на протоколі Kademlia. У таких системах трекер доступний децентралізовано, на клієнтах-учасниках мережі, у формі розподіленої хеш-таблиці (Distributed hash-table, DHT).
У цей час не всі BitTorrent-клієнти використовують сумісні протоколи. Між собою сумісні BitComet, µTorrent, KTorrent та офіційний клієнт BitTorrent. Azureus також має режим безтрекерної роботи, але його реалізація відрізняється від офіційної, через що він не може працювати через DHT з наведеними вище клієнтами.
|
|