Проще говоря, как клиент 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, звучит так же, как обмен сверстниками.
Celeritas

Дело в том, что это Distributed о DHT является то , что фактическая полезная нагрузка данных - то есть, список IP - адресов и портов , где файлы могут быть загружены - распространяется. При одноранговом обмене весь список хранится на одном компьютере, обычно на трекере, и загружается не разным образом для загрузки файла. Я мог бы упомянуть об этом в своем ответе, но весь этот вопрос (и ответы) касается только первоначального обнаружения или присоединения к сети DHT, а не того, что происходит после вашего присоединения.
allquixotic

1
Нажатие на все узлы начальной загрузки остановит загрузку новых пользователей, но не обязательно существующих пользователей, которые отключатся, а затем вернутся. У меня сложилось впечатление, что несколько клиентов запоминают свой активный набор узлов и используют их для повторного подключения, а не для начальной загрузки каждый раз.
Clacke

В таких проектах, как 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 и другие.
Aeyoun

1

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

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

torrent-freak написал пост на эту тему


0

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

Он просит об этом.

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

Первый из них осуществляет совместное использование файлов: рой в языке bittorrent lingo представляет собой группу пиров, совместно использующих объект bittorrent (например, структуру файла или каталога). Каждый объект bittorent имеет некоторые метаданные, которые сохраняются в .torrent-файле. (Он включает в себя размер объекта, имя папки, возможно информацию о трекере или узлы. И т. Д.) Хэш метаданных, необходимых для загрузки этого объекта bittorrent, называется infohash.

DHT в основном является вторым P2P-приложением, целью которого является замена трекеров: он хранит пары (infohash, swarm) и обновляет рой, если он получает анонсирующие сообщения. Новый клиент должен знать некоторый «узел» (bittorrent lingo для однорангового узла DHT) для начальной загрузки своей информации о DHT. Здесь применяются аргументы @allquixotic. Поскольку MDHT в настоящее время состоит из более чем 7 миллионов пиров, устойчивая атака типа «отказ в обслуживании» кажется маловероятной.

Затем он может запросить DHT относительно информационного хэша, и ему не нужно использовать трекер или знать одноранговый узел, который раньше был частью роя. Если один из пиров, с которыми он связывается, поддерживает совместное использование метаданных, ему нужен только информационный хеш, который может извлечь .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

Это похоже на работу трекера, за исключением того, что любой может быть узлом начальной загрузки, поэтому его практически невозможно отключить.

Биткойн-основной кошелек работает так же. Это позволяет вам изменить одноранговые узлы начальной загрузки, если по какой-то причине отключаются установленные по умолчанию.


Ссылки мертвы
Зелла
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.