Одноранговая децентрализованная сеть - сообщение всем партнерам - PullRequest
5 голосов
/ 16 февраля 2012

Мне нужно создать одноранговую сеть с общим доступом к файлам (без центрального сервера).

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

Я знаю, что это не самый лучший способ сделать это, но это требование, так что ... Другое (на мой взгляд, странное) требование состоит в том, что связь между узлами должна быть реализована с использованием протокола HTTP и JSON-serialized.

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

Поэтому я хочу знать хороший способ доставки сообщения.от одного узла ко всем другим без единого узла для непосредственного подключения к другим (слишком много подключений).

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

РЕДАКТИРОВАТЬ: Извините, если я не прояснил это.Сообщение должно быть получено ВСЕМИ узлами сети, а не только одной целью.

РЕДАКТИРОВАТЬ 2: Вы можете думать о том, что я хочу сделать, как сеть веб-серверов.Они должны иметь возможность хранить данные распределенными (не является частью вопроса), но каждый из них должен знать, какие ресурсы доступны в сети (хеш-таблица).Клиент может загрузить материал на один из серверов (неважно, какой).Когда это происходит, ВСЕ другие должны знать об этом изменении, чтобы обновить свои хеш-таблицы.То же самое применимо, если новый сервер присоединяется к сети.Мой вопрос заключается в том, как распространять это сообщение без единого сервера для подключения ко всем остальным, что, несомненно, будет генерировать большой трафик на одном сервере.

1 Ответ

2 голосов
/ 16 февраля 2012

Я вижу, что ваш вопрос разделен на две составляющие:

Нет центрального сервера

В наши дни популярными объектами p2p являются ботнеты, которые имеют серверы C & C и используют HTTPтоже.Они склонны использовать DNS, используя какой-то алгоритм для генерации доменных имен.Вам нужно что-то, чтобы начать / запустить процесс, иначе платформа p2p не запустится.Эволюция может быть осуществлена ​​путем распространения, то есть одноранговые узлы могут получить начальный список из центрального местоположения, а затем создать DHT, когда они узнают больше из запросов других одноранговых узлов (то есть получить больше ответов).

Для сети p2p без центрального сервера вы можете выполнить сканирование локальной сети или использовать реализацию протоколов zeroconf, таких как SSPD .Здесь есть ограничение: вы не можете выйти за пределы своей локальной сети.Например, скажем, вы хотите многоадресную рассылку за пределы вашей локальной сети, какие IP / диапазоны вы собираетесь пытаться достичь?

Отправка сообщений всем одноранговым узлам

Гарантии нетчтобы это было успешным, потому что вы не знаете в данный момент, какие одноранговые узлы активны, и ни у одного однорангового узла нет полной копии DHT.Наводнение - вообще способ, которым это достигнуто.Вы можете принять стратегию query flooding , но не ожидайте ответ.Вы можете использовать ту же стратегию для поиска, где вы действительно хотите получить ответ.В случае, если вы хотите достичь, скажем, только последних 5 уровней, вы просто включаете счетчик с хешем / идентификатором, который равняются равным перед распространением сообщения, и останавливаются, когда счетчик достигает 0.

Большое препятствиес этим проектом есть NAT.Таким образом, не только узлы должны знать друг друга внешний IP и порт.Если вы находитесь в локальной сети, это не большая проблема.

...