2017-01-28 24 views
1

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

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

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

+0

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

+0

О, я имею в виду приложение. Подумайте о мобильной игре. Я хочу, чтобы пользователи могли транслировать свои ходы без участия центрального сервера. – MaiaVictor

+0

Теперь я смущен. Вы имеете в виду, что хотите одноадресные пакеты только для игроков? Широковещательная передача отправляется каждому хосту в локальной сети. Одноадресная рассылка отправляется на конкретный хост, а групповая передача отправляется группе хостов, которые подписались на группу многоадресной рассылки. Похоже, вы можете использовать многоадресную рассылку, тогда каждый хост-проигрыватель будет прослушивать пакеты, отправленные в группу многоадресной рассылки, и он не будет беспокоить других хостов в локальной сети. –

ответ

2

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

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

+0

Я рад слышать, что это довольно просто, но есть некоторые осложнения, которые мне не очевидны. Вы имеете в виду случайную таблицу маршрутизации; как именно? Как каждый узел хранит список одноранговых узлов? Для этого исходные «узлы ввода» должны иметь список всех узлов, нет? Если у вас есть ссылка/ключевое слово, которое было бы полезно. В любом случае, спасибо за ответ! – MaiaVictor

+0

полезных ключевых слов для поиска в google ученого (можно объединить в некоторой степени): «наложенная сеть», «структурированная накладка», «маленький мир», «таблица маршрутизации», «список соседей», «загрузочный» ... вообще бутстрапирование и обслуживание таблицы маршрутизации - отдельная проблема распространения сообщений. вам нужно построить свои алгоритмы p2p по частям. – the8472

4

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

Некоторые из проблем P2P конструкций:

  • маршрутизаторы NAT и межсетевых экранов: преодолеть путем внедрения NAT Traversal и UDP перфорирования (см The State of NAT Traversal по ZeroTier)
  • Открываем сверстники: Dat Project использует Gossiping как эффективный способ для рой сверстников найти друг друга в сети и простой протокол протокола protobuf для связи (см.: Hyperdiscovery и Hypercore Protocol).
  • связи P2P данных/синхронизации: HyperCore реализует добавление только входит в систему каждого однорангового узла, и Меркл деревья для объединения и дедуплицирующие куски данных из других узлов в правильном порядке

Оба TCP, UDP, WebRTC и BittorrentDHT поддерживаются Dat Project.

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

+0

Я просто добавил дополнительную информацию о жизнеспособных технологиях p2p и использовал Dat Project в децентрализованном видеоприложении на мобильном устройстве: [A/P2p видео/аудио-чат на Android-телефоне с использованием WebView] (https://stackoverflow.com/a/45476871/8295283) –