Peer to Peer: методы поиска пиров - PullRequest
56 голосов
/ 22 ноября 2008

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

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

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

Ответы [ 13 ]

41 голосов
/ 22 ноября 2008

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

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

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

9 голосов
/ 22 ноября 2008

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

6 голосов
/ 19 мая 2014

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

Обнаружение клиентского узла Satoshi

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

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

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

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

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

6 голосов
/ 18 марта 2014

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

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

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

4 голосов
/ 04 сентября 2015

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

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

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

  • агенты делятся информацией о пирах с другими пирами

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

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

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

  • необходимы механизмы доверия, если возможны злонамеренные узлы

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

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

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

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

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

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

4 голосов
/ 22 ноября 2008

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

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

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

3 голосов
/ 22 ноября 2008

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

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

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


[Edit].

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

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

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

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

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

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

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

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

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

1 голос
/ 19 февраля 2014

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

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

1 голос
/ 22 ноября 2008

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

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

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

1 голос
/ 22 ноября 2008

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

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

...