Nex (протокол)

Минималистичный сетевой протокол семейства Gopher / Gemini для обмена преимущественно текстовыми файлами.

От последнего отличается отсутствием:

  • внешних и внутренних редиректов
  • статус-кодов и других заголовков - MIME тип документа определяется расширением файла (по-умолчанию text/plain)
  • разметки, за исключением кликабельных ссылок, в формате => url/uri [alt]
  • обязательной сертификации TLS, следовательно - привязки к домену посредством CN/SNI, что выгодно при использовании классической адресации 0200::/7 в Yggdrasil, где передаваемый трафик уже зашифрован а DNS - зачастую не используется

Спецификация

NEX

Сервер принимает подключения посредством TCP на порту 1900 и в зависимости от наличия слеша в конце пути запроса, возвращает либо директорию либо текстовый или бинарный файл.

Пример запроса:

telnet nightfall.city 1900
nex

Подробнее:

nex://nightfall.city/nex/info/specification.txt

NPS

Протокол отправки данных по типу Titan для Gemini, по-умолчанию используется порт 1915.

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

Пример запроса:

nc nightfall.city 1915
classifieds
YOUR MESSAGE GOES HERE
.

где строки:

  1. установка соединения посредством синтаксиса netcat
  2. целевой ресурс на сервере - в данном случае, аргумент указывает URI classifieds
  3. тело сообщения, можно указать несколько строк
  4. единственная точка в новой строке - завершает отправку, в содержимое сообщения данным сервером не добавляется

Текст из файла

file.txt
classifieds
╦ ╦╔═╗╔═╗╔╦╗╦═╗╔═╗╔═╗╦╦  
╚╦╝║ ╦║ ╦ ║║╠╦╝╠═╣╚═╗║║  
 ╩ ╚═╝╚═╝═╩╝╩╚═╩ ╩╚═╝╩╩═╝
.
cat file.txt | nc nightfall.city 1915

Посмотреть отправленное сообщение можно по адресу:

nex://nightfall.city/classifieds/

Также появился внутрисетевой сервер отправки сообщений KevaChat, работает подобным образом:

nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915
  • В некоторых дистрибутивах для поддержки IPv6 в nc может потребоваться установка пакета netcat-openbsd
  • IPv6 также поддерживается утилитами telnet и ncat (вместо nc), ncat лучше работает с кириллицей
  • Для работы с кириллицей в терминале (на что собственно и ориентирован протокол), важно также убедиться в наличии поддержки окружением кодировки ввода UTF-8 (установить можно командой stty iutf8 в ~/.bashrc)

Спецификация:

nex://nightfall.city/nps/info/specification.txt

Программное обеспечение

Клиент

GUI

  • Lagrange (C) - браузер для различных smallnet протоколов, включая nex

CLI

Сервер

  • nexd - очень простой сервер на Go для публикации статики на 1900 порту, по-умолчанию открывает файлы с названием «index» (репозиторий mercurial)
  • next - сервер на PHP с множеством настроек
  • kinex - проксирующий сервер на Go для публикации статики на 8080 порту, также добавляет разметку HTML

Библиотеки

  • nex-php, nps-php - PHP 8 / Composer библиотеки для разработки веб-приложений
  • Ratchet - универсальная библиотека PHP 8 / Composer для разработки асинхронных серверов

Проксирование

В виду простоты протокола, передаваемые данные легко проксируются любым сервером, поддерживающим маршрутизацию потоков TCP

Nginx

/etc/nginx/nginx.conf
stream {
        server {
                listen 1915;
                proxy_pass [IP]:1915;
        }
}

Внутрисетевые ресурсы

  • nex://[301:23b4:991a:634d::1900]/index.gmi - блог проекта YGGverse в формате gemtext
  • nex://[301:23b4:991a:634d::feed]/index.gmi - агрегатор лент RSS на базе движка с открытым кодом Pulsar
  • nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915 - NPS сервер KevaChat

Ссылки

Только авторизованные участники могут оставлять комментарии.
nex_protocol.txt · Последнее изменение: 2024/05/08 16:48 — d4708
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki