Pull to refresh

Distributed Network Messaging Protocol — хорошо забытый FTN

Reading time 4 min
Views 3.5K
Жила-была технология FTN aka FidoNet. Она и сейчас живет где-то на пыльных системниках, но когда интернеты в России были маленькими, это была весьма популярная технология обмена сообщениями.

Короче говоря, я решил скрестить технологии FTN и IRC, но при этом автоматизировать все возможные настройки, сведя участие рядового пользователя к указанию стартового узла для подключения, а оператора узла к подтверждению приема подключившегося в сеть. Все остальное делает компьютер. При этом никаких паролей, никаких таблиц маршрутизации, списков узлов и прочего гимора. Вернее, можно и вручную настроить, но не обязательно.

Схема сети



Для этого пришлось придумать новый протокол обмена сообщениями в распределенной сети — DNMP, который позволяет строить распределенные сети обмена информацией, обладающими следующими особенностями:

— В сети два вида участников: клиенты и узлы. Узлы образуют между собой сеть и предоставляют различные сервисы. Клиенты подключаются к узлам.

— Сеть децентрализована, в ней нет единого центрального узла. Каждый узел сети полностью автономен и независим.

— Автоматическая маршрутизация сообщений между узлами одного сегмента на основании данных о доступности других узлов.

— Сообщения содержат список узлов, через которые они прошли.

— Некоторые виды сообщений должны храниться на конечном узле и могут быть востребованы клиентом этого узла.

— Протокол не привязан к какой-либо аппаратной или программной реализации канала связи. Может использоваться любой способ передачи данных пакетами от 80 байт до 4Гбайт.

Был разработан формат сетевого сообщения (пакета данных), позволяющий передавать информацию любого типа и сложности, и при этом быть простым и удобным. Сетевое сообщение состоит из заголовка, секции параметров и секции данных. Заголовок содержит тип сообщения, адреса отправителя и получателя, таймштамп. Секция параметров содержит произвольные текстовые параметры в виде имя=значение. Секция данных хранит произвольные данные. При прохождении через несколько узлов в конец сообщения добавляются синбаи — идентификаторы пройденых узлов.

Схема сетевого пакета

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

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

Все это на сегодняшний день хорошо документировано и реализовано в виде «испытательного стенда». По сути, реализованный функционал аналогичен протоколу Jabber, но при этом на порядок более экономичен по траффику и эффективен при маршрутизации и парсинге. А функционал сетевой подсистемы близок к Skype.

Аббревиатура DNMP трудна для запоминания и произношения, поэтому технология получила название Talaria — это такие крылатые сандалии у древнегреческих богов.

До этого было рабочее название Grouper (Групер, Каменный окунь). Grouper — оно как бы символизирует. Кроме того, каменный окунь может быть гермафродитом, что схоже с идеологией совмещенного клиента и сервера. И вообще, прикольная рыба. Но, оказалось, что это название уже используется другими сетевыми проектами. Поэтому технология переименована в Talaria, а испытательный стенд я не стал переименовывать.

Но это еще не все! Есть документированные, но еще не реализованные возможности:

Внутри сети у клиента имеется паспорт — набор сведений клиента, который мигрирует между узлами, если клиент подключается к другому узлу. Паспорт содержит как основные сведения о клиенте (адрес, GUID, имя), так и дополнительные (произвольная информация, список контактов, подписки на сервисы, неполученые сообщения.

Для регулирования сети служит система объективных и субъективных рейтингов. Объективные рейтинги составляются автоматически и отражают скорость передачи и обработки данных, уровень ошибок связи, нарушения стандартов. Субъективный рейтинг выставляется вручную. Участники с низким рейтингом ограничены в возможностях, вплоть до полного исключения из сети. Приоритет сетевых сообщений определяется типом сообщения и правилами маршрутизации на узле.

Коммерческая версия протокола с улучшенной защитой, включает в себя:
— Защищенный вариант сетевого пакета — с расширенным таймштампом, контрольной суммой, цифровой подписью, сжатием и шифрованием содержимого, подтверждением доставки.
— Более строгая валидация узлов и точек, отдельные наборы ключей для каждой пары узлов, централизованное управление сетью.

Документация по проекту (CHM):
irchat.ru/page.php?id=105&a=dl

Исходники на трекере проекта:
svn.irchat.ru/browser/trunk/Grouper

Проект разрабатывается на Delphi 7 с использованием мультиплатформенных библиотек и компонентов, может быть легко перенесен в Lasarus/FreePascal. Можно и на C/C++ переписать, но я буду очень скучать без VCL.

Любопытные могут скачать работающую тестовую версию из папки с исходниками и поэкспериментировать. Вот какие файлы нужны:

*.exe - точка (клиент), узел (сервер), монитор
*.bat - для запуска с разными настройками
/data/*.* - папка с настройками

Небольшая инструкция по пользованию Grouper:
irchat.ru/forums.php?m=posts&q=77
Tags:
Hubs:
+28
Comments 76
Comments Comments 76

Articles