Як працює Bittorrent?


34

Хочу дізнатися більше про бітторентний спосіб спільного використання файлів. Я технічно просунутий користувач (програміст), тому технічно вдосконалений матеріал не є проблемою, але він повинен бути стислим і суттєвим. Мені потрібна хороша книга / веб-ресурс, яка пояснює загальну архітектуру бітторент.

Мене не цікавлять деталі, просто загальна архітектура та термінологія, як насіння, однолітки тощо.

Будь-які пропозиції?

Відповіді:


29

Огляд того, як працює bittorrent:

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

  • Команда отримує файл .torrent, який матиме, серед іншого, A) хеш SHA-1 набору файлів, B) URL-адресу трекера та C) кількість фрагментів, на які файл розбивається, а також SHA-1 хешу з кожного шматка. Розмір шматочків визначається самим торентом.

  • Потім одноранговий підключається до трекера за допомогою URL-адреси, вказаної в торенті. Трекер відповідає списком однолітків. Трекери розмовляють HTTP через порт 80 або 443.

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

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

  • Ровесник повторює трекер так часто, щоб отримати оновлений список однолітків. Ровеснику не потрібно чекати, коли закінчиться один обмін, перш ніж розпочати інший, якщо він має декілька штук, тому, як тільки у однолітка буде купка штук, передача може дійсно пришвидшити. Ось чому торрент починається повільно, але швидко набирає швидкість, коли одноліток набуває шматки.

  • Коли у однорангових файлів є всі фрагменти, весь файл перевіряється на основі хеша набору файлів SHA-1. Потім він стає сівалкою , і зараз нічого не робить, крім того, що допомагає набору файлів бути більш доступними. Ровесники, у яких не всі шматки, - п’явки .

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

  • Хеш SHA-1 - це те, як трекер і однолітки "знають", який файл повинен бути перекладений. Імена файлів у торенті не використовуються для ідентифікації даних. Шматки, які не підтверджують наявність у файлі .torrent, викидаються. Ровесники, які постійно надсилають погані шматки, похитуються іншими однолітками і, зрештою, не зможуть підключитися ні до кого в рій.

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

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


1
Прекрасна відповідь! Один підказ: Я вважаю, що насіння вважають за краще сіяти рідше , а не перші шматки. Не впевнений, що це алгоритм, але це те, що я отримав від торрент-програми один раз під час возитися з налаштуваннями.
Галліфрейян

18

Приємний документ на цю тему тут

      http://davidhales.name/posters/patarin-hales-delis-poster6.pdf (Примітка - це фактично .pdfфайл і його можна переглядати за допомогою програми Acrobat Reader.)

Ось файл із зображенням, який створив хтось із його вмісту:

patarin-hales-delis-poster6


8

На YouTube є досить приємне відео, що пояснює це наочно з вирізанням з картону. Це не дуже технічне пояснення, але чудово підходить для пояснення ідеї BitTorrent людям простим, зрозумілим способом.

як працює bittorrent на youtube


3
+1 Корисне відео. Показав це моєму татові. Після цього у нього не було питань. Дивовижно. :)
zero2cx

2

Огляд протоколу повідомлень рівних .

Клієнт може використовувати два протоколи для обміну інформацією з однолітками, TCP або uTP (через UDP). Ці дані відповідають специфікації протоколу bittorrent , повідомлень про однорангові розділи .

Так програмно, зв’язок повинен починатися між двома клієнтами. Після встановлення з'єднання (через TCP або uTP) клієнт ініціює рукостискання bittorrent, яке захоплює інформацію віддаленого однорангового протоколу (ip & port) з трекера або через DHT . Це рукостискання містить info_hash, який ідентифікує торрент, про який буде з'єднання.

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

Коли з'єднання починається, обидва клієнта (локальний клієнт, якого я називаю LC та віддалений клієнт, RC ) задушені та нецікаві . Подарований означає "я не відповім на ваші повідомлення, занадто зайняті, але я можу їх врахувати". Відключений тому означає "я відповім на ваші повідомлення". Зацікавлений означає, звичайно, що я хотів би, щоб у вас були якісь твори . Тому стан зв’язку між двома однолітками можна визначити з цими чотирма станами: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Щоб попередити RC, що я (не) забитий або (не) зацікавлений, Я мушу надсилати йому (не) зацікавлені та (не) подрібнені повідомлення та взаємно.

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

Так що якщо LC є дроселювання і зацікавлений і RC має unchocked його, то він може послати запит повідомлення попросити блок , що належить до однієї частини він знає LC має завдяки двійкового повідомленнями.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.