Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

  

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

     

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

     

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

     

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

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

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

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

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

При условии, что:

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

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

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

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

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

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

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

Еще несколько подробностей:

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

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

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

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

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

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

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


[Редактировать].

Проще говоря, есть еще один способ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top