Резюме
Как новый клиент может присоединиться к рою без трекера или знания хотя бы одного члена роя, с которым можно обмениваться сверстниками?
Ты не можешь Это невозможно.*
* (Если узел в вашей локальной сети уже не является узлом в 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, чтобы использовать этот новый список. Но это может превратиться в ситуацию, когда агрессор (пожиратель узлов) сам будет постепенно загружать эти списки и нацеливаться на новые смелые загрузочные узлы, а затем переводить их в автономный режим.
Краткий ответ: он получает из файла .torrent.
Когда клиент BitTorrent генерирует файл .torrent без трекера (то есть, когда кто-то готовится поделиться чем-то новым через BitTorrent), он добавляет ключ «узлов» (ключ как в «паре ключ / значение»; как заголовок раздела, не криптографический ключ) к файлу .torrent, который содержит K ближайших узлов DHT, известных этому клиенту.
http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions
Поэтому, когда вы подаете в свой клиент BitTorrent файл .torrent торрента без трекера, который вы хотите загрузить, он использует значение этого ключа «узлов» из файла .torrent, чтобы найти свои первые несколько узлов DHT.
источник
ты не можешь! вам нужно знать хотя бы один IP одного роя, это слабость сети p2p. Вы можете вслепую транслировать, чтобы найти первый IP, но в большой сети, если все так делают, у нас будут проблемы с перегрузкой. Вы можете использовать кеш, но это возможно только для больших скоплений (больший кеш адресов). Вы всегда должны подключить трекер, чтобы спросить только первый IP.
Распределение в DHT означает, что клиентам не нужно хранить весь список, содержащий сумму md5 имени общих файлов, с соответствующими одноранговыми узлами. Список хэшей состоит из равных частей и распределен с избыточностью через рой. Если одноранговое разъединение есть, есть где-то еще один с той же частью хэш-листа. Пэры делятся друг с другом адресом хорошего обладателя части хэш-листа.
torrent-freak написал пост на эту тему
источник
Он просит об этом.
Клиенты Bittorrent, поддерживающие DHT, запускают два отдельных одноранговых приложения.
Первый из них осуществляет совместное использование файлов: рой в языке bittorrent lingo представляет собой группу пиров, совместно использующих объект bittorrent (например, структуру файла или каталога). Каждый объект bittorent имеет некоторые метаданные, которые сохраняются в .torrent-файле. (Он включает в себя размер объекта, имя папки, возможно информацию о трекере или узлы. И т. Д.) Хэш метаданных, необходимых для загрузки этого объекта bittorrent, называется infohash.
DHT в основном является вторым P2P-приложением, целью которого является замена трекеров: он хранит пары (infohash, swarm) и обновляет рой, если он получает анонсирующие сообщения. Новый клиент должен знать некоторый «узел» (bittorrent lingo для однорангового узла DHT) для начальной загрузки своей информации о DHT. Здесь применяются аргументы @allquixotic. Поскольку MDHT в настоящее время состоит из более чем 7 миллионов пиров, устойчивая атака типа «отказ в обслуживании» кажется маловероятной.
Затем он может запросить DHT относительно информационного хэша, и ему не нужно использовать трекер или знать одноранговый узел, который раньше был частью роя. Если один из пиров, с которыми он связывается, поддерживает совместное использование метаданных, ему нужен только информационный хеш, который может извлечь .torrent-файл из роя.
источник
Большинство сетевых клиентов p2p загружаются из списка начальных узлов, к которым они первоначально подключаются ... как только они подключаются к одному загруженному узлу, остальные загружаются распределенным способом. Он подключается к узлу начальной загрузки и загружает свой список узлов DHT, а затем переходит к каждому из них и делает то же самое, и т. Д. И т. Д.
Например:
Вот список узлов начальной загрузки:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10
Вот где клиент подключается к ним для увлажнения списка пиров:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60
Это похоже на работу трекера, за исключением того, что любой может быть узлом начальной загрузки, поэтому его практически невозможно отключить.
Биткойн-основной кошелек работает так же. Это позволяет вам изменить одноранговые узлы начальной загрузки, если по какой-то причине отключаются установленные по умолчанию.
источник