Говоря простыми словами, как клиент BitTorrent изначально обнаруживает одноранговые узлы, использующие DHT?

Я уже прочитал этот ответ SuperUser и эта статья в Википедии , но оба они слишком технические для меня, чтобы действительно обвести вокруг себя.

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

Я также понимаю идею обмена peer: клиенты уже в рое отправляют полный список своих сверстников друг другу. Если обнаружены новые сверстники, они добавляются в список.

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

(Примечание: простые объяснения лучше всего.)

42 голоса | спросил Steve V. 6 Maypm13 2013, 23:53:06

5 ответов


44

Резюме

  

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

Вы не можете. Это невозможно. *

* (Если узел в вашей локальной сети уже не является узлом в DHT. В этом случае вы можете использовать механизм вещания, например Avahi, чтобы «обнаружить» этого сверстника и загрузить из них. Но как они загрузились сами? В конце концов, вы столкнетесь с ситуацией, когда вам нужно подключиться к общедоступному Интернету. является одноадресной, а не многоадресной, поэтому вы застряли с использованием предварительно определенных списков одноранговых узлов.)


Ссылки

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


Экспозиция

С протоколом Kademlia, когда вы присоединяетесь к сети, вы проходите процедуру начальной загрузки , что абсолютно необходимо что вы знаете, заранее , IP-адрес и порт хотя бы одного узла, уже участвующего в сети DHT. Например, трекер, к которому вы подключаетесь, может быть сам DHT-узлом. После того как вы подключены к одному узлу DHT, вы затем переходите к загрузке информации из DHT, которая предоставляет вам информацию о подключении для большего количества узлов, и затем вы перемещаетесь по этой структуре «graph», чтобы получать подключения к большему количеству узлов, которые могут обеспечить как подключение к другим узлам и данные полезной нагрузки (куски загрузки).

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

Простой ответ на ваш вопрос выделен жирным шрифтом, вы не . Если вы вообще не знаете ЛЮБОЙ информации о даже одном хосте, который может содержать метаданные DHT, вы застреваете - вы даже не можете начать. Я имею в виду, конечно, вы могли бы грубо заставить попытку открыть IP-адрес в общедоступном Интернете с открытым портом, который, случается, передает информацию DHT. Но, скорее всего, ваш клиент BT жестко привязан к определенному статическому IP или DNS, который разрешает стабильный узел DHT, который просто предоставляет метаданные DHT.

В принципе, DHT только децентрализован как механизм соединения и потому, что механизм соединения довольно хрупкий (нет возможности «транслировать» по всему Интернету, поэтому вам нужно unicast отдельный предварительно назначенный узел для получения данных DHT), Kademlia DHT не децентрализован действительно . Не в строгом смысле этого слова.

Представьте себе этот сценарий: кто-то, кто хочет остановить P2P, отключается и готовит атаку на all обычно используемые стабильные DHT-узлы, которые используются для начальной загрузки. После того, как они устроили атаку, они сразу же запустили ее на узлах all . Wham ; каждый узел DHT-загрузки загружается одним махом. Что теперь? Вы застряли в подключении к централизованным трекерам для загрузки традиционных списков сверстников из них. Ну, если они нападают на трекеров, значит, вы действительно, действительно до ручья. Другими словами, Kademlia и вся сеть BT ограничены ограничениями самого Интернета, в связи с чем существует конечное (и относительно небольшое) количество компьютеров, которые вам необходимо было бы успешно атаковать или отключать, чтобы предотвратить> 90 % пользователей от подключения к сети.

Как только все «псевдоцентральные» узлы начальной загрузки исчезнут, внутренние узлы DHT, которые не загружаются, поскольку никто из внешних DHT не знает о внутренних узлах , бесполезны ; Oнине может привести новые узлы в DHT. Таким образом, поскольку каждый внутренний узел отключается от DHT со временем, либо из-за того, что люди закрывают свои компьютеры, перезагружаются для обновлений и т. Д., Сеть рушится.

Конечно, чтобы обойти это, кто-то может развернуть исправленный клиент BitTorrent с новым списком предварительно определенных стабильных узлов DHT или DNS-адресов и громко рекламировать сообщество P2P для использования этого нового списка. Но это станет «ударом-моль», когда агрессор (узел-едок) будет постепенно загружать эти списки и нацеливаться на смелые новые загрузочные узлы, а затем также откладывать их в автономном режиме.

ответил allquixotic 7 Mayam13 2013, 00:19:52
18

Короткий ответ: Он получает его из файла .torrent.

Когда клиент BitTorrent генерирует файл без трекера .torrent (то есть, когда кто-то готовится поделиться чем-то новым через BitTorrent), он добавляет ключ «узлы» (ключ, как в «key» /value pair ", как заголовок раздела, а не крипто-ключ) в файл .torrent, который содержит K ближайших узлов DHT, известных этому клиенту.

http://www.bittorrent.org/beps/BEP% 5F0005.html # торрент-файл-расширения

  

В торрент-словаре без трекера отсутствует ключ «анонс».   Вместо этого трекер без трекера имеет ключ «узлов». Этот ключ должен быть   установить для ближайших узлов K в маршрутизации, генерирующей поток torrent   Таблица. Альтернативно, ключ может быть установлен на известный хороший узел, такой как   как управляемый человеком, генерирующим поток. Пожалуйста, не надо   автоматически добавьте «router.bittorrent.com» в торрент-файлы или   автоматически добавьте этот узел в таблицы маршрутизации клиентов.

Итак, когда вы кормите своего клиента BitTorrent файлом .torrent без трекера, который вы хотите загрузить, он использует значение этого «узлового» ключа из файла .torrent, чтобы найти свои первые несколько узлов DHT.

ответил Spiff 7 Mayam13 2013, 00:35:36
1

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

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

torrent-freak написал сообщение об этом предмет

ответил z8po 7 Mayam13 2013, 00:34:05
0
  

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

Он запрашивает его.

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

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

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

Затем он может запросить DHT относительно infohash и не должен использовать трекер или знать партнера, который является частью рой раньше. Если один из сверстников, с которым он контактирует, поддерживает совместное использование метаданных , это только необходимо, чтобы infohash мог извлечь .torrent-файл из роя.

ответил tameit 22 +04002014-10-22T01:14:49+04:00312014bEurope/MoscowWed, 22 Oct 2014 01:14:49 +0400 2014, 01:14:49
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

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

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

ответил chovy 8 ThuEurope/Moscow2016-12-08T08:46:48+03:00Europe/Moscow12bEurope/MoscowThu, 08 Dec 2016 08:46:48 +0300 2016, 08:46:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132