Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Делаем аналог DHT или поиск узлов без знания IP адреса

Пытаюсь решить задачу создания децентрализованного сервиса обмена сообщениями, аналог TOX. Задача, найти два узла в интернете и установить соединение. Пока в голову пришла лишь такая мысль. Возьмем абстрактную схему треугольника или трех узлов в сети. Каждый клиент будет состоять из двух потоков ввода и вывода. Вывод будет осуществлять флуд запрос в сеть на диапазон всего интернета, пока не будет найден первый узел(не уверен правильно ли это, но других мыслей в голову не пришло). Также в каждом клиенте будет закрытый ключ и его хэш, который собственно будет выполнять функцию открытого ключа. Схема представляется следующая. Первый узел узнает открытый ключ второго узла(почта или еще как-то) и начинает флуд запрос в интернет на заранее определенный порт методом перебора ип адресов, пытаясь установить соединение, путем пересылки открытого ключа второго узла. Понятно дело что не true узлы не будут отвечать на такой запрос. Как только запрос дойдет до нужного узла, а клиент будет слушать заранее определенный порт, то он примет пакет от первого узла, распарсит его и сравнит хэш своего ключа с тем что пришло ему на вход. И если кэш тот, то занесет ип адрес первого клиента и его открытый ключ к себе в базу(планирую использовать mongo). Когда соединение установится то база данных обновится и на первом клиенте по принципу репликации. Тоесть теперь два узла знают друг о друге. Если третий узел захочет соединиться с каким то из узлов, то ему достаточно будет найти любой из узлов и заглянуть к ним в базу, чтобы найти по нужному хэшу нужный узел(ип адрес). Таким образом сеть будет расти. Это базовая архитектура и я еще нуб в таких вопросах.
Это то что пришло мне в голову. Возможно есть какие-то другие алгоритмы, более правильные. Подскажите пожалуйста.


Ответ

На хабре есть хороше базовое описание, как работет tox - Распределенная природа мессенджера Tox. Для затравки хватит. Потом, можно посмотреть, как устроит raft - если сеть небольшая, то вполне можно его использовать.
И раз в вопросе звучит "dht" - добавлю ещё пару ссылок - small dht и opendht

Комментариев нет:

Отправить комментарий