44

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

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

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

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

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

5 ответов5

47

Резюме

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

Ты не можешь Это невозможно.*

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

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.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .