Що таке bittorrent (бітторрент)

Лічер і його рій.

загальні особливості

- Відсутність черг на закачування.
- Файли закачуються невеликими сегментами; чим менш доступний сегмент, тим частіше він передаватиметься. Таким чином, присутність в мережі «сідера» з повним файлом для завантаження необов'язково - система розподіляє сегменти між «бенкетами», щоб в подальшому вони могли обмінюватися відсутніми сегментами.
- Клієнти (peers) обмінюються сегментами безпосередньо між собою, за принципом «ти - мені, я - тобі».
- Закачані сегменти стають негайно доступні іншим клієнтам.
- Контролюється цілісність кожного сегмента.
- Як об'єкт закачування можуть виступати декілька файлів (наприклад, вміст каталогу).

Протоколи і порти

Клієнти з'єднуються з трекером по протоколу TCP.

Клієнти з'єднуються один з одним, використовуючи протокол TCP.

Номери портів не фіксовані в специфікації протоколу і можуть змінюватися при необхідності. Більш того, в даний момент більшість трекерів використовують звичайний HTTP порт 80, а для клієнтів рекомендується вибрати випадковий вхідний порт.

DHT-мережу в BitTorrent-клієнтах використовує протокол UDP.

Детальніше про DHT

DHT (Distributed hash table) - це протокол, що дозволяє бітторрент клієнтам знаходити один одного без використання трекера.

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

Підтримка DHT є в клієнтах Mainline. μTorrent. KTorrent. BitSpirit і BitComet. У Azureus є власна реалізація DHT, тобто Azureus клієнти утворюють свою власну окрему мережу DHT.

PEX (Peer exchange) - це розширення БТ протоколу для обміну списками учасників.

PEX реалізується як додаткові сполучення між клієнтами, вже з'єднаними між собою для обміну сегментами файлу за звичайним БТ протоколу.

На відміну від трекера і DHT, PEX може бути тільки допоміжним засобом отримання бенкетів, так як він не може допомогти підключитися до роздачі новим бенкетів.

PEX є в клієнтах Azureus. BitComet. μTorrent і BitTornado. причому в кожному клієнті він реалізований по-своєму, тому PEX між собою можуть користуватися тільки однакові клієнти. Починаючи з 3 версії Azureus (Vuze) може обмінюватися PEX з uTorrent і BitTorrent.

І DHT і PEX фактично виконують основну функцію трекера - допомагають учасникам файлообміну дізнатися один про одного. Вони можуть:

1. Допомогти учасникам швидше знайти один одного

Наприклад, на роздачі є пір X з недоступним портом. До роздачі підключається пір Z, який сам почати з'єднання до X не може, і змушений чекати, поки Х про нього дізнається сам. Х тільки що звертався до трекера, і наступного разу збирається це зробити через годину.

2. Знизити навантаження на трекер

3. Підтримати учасників разом в періоди недоступності трекера

PEX дозволяє декілька уповільнити процес розпаду рою учасників, а DHT дозволяє повністю замінити трекер, тобто навіть підключатися до роздачі новим учасникам.

4. DHT дозволяє роздавати взагалі без трекера

За участю в trackerless роздачах БТ клієнти набувають певну схожість з eMule, що використовує мережу KAD.

Механізм роботи DHT

Реалізація розподіленої мережі в БТ клієнтах заснована на варіанті DHT, званому Kademlia. А взагалі кажучи, DHT (Distributed hash table) означає децентралізовану розподілену систему для об'єднання великої кількості постійно зникаючих вузлів і ефективної передачі повідомлень між ними. На основі DHT структур будують різні складніші системи, такі як P2P файлообмін, кооперативне веб кешування, DNS сервіси і т. П.

DHT використовує UDP протокол. БТ клієнти слухають той же UDP номер порту, який вони використовують для вхідних з'єднань TCP. Якщо ви активно використовуєте DHT, то відкриття цього UDP порту для доступу зовні бажано, але не обов'язково - DHT буде працювати і так.

Кожен підключений БТ клієнт є в DHT мережі окремим вузлом. У нього є свій унікальний ID (ідентифікатор), випадково обираний з того ж 160-бітного простору, що і infohash'и торрентів.

Private key

На публічних (відкритих) трекерах, де кожен бажаючий може скачати торрент і брати участь в роздачі, DHT і PEX служать на благо всіх учасників.

Тоді розробники клієнтів запропонували новий ключ всередині торрент файлу: private. Якщо він дорівнює 1, то клієнт зобов'язаний для цього торрента автоматично відключати DHT / PEX незалежно від бажання користувача. Такий торрент називають Secure Torrent.

Практично всі сучасні приватні трекери самі примусово вставляють private: 1 в усі торренти, що викладаються на трекері, а також забороняють кілька застарілих версій клієнтів, що підтримують DHT або PEX, але ще не знають про private key. Користувачі трекера просто не можуть на роздачах використовувати DHT / PEX, і проблеми немає.

Відзначимо, що присутність private key змінює infohash торрента, тому вирізати його з торрент файлу марно - інші клієнти змінений торрент все одно не визнають.

  • Всі ваші торренти - з приватних трекерів.

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

  • Ви завантажуєте роздачу з публічного трекера

- Якщо трекер повертає вам багато пірів і їх вистачає для досягнення гарної швидкості скачування, то DHT / PEX вам ймовірно не потрібно. Якщо немає, то варто спробувати їх включити (і в клієнті і у властивостях роздачі), це може допомогти знайти більше джерел.

  • Ви завантажуєте роздачу з приватного трекера без примусового private key


Взагалі кажучи, така ситуація не може бути визнана нормальною, особливо на трекерах з системою passkey. Справа в тому, що в клієнтах BitComet і Azureus через DHT користувачі можуть дізнатися passkey інших користувачів, і нечесні користувачі можуть використовувати чужі passkey для скачування під чужим обліковим записом. Тому принаймні в цих клієнтів на таких трекерах рекомендується DHT вимкнути.

DHT і статистика

Цей розділ стосується лише приватних трекерів, на яких private key в торренти примусово вставляєте, і на деяких роздачах (в залежності від того, вставив чи роздає сам в торрент private key) можна використовувати DHT і PEX.

Часто зустрічається думка, що включений в клієнті DHT впливає на облік статистики клієнта трекером, наприклад «роздавав через DHT, значить статистика йшла повз трекера». Це не вірно.

Тобто «роздавав через DHT» фактично означає «про деякі (або про всіх) бенкетах отримав інформацію по DHT, і ймовірно деякі бенкети теж знайшли мене через DHT»

Клієнт рапортує трекеру сумарні дані про об'єми ним завантаженого і відданого всім бенкетів, з якими він спілкувався, незалежно від того, дізнався клієнт про окремі бенкетах через трекер, DHT або PEX, або той бенкет взагалі почав з'єднання сам. Тобто навіть якщо через DHT / PEX на роздачі з'являться «ліві» користувачі (що не звертаються до трекера), клієнт все одно повідомить на трекер все, що у них скачав і віддав.

Правильний облік статистики залежить тільки від стану трекера: працює трекер - статистика враховується, не працює - не враховується. Тільки в разі тривало непрацюючого трекера DHT / PEX може грати непряму роль, не даючи поступово згаснути файлообміну на такій «роздачі без врахування статистики».

Крім того, протокол UDP використовується UDP-трекера (не підтримує всіма клієнтами і не є офіційною частиною протоколу) і для з'єднання клієнтів один з одним через UDP NAT Traversal (використовується тільки в клієнті BitComet і не є офіційною частиною протоколу).

файл метаданих

Для кожного поширюваного файлу створюється файл метаданих з розширенням .torrent, який містить наступну інформацію:

  • URL трекера;
  • загальну інформацію про закачуваний файл (ім'я, довжину і ін.);
  • контрольні суми (точніше, хеш-суми SHA1) сегментів закачується файлу.

Файли метаданих можуть поширюватися через будь-які канали зв'язку - наприклад, вони (або посилання на них) можуть викладатися на веб-серверах, розміщуватися на домашніх сторінках користувачів мережі, розсилатися по електронній пошті, публікуватися в блогах або новинних стрічках RSS.

Детальніше про трекер

BitTorrent трекер

BitTorrent трекер - веб-сервер, який здійснює координацію BitTorrent клієнтів.
Координація клієнтів - основна функція BitTorrent трекера - обробка запитів клієнтів.
Кожен клієнт періодично звертається до трекера із запитом, в якому вказані:

  • info_hash - унікальний хеш торрент файлу
  • port - TCP порт, на якому клієнт чекає з'єднань від інших клієнтів
  • кількість даних, якими клієнт встиг обмінятися з іншими клієнтами
  • і деяка інша інформація.

Таке звернення є звичайним GET HTTP запит, в якому інформація закодована за допомогою спеціального протоколу Bencode.

Якщо в BitTorrent клієнта відкрито кілька активних торрент файлів, то для кожного використовується окремий запит, ніяк не пов'язаний з іншими. Інтервали між запитами по кожному окремо взятому торренту залежать від налаштувань клієнта і зазвичай складають від 30 до 60 хвилин.

роль трекера

Таким чином, трекер «зв'язує» клієнтів один з одним, але безпосередньо не бере участь в обміні даними файлів, що роздаються. Більш того, в принципі трекер може працювати, не маючи ніякої інформації про ці файли, оскільки клієнти повідомляють йому тільки info_hash.

Для вирішення цієї проблеми можуть використовуватися резервні трекери або спеціальний безтрекерний протокол DHT.

Додаткові функції

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

Часто трекери використовуються для зберігання торрент-файлів і їх описів.

Приватні трекери

Приватний (англ. Private) трекер - це трекер, що обмежує доступ користувачам, зазвичай вимогою реєстрації облікового запису.

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

Як правило, приватні трекери записують статистику кожного користувача за кількістю «завантаженого» і «відданого» іншим користувачам, і вимагають підтримки деякого мінімального відношення цих двох величин. Як результат, доступність і швидкість скачування торрентів на приватному трекері зазвичай вище, ніж на відкритому.

реалізації трекерів

Існують різні реалізації трекерів, наприклад як окремий веб-сервер, у вигляді модуля для стороннього HTTP сервера (наприклад Apache), або у вигляді движка сайту, написаного наприклад на PHP або JSP.

Робота без трекера

У нових версіях протоколу були розроблені бестрекерной (англ. Trackerless) системи, які вирішують деякі з попередніх проблем. Відмова трекера в таких системах не приводить до автоматичного припинення всієї мережі.

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

На даний момент ще не всі клієнти використовують сумісний один з одним протокол. Чи сумісні між собою BitComet, μTorrent, KTorrent і офіційний клієнт BitTorrent. Azureus також має режим бестреккерной роботи, але його реалізація відрізняється від офіційної, внаслідок чого він не може працювати через DHT з вищепереліченими клієнтами.

Принцип роботи протоколу BitTorrent

Клієнти з'єднуються один з одним і обмінюються сегментами файлів без безпосередньої участі трекера. Для ефективної роботи мережі BitTorrent необхідно, щоб якомога більше клієнтів були здатні приймати вхідні з'єднання. Неправильне налаштування NAT або файрвола можуть цьому перешкодити.

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

Кожен клієнт має можливість тимчасово блокувати віддачу іншому клієнтові (англ. Choke). Це робиться для більш ефективного використання каналу віддачі. Крім того, при виборі - кого розблоковувати, перевага віддається бенкетам, які самі передали цьому клієнтові багато сегментів. Таким чином, бенкети з хорошими швидкостями віддачі заохочують один одного за принципом «ти - мені, я - тобі».

Super seeding (cупер-сид)

Супер-сид є зміною в поведінці сідерів і не може бути здійснений без порушення протоколу BitTorrent. Тим не менш, це не затверджується ні розробником протоколу, Бремом Коеном, ні в офіційному клієнті.

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

Супер-сид ефективний при роздачах з великою кількістю качають. При невеликій групі людей (2-3 людини) їх клієнти в силу різних причин можуть відмовитися встановлювати зв'язок один з одним. В цьому випадку включений супер-сид змусить клієнтів чекати, поки дані стануть доступні. Коли число качають велике (10-20 чоловік), досить віддати кожну частину файлу лише один раз, тоді клієнти зможуть обмінятися нею між собою, і кожен з них отримає файл цілком.

Програми-клієнти

  • aria2 - підтримує HTTP, FTP, BitTorrent; файли Metalink 3.0
  • Azureus - написаний на мові Java, тому є кросплатформним;
  • BitTornado - багатоплатформовий клієнт, написаний на мові Python;
  • FoxTorrent - розширення для браузера Mozilla Firefox, що реалізовує функції клієнта BitTorrent;
  • mlDonkey - багатоплатформовий клієнт;
  • Браузер Opera підтримує закачування торрентів, починаючи з версії 9.0, але його торрент-клієнт несумісний з багатьма трекера.
  • TorrentFlux - написаний на PHP, працює на віддаленому Web-сервері як PHP-скрипт, дозволяючи не тримати свій комп'ютер включеним постійно, але при цьому качати і роздавати торренти.

Для UNIX-подібних систем:

Для Microsoft Windows і Windows NT:

  • μTorrent;
  • BitComet;
  • FlashGet;
  • GetRight.
  • Shareaza - підтримує роботу з декількома файлообмінними мережами, у тому числі і BitTorrent