Автообнаружение в приложениях P2P

Я хочу создать приложение P2P в интернете. Что является лучшим или, если не существует достаточно хорошего способа автоматического обнаружения других узлов в децентрализованной сети?

3 ответа

Решение

Grothoff и GauthierDickey из проекта GNUnet (анонимная сеть обмена файлами, устойчивая к цензуре) исследовали вопрос начальной загрузки сети p2p без какого-либо центрального списка хостов.

Они обнаружили, что для сети Gnutella (Limewire) при случайном ip-поиске требуется в среднем 2500 попыток соединения, чтобы найти однорангового узла.

В статье они предложили метод, который сократил количество попыток подключения до 817 для Gnutella и до 51 для сети E2DK.

Это было достигнуто за счет создания статистического профиля пользователей p2p для каждой организации DNS, эта небольшая (около 100 КБ) база данных обнаружения должна создаваться заранее и поставляться с клиентом p2p.

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

Хорошее место для начала исследований - это распределенные хеш-таблицы.

Что касается безопасности, эта тема будет где-то в литературе, я должен подумать - снова я бы порекомендовал Википедию. С несуществующими обращаются тривиально: если вы не можете связаться с IP/ портом, не оставляйте его в своем списке, и если узел регулярно предоставляет несуществующие указатели, рассмотрите возможность отмены приоритетов или удаления его из вашего списка. список целиком

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

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

Хорошо, чтобы два партнера нашли друг друга, им обоим необходимо знать общий, скажем, посредник для обмена IP-адресами один раз. Вы можете использовать что угодно для такого рода первого рукопожатия, в то же время имея возможность ЗАПИСАТЬ и ЧИТАТЬ с этого "канала". например: DNS (ваши известные домены), электронная почта, IRC, Twitter, Facebook, Dropbox и т. д.

Другие вопросы по тегам