Каков современный уровень реализации сети широковещательной передачи сообщений p2p?

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

Я пытаюсь реализовать сеть p2p через Интернет с единственной и одной функцией передачи сообщений на онлайн-узлы. Чтобы подключиться к сети, вы должны иметь возможность указывать на существующие IP-адреса. Когда вы это сделаете, вы обнаружите несколько пиров и будете поддерживать с ними активную связь. Затем вы можете отправлять сообщения на любой другой узел. Прямого общения нет, каждое отправленное сообщение получают все остальные. Я хочу, чтобы эта сеть была максимально производительной и работала поверх UDP.

Как называются некоторые современные алгоритмы для решения этой проблемы на указанной здесь форме?


person MaiaVictor    schedule 28.01.2017    source источник
comment
Если вы выполняете широковещательную рассылку, то вы попадаете на каждый хост в локальной сети, не зная отдельных IP-адресов.   -  person Ron Maupin    schedule 28.01.2017
comment
О, я имею в виду для приложения. Подумайте о мобильной игре. Я хочу, чтобы пользователи могли транслировать свои ходы без привлечения центрального сервера.   -  person MaiaVictor    schedule 28.01.2017
comment
Теперь я в замешательстве. Вы имеете в виду, что хотите рассылать пакеты только игрокам? Широковещательная рассылка отправляется на каждый хост в локальной сети. Одноадресная рассылка отправляется на определенный хост, а многоадресная рассылка отправляется группе хостов, которые подписались на группу многоадресной рассылки. Похоже, вы можете захотеть использовать многоадресную рассылку, тогда каждый хост игрока будет прослушивать пакеты, отправленные в группу (группы) многоадресной рассылки, и это не будет беспокоить другие хосты в локальной сети.   -  person Ron Maupin    schedule 28.01.2017
comment
Возможно, мы говорим о разных вещах из-за терминологии. Я мало что знаю о сети (поэтому этот вопрос), все, что я знаю, это проблема, которую я пытаюсь решить. Я хочу создать приложение, которое при открытии будет подключаться к сети компьютеров, на которых запущено одно и то же приложение. Затем он сможет отправлять сообщения, которые получит любой другой узел — это то, что я называю широковещательным. Я говорю о высокоуровневых требованиях к моему приложению (передача сообщений, отсутствие центрального сервера, который мне нужно обслуживать/оплачивать — подумайте об игре), и запрашиваю ключевые слова/ресурсы для начала поиска решений. ЛАН нет.   -  person MaiaVictor    schedule 28.01.2017
comment
И я дал вам кое-что из этого. Если вы хотите сделать это как группа, правильной терминологией является многоадресная рассылка. Ваше приложение должно присоединиться к группе многоадресной рассылки, и оно может отправлять и получать сообщения в группе многоадресной рассылки, не беспокоя другие хосты, которые не участвуют в группе многоадресной рассылки. Многоадресная рассылка — это выборочная форма широковещательной рассылки. Широковещательная передача будет прерываться, каждый хост должен обрабатывать сообщения. В многоадресной рассылке вы прерываете только хосты, подписанные на группу многоадресной рассылки. Это позволяет избежать необходимости в центральном сервере, но вы также можете использовать центральный сервер, если хотите.   -  person Ron Maupin    schedule 28.01.2017
comment
Теперь, когда вы добавили требование, чтобы это работало через Интернет, вы удалили возможность использования широковещательной или многоадресной рассылки, поскольку ни один из них не работает в Интернете. Вам понадобится центральный сервер для таких вещей, как регистрация.   -  person Ron Maupin    schedule 28.01.2017


Ответы (2)


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

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

person the8472    schedule 29.01.2017
comment
Я рад слышать, что это довольно просто, но есть некоторые сложности, которые для меня не очевидны. Вы имеете в виду случайную таблицу маршрутизации; как именно? Как каждый узел хранит список пиров? Для этого начальные узлы входа должны иметь список всех узлов, не так ли? Если у вас есть ссылка/ключевое слово, это было бы полезно. В любом случае спасибо за ответ! - person MaiaVictor; 29.01.2017
comment
полезные ключевые слова, которые можно вбить в гугл стипендиат (можно в какой-то степени комбинировать): оверлейная сеть, структурированный оверлей, маленький мир, таблица маршрутизации, список соседей, начальная загрузка... в общем, начальная загрузка и обслуживание таблицы маршрутизации - это отдельная проблема от распространения сообщений. вам нужно строить свои алгоритмы p2p по частям. - person the8472; 29.01.2017
comment
› как именно? -- Вот простая реализация широковещательной сети p2p на Node.js: /а> - person Will; 04.12.2018

Если вы хотите узнать о принципах настройки децентрализованной архитектуры P2P, вы можете обратиться к Dat Foundation, который предоставить экосистему модулей для обмена данными P2P через Интернет, например Hypercore (необработанные потоки P2P) и Hyperdrive (передача файлов поверх Hypercore). У них есть хорошая документация по техническим концепциям, проблемам и способам их решения.

Некоторые из проблем в проектах P2P:

  • Маршрутизаторы и брандмауэры NAT: преодоление за счет внедрения NAT Traversal и перфорации UDP (см.: Состояние обхода NAT от ZeroTier)
  • Обнаружение пиров: Dat Project использует сплетни как эффективный способ для роя пиров найти друг друга в сети, а также простой (протобуф) проводной протокол для связи (см. : Hyperdiscovery и Протокол Hypercore).
  • Передача/синхронизация данных P2P: Hypercore реализует журналы только для добавления на каждом узле и деревья Меркла для агрегирования и дедупликации фрагментов данных от других узлов в правильном порядке.

Dat Project поддерживает как TCP, UDP, WebRTC, так и BittorrentDHT.

Пожалуйста, ознакомьтесь с некоторыми документами по их спецификациям для получения подробной информации об этих концепциях и дизайне протокола:

person Arnold Schrijver    schedule 29.07.2017
comment
Я только что добавил дополнительную информацию о жизнеспособных технологиях p2p и использовании Dat Project в децентрализованном видеоприложении для мобильных устройств: A: p2p-видео/аудиочат на Android с помощью WebView - person Arnold Schrijver; 03.08.2017
comment
Привет, интересно читать, особенно интересно было прочитать статью ZeroTier (хотя я думаю, что почти любой, кому когда-либо приходилось проектировать сеть P2P, не очень любит работать с NAT). Не могли бы вы обновить ссылку на Dats Github? они кажутся сломанными @Arnold Schrijver - person j3141592653589793238; 23.11.2020
comment
Привет @ j3141592653589793238 извините за опоздание, но ответ обновлен :) - person Arnold Schrijver; 12.01.2021