Подтвердить что ты не робот

Peer to Peer: методы поиска одноранговых узлов

Существуют ли какие-либо известные методы поиска одноранговых узлов без использования выделенного центрального сервера?

ie: Если у меня есть одноранговые узлы, которые отключаются и снова подключаются к Интернету, но каждый раз получают новый IP-адрес, и я хочу подключиться к ним, не настраивая выделенный сервер для регистрации.

Я думал о том, чтобы использовать адрес электронной почты одноранговых узлов, чтобы периодически отправлять манифест подключенных сверстников с каким-то временным кодом, отрицая необходимость в выделенном сервере. Это было бы резервным, если ни один из сверстников не мог быть подключен после попытки всех ранее известных одноранговых адресов. Но предпочтительными будут существующие модели поиска сверстников.

4b9b3361

Ответ 1

Невозможно узнать хотя бы одного начального партнера, чтобы узнать больше. Полностью протоколы P2P, такие как Gnutella или Gnutella2, или более простой Overnet (прославленный Storm Worm), основаны на каждом клиенте, имеющем список запуска нескольких сверстников. Например, они могут быть удалены с веб-автоматизированного трекера. Клиент обнаруживает всю сеть или ее части, задавая другим партнерам дополнительные адреса, например, при делегировании поиска файлов.

Если вы действительно не можете иметь какой-либо централизованный ресурс, лучше всего найти первый одноранговый узел через широковещательные сообщения и, в конечном счете, сканирование IP-адресов. Первый подход имеет смысл, но по крайней мере 98% случаев не принесут никаких результатов. Более поздний подход, конечно же, злоупотребляет Интернетом, а также является незаконным в большинстве стран.

Я действительно переосмыслил бы какой-то центральный трекер. Это может быть что-то простое, как PHP script на веб-сервере (сегодня сеть gnutella поддерживается десятью двадцатью такими сценариями, размещенными людьми, которые даже не знают друг друга). И это конечно более легкое, чем электронная почта (которая, из-за спама, по крайней мере, не будет работать).

Ответ 2

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

Ответ 3

Три способа, с моей головы, хотя вам всегда понадобится центральный сервер для запуска соединения, если вы не поедете с опцией 3.

  • Центральный сервер, поддерживающий известный список одноранговых узлов, с поддержкой keep-alive.
  • Один или несколько центральных серверов, которые поддерживают некоторых общих одноранговых узлов, могут использовать друг для друга, но после подключения больше не нужен центральный сервер до тех пор, пока одноранговый узел остается подключенным (что-то вроде BitTorrent); может также связывать скрепленные соединения.
  • Сканирование портов/IP-адресов (настоятельно не рекомендуется).

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

Ответ 4

Воспользуйтесь любым существующим форумом, на котором могут размещаться данные. Подумайте о секретном канале IRC, вложив данные в фотографии и разместив на сайтах обмена фотографиями 4chan?, на любом сайте, который позволит вашему приложению входить в систему и отправлять данные без входа в систему captcha и т.д.

http://chatzilla.hacksrus.com/faq/#password

Другая стратегия может заключаться в встроенных сообщениях в транзакции с цифровой валютой. Возьмите дешевую монету, которая, вероятно, повесит... МОЖЕТ ЛИ ДОГЕ или ЛУНА. Создайте функциональность кошелька в своем приложении. так что вы можете отправлять микро транзакции взад и вперед между адресами, которые контролирует ваше приложение. Там по-прежнему будет гонорар шахтеров, но это всего лишь штука копейки. Даже если позже они запретят добавлять метаданные к транзакциям, вы можете сделать транзакцию эквивалентной вашему IP-адресу в MOON и использовать адреса тщеславия в монете MOON для вашего приложения. так что когда новый node выйдет в сети, он знает, что искать в блочной цепочке для - 2daMOON% bootStr @pM3. SEND - 104.003021133 MOON IP = 104.3.21.133 не дорогое предложение.

Ответ 5

Проще говоря, нет никакого способа сделать это без центрального сегмента.

Если вы хотите сделать это, вам просто нужен один или несколько центральных серверов, будь то динамические dns или нет. Клиентам нужен метод, чтобы узнать, к чему они должны подключиться, и единственный по-настоящему разумный способ сделать это - с вашим собственным сервером, в самом простом сценарии ему нужно только отправить IP-адрес в ответ.

Виртуальные разрывы могут быть рассчитаны примерно на 15 долларов США в месяц, что значительно дешевле ИМО, чем пытаться использовать или злоупотреблять какой-либо другой пропускной способностью.


[Edit].

Проще говоря, существует другой способ:

При отражении я думаю, что я бы сделал, чтобы назначить набор одноранговых узлов в качестве контроллеров кластера и использовать динамическую службу DNS, чтобы другие сверстники могли обнаружить контроллеры кластера.

Выберите динамического поставщика DNS, я назову его myc.ath.cx(я использую http://www.dyndns.com/).

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

Когда сверстник запущен, он ищет myc.ath.cx и пытается подключиться. Если соединение не может быть выполнено в течение периода, скажем, 30 секунд, он берет на себя регистрацию записи DNS.

Любой сверстник, желающий обнаружить других сверстников, может просто запросить myc.ath.cx, и список будет предоставлен

Все одноранговые узлы отвечают за периодическую загрузку списка одноранговых узлов, если они нуждаются в контроллере кластера.

Контроллер кластера будет периодически запрашивать запись DNS - если он изменил ее IP-адрес, тогда он знает, что он больше не является контроллером кластера, поэтому он свяжется с контроллером кластера, который в настоящее время имеет запись DNS, и предоставит ему список известных хостов.

Контроллер кластера будет периодически связываться с узлами в списке, чтобы убедиться, что они все еще действительны.

Ответ 6

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

Клиент Satoshi Node Discovery

IRC больше не используется, но может быть проще всего реализовать:

Начиная с версии 0.6.x клиент Bitcoin больше не использует загрузку IRC по умолчанию, а с версии 0.8.2 поддержка для начальной загрузки IRC полностью удалена. Эта документация ниже является точной для большинства предыдущих версий.

Помимо обучения и совместного использования своего собственного адреса, Node узнал о других адресах Node через IRC-канал. См. irc.cpp.

После изучения собственного адреса, Node закодировал свой собственный адрес в строку, которая будет использоваться как ник. Затем он случайно присоединился к каналу IRC, названному между # bitcoin00 и # bitcoin99. Затем он выпустил команду ВОЗ. Поток читал строки по мере их появления в канале и декодировал IP-адреса других узлов в канале. Он делал это в цикле, навсегда, до тех пор, пока Node не остановился.

Когда клиент обнаружил адрес IRC, он установил отметку времени по адресу на текущее время, но он использовал "штраф" в 51 минуту, а это означает, что он выглядел так, как будто это было замечено почти на час раньше.

Ответ 7

Старый вопрос, но я сам думал об этой проблеме, так что буду объявлять свои 2-центов. Короче говоря, центральный сервер не требуется, если node знает хотя бы один действительный одноранговый узел. Новые узлы должны быть добавлены в сеть любым текущим членом (например, приглашенным или node порождает другой node, в зависимости от вашего приложения).

Предполагая, что:

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

  • агенты совместно используют информацию сверстников с другими сверстниками

  • по крайней мере некоторые агенты остаются доступными в течение относительно длительных периодов времени по отношению к частоте node, подключается к сети для обновления его адресной книги (или узлы имеют стабильные адреса)

  • в дополнение к одноранговым адресам также отслеживается информация о доступности (многие параметры здесь в зависимости от вашей системы). Примеры включают: имеет ли одноранговый узел стабильный адрес, когда последний раз видели, показатель доступности, информацию о типе контента/адрес действителен-до времени, если известен)

  • новые агенты инициализируются хотя бы одним допустимым одноранговым узлом (не обязательно должны быть центральным node, могут быть любыми действительными node)

  • Механизмы доверия должны быть необходимы, если возможно наличие вредоносных сверстников

Когда одноранговый узел подключается к сети, он запрашивает одноранговые узлы в нем, чтобы обнаружить, какие активные и, возможно, удаляет истекшие динамические адреса. Узлы обмениваются информацией сверстников и могут стать связанными. Это обнаружение/обмен сверстников может продолжаться определенное количество перелетов или случайным ходом до тех пор, пока список сверстников не будет иметь достаточный размер и/или качество.

Еще несколько деталей:

  • Узлы соединяются и обмениваются информацией сверстников с частотой, связанной с тем, как часто меняются адреса node, поэтому адресная книга не становится устаревшей, а node отключается, потому что ни один из ее бывших одноранговых узлов не доступен на их последних известных адреса

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

  • Узлы должны быть выборочными относительно сверстников, которые они хранят; то есть те, в которых они более склонны к обмену данными (например, вес, основанный на истории).

  • Node ссылки могут быть асимметричными или симметричными в зависимости от приложения

Ответ 8

Однако ваш метод отправки электронной почты использует выделенный сервер; почтовый сервер электронной почты, если быть точным.

Грубо говоря, я не думаю, что это возможно, если вы не используете какое-то выделенное хранилище или сервер (который используется подходом электронной почты, хотя и наклонно), ЕСЛИ вы не можете охарактеризовать подключение к Интернету, которое используют ваши сверстники.

В принципе, если у вас есть набор из X числа одноранговых узлов, которые подключаются к Y времени, и они затем выходят из сетки для Z времени... по существу, вы можете построить уравнение вероятности о вероятном это то, что набор сверстников, с которыми вы в последний раз связывались, по-прежнему доступен; где эта вероятность приближается к 1 (для данного набора из X, Y и Z выше), вы, скорее всего, поддерживаете одноранговую сеть без использования хранилища.

Возможно, больше в духе; вместо того, чтобы иметь "выделенный центральный сервер", используйте простой онлайн-сервис, чтобы указать одноранговый список. Настройте группу yahoo или что-то в этом роде; клиенты могут автоматически просмотреть его и получить адрес одноранговой сети, из которого можно запросить набор одноранговых узлов; клиент может быть закодирован с помощью аутентификации для публикации в группу и может периодически публиковать свой IP-адрес, чтобы другие могли запросить набор известных активных одноранговых узлов.

Если вы хотите получить очень сложную задачу, вы можете начать использовать стеганографические методы, чтобы скрыть информацию о местоположении сверстников. То есть получить поиск в Google для "бла"; найти первый сайт, указанный в результатах, который имеет незащищенную (без CAPTCHA) доску объявлений; найдите третье (или другое) сообщение, которое начинается с "Без ограничений" (или что-то еще) и найдет там заголовок первого сообщения и там будет IP-адрес однорангового узла. Если это не сработает, перейдите по списку условий поиска к следующему.

Но это подлый.: -)

Ответ 9

Не могли бы вы повторно использовать выделенный выделенный сервер для этой цели?

Я имею в виду, в частности, регистрацию каждого из одноранговых узлов с динамическим DNS, но если вы были готовы получить немного уродливый доступ к известной учетной записи Hotmail или Google Doc или тому подобное.

Ответ 10

Вы можете использовать центральный каталог или какой-либо широковещательный протокол для обнаружения службы. Предполагая, что вы можете проиндексировать их Google, вы можете представить себе систему, в которой каждый одноранговый узел запускает веб-сайт с некоторыми уникальными, редкими словами, содержащимися на определенной странице. Затем вы можете использовать результаты поиска Google на основе этих слов, чтобы определить потенциальных сверстников. Это будет, по сути, (шумная и медленная) интернет-трансляция.

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

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

Ответ 11

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

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

Ответ 12

Это типичное использование алгоритма распределенной хеш-таблицы. Я бы предложил посмотреть на что-то вроде теста. Он использует оверлейную сеть (сеть уровня приложений) поверх других слоев.

Каждый node имеет GUID, который используется для маршрутизации запросов по одноранговой сети.

Ответ 13

Если вы ищете для уже установленного центрального сервера, см. запись metaserver на странице здесь:
http://martindevans.appspot.com/
Вы можете зарегистрировать сверстников там, а затем другие сверстники могут их найти. Очевидно, что это центральный сервер, но он не требует обслуживания с вашей стороны.