Простіше кажучи, як клієнт BitTorrent спочатку виявляє однолітків за допомогою DHT?


45

Я вже читав цю відповідь SuperUser і цю статтю у Вікіпедії, але обидві для мене занадто технічні, щоб справді обернути голову.

Я розумію ідею трекера: клієнти підключаються до центрального сервера, який підтримує список ровесників у рій.

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

Моє запитання: як працює DHT? Тобто, як новий клієнт може приєднатися до рою без трекера чи знань принаймні одного члена рою для обміну однолітками?

(Примітка. Найкраще прості пояснення.)

Відповіді:


48

Підсумок

Як новий клієнт може приєднатися до рою, не маючи трекера або знань принаймні одного члена рою, з яким обмінюватися з однолітками?

Ви не можете. Це неможливо.*

* (Якщо випадково вузол у вашій локальній мережі вже є вузлом у DHT. У цьому випадку ви можете використовувати механізм мовлення, наприклад Avahi, для "виявлення" цього однорангового інструмента та завантаження з них. Але як це вони з часом завантажуватимуться? Зрештою, ви потрапите в ситуацію, коли вам потрібно підключитися до загальнодоступного Інтернету. І загальнодоступний Інтернет є єдиним трансляцією, а не багатоадресною передачею, тому ви застрягли з використанням заздалегідь визначених списків однолітків.


Список літератури

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


Експозиція

За допомогою протоколу Kademlia при підключенні до мережі ви проходите процедуру завантаження , яка абсолютно вимагає заздалегідь знати IP-адресу та порт хоча б одного вузла, який вже бере участь у мережі DHT. Наприклад, трекер, до якого ви підключаєтесь, може бути самим вузлом DHT. Після підключення до одного вузла DHT ви продовжуєте завантажувати інформацію з DHT, яка надає вам інформацію про підключення для більшої кількості вузлів, і ви перейдете до цієї структури "графа", щоб отримати з'єднання до більшої кількості вузлів, які можуть забезпечити обидва підключення до інших вузлів та корисних даних (шматки завантаження).

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

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

В основному, DHT є настільки ж децентралізованим, як і механізм приєднання, і тому що механізм приєднання є досить крихким (немає жодного способу "трансляції" по всьому Інтернету! Тому вам доведеться з'єднатись з окремим попередньо призначеним хостом, щоб отримати DHT дані), Kademlia DHT НЕ дуже децентралізована. Не в найсуворішому значенні цього слова.

Уявіть собі такий сценарій: той, хто хоче, щоб P2P зупинився, виходить і готує атаку на всі часто використовувані стабільні DHT-вузли, які використовуються для завантаження. Після того, як вони здійснили свою атаку, вони виводять її відразу на всі вузли. Wham ; кожен окремий DHT-вузол завантаження знижується всім одним махом. А тепер що? Ви застрягли в підключенні до централізованих трекерів, щоб завантажити традиційні списки однолітків з них. Ну, якщо вони теж атакують трекерів, то ти справді, справдівгору за течією. Іншими словами, Kademlia та вся мережа BT обмежена обмеженнями самого Інтернету, оскільки існує обмежена кількість (і порівняно невелика) кількість комп’ютерів, на які вам доведеться успішно атакувати чи брати офлайн, щоб запобігти> 90% користувачів від підключення до мережі.

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

Звичайно, щоб обійти це, хтось міг би розгорнути виправлений клієнт BitTorrent з новим списком заздалегідь визначених стабільних DHT-вузлів або DNS-адрес, і голосно рекламувати спільноту P2P, щоб використовувати замість цього новий список. Але це перетвориться на ситуацію, коли агресор (вузол) поступово сам завантажуватиме ці списки та націлюватиме на нових відважних вузлів завантаження, а потім відводить їх і в офлайн.


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

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

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

З такими проектами, як masscan ( github.com/robertdavidgraham/masscan ) виявлення DHT-вузлів без централізованого каталогу має бути здійсненим
newlog

19

Коротка відповідь: це отримує з файлу .torrent.

Коли клієнт BitTorrent генерує .torrent-файл без трекеру (тобто коли хтось готується поділитися чимось новим через BitTorrent), він додає ключ "вузлів" (ключ як у "пара ключ / значення"; наприклад, заголовок розділу, не крипто-ключ) до файлу .torrent, який містить K найближчих вузлів DHT, відомих цьому клієнту.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

У словнику торрентів без трекінгу немає клавіші "оголошення". Натомість торрент без трекера має клавішу "вузлів". Цей ключ повинен бути встановлений у найближчих вузлах K у таблиці торень, що генерує клієнт. Альтернативно, ключ може бути встановлений у відомому хорошому вузлі, наприклад, таким, яким керує людина, що генерує торент. Будь ласка, не додайте автоматично "router.bittorrent.com" до файлів торентів або автоматично додайте цей вузол до таблиць маршрутизації клієнтів.

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


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

3
Ось чому "злиття нового файлу торрента із завантаженням торрента" у багатьох клієнтів змушує мертвий торрент оживати?
Джесвін Хосе

2
@aitchnyu так, але торрент-файл також може мати додаткові / різні трекери.
longneck

2
Здається, що жоден клієнт BitTorrent насправді не включає інформацію про вузли. Випробували Transmission, Vuze, Deluge, Mainline та інші.
Ейюн

1

ти не можеш! ви повинні знати хоча б один IP одного з рою, це слабкість мережі p2p. Ви можете сліпо транслювати, щоб знайти перший IP, але у великій мережі, якщо всі це робитимуть, у нас виникнуть проблеми з перевантаженнями. Можна використовувати кеш, але це можливо лише для великих роїв (більший кеш адрес однорангової адреси). Ви завжди повинні підключити трекер, щоб запитати лише перший IP-адресу.

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

torrent-freak написав пост на цю тему


0

Як новий клієнт може приєднатися до рою, не маючи трекера або знань принаймні одного члена рою, з яким обмінюватися з однолітками?

Це просить.

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

Перший - це спільний доступ до файлів: Рой у лінгто bittorrent - це група однолітків, що обмінюються об'єктом bittorrent (наприклад, структура файлу або каталогу). Кожен біторент-об’єкт має деякі метадані, які зберігаються у .torrent-файлі. (Він включає розмір об'єкта, назву папки, можливо інформацію про трекер або вузли. Тощо.) Хеш метаданих, необхідних для завантаження цього об'єкта bittorrent, називається infohash.

DHT в основному є другою програмою P2P, яка має на меті замінити трекери: вона зберігає пари (infohash, рій) та оновлює рій, якщо він отримує повідомлення про оголошення. Новий клієнт повинен мати знання про якийсь "вузол" (bittorrent lingo для однорангового DHT) для завантаження його інформації про DHT. Тут застосовуються аргументи, подані @allquixotic. Оскільки в даний час MDHT складається з понад 7 мільйонів однолітків, тривала атака відмови у сервісі здається малоймовірною.

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


0

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

Наприклад:

Ось список вузлів завантаження:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Ось де клієнт підключається до них для гідратації списку однолітків:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

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

Основний гаманець Bitcoin працює так само. Це дозволяє змінювати однолітки завантажувача завантаження, якщо з якихось причин вимкнення за замовчуванням.


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