Протокол NEX - легка альтернатива Gemini

6 хв. читання

Останнім часом стало поширеним явище інтеграції TLS навіть там, де використання цієї технології може бути зайвим.

Сьогодні майже кожна програма включає в себе параноїдальні пресети безпеки з коробки, через які результуючий трафік часто шифрується в декілька шарів, тим само створюючи часові затримки на handshake і вичерпуючи заряд мобільних акумуляторів при передачі великих об'ємів даних.

Звісно, протокол Gemini - не про великий трафік. Тим не менше, хотілось би поділитись його спрощеною альтернативою - NEX, яка може згодитись деяким гікам, зокрема - в альтернативних мережах Onion та Yggdrasil, де канальний трафік між двома підключеннями вже зашифрований а використання класичного DNS вважається поганим тоном.

Архітектура

NEX - це мережний протокол прикладного рівня, сімейства Gopher / Gemini.

Окрім відсутності характерних для Gemini вимог шифрування, протокол також зручний для прямих підключень по IP без використання DNS та SNI. Не потрібно генерувати сертифікати, слідкувати за їх актуалізацією та вигадувати костилі для Certbot.

Подібно до Gemini, взаємодія між клієнтом і сервером відбувається шляхом надсилання пакету через сокет. Для ідентифікації типу підключення клієнтом використовується схема nex://, а замість порту 1965 стандартним є 1900.

NEX не містить жодних мета заголовків: переадресацій, кодів статусів, MIME типів та іншого. Тим не менше, він підтримує і дозволяє працювати з різними типами даних, включно з Gemtext і медіа форматами.

Ось кілька простих правил з документації:

  • формат файлу визначається клієнтом (браузером) за його розширенням у назві
  • якщо розширення не вказано, клієнт буде інтерпретувати документ як text/plain
  • якщо адреса закінчується слешем, таку адресу прийнято вважати директорією

Специфікація протоколу не декларує власного типу даних і розмітки за виключенням синтаксису посилань, формат яких подібний до Gemtext - тобто посилання можна робити клікабельними, використовуючи префікс => в text/plain.

Клієнти

Протокол NEX є поширеним і давно відомим в середовищі Geminispace - такий популярний браузер як Lagrange підтримує його з коробки, тому не потрібно шукати додаткових рішень для GUI чи змінювати улюблений клієнт.

Говорячи про CLI, на мою думку, NEX є зручнішим і більше орієнтованим для користувачів саме командного рядка: для взаємодії можна використовувати такі базові утиліти як telnet, nc, ncat тощо:

telnet nightfall.city 1900
nex

NPS

Подібно Titan для Gemini, NPS є сателітом для відправки даних на сервер - для NEX.

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

Стандартним для NPS є порт 1915.

В залежності від реалізації та специфіки конкретного сервера, клієнт може відправляти команди і типи даних в порядку що відрізняється і так, як задумано автором конкретного сервісу.

Зокрема, сервіс чату в блокчейн KevaChat NPS (приклад реалізації на PHP з використанням асинхронної бібліотеки Ratchet) - вимагає на першому кроці введення ASCII каптчі, вибору кімнати і вже потім - безпосередньо відбувається надсилання текстового повідомлення.

Кожен сервер має власний гайд в режимі CLI, та як правило посилання на документацію.

Характерною рисою NPS є одна крапка в останньому рядку повідомлення, яка також сигналізує кінець з'єднання.

Приклади

Розберемо приклад надсилання оголошення на сервіс classifieds серверу nightfall.city

nc nightfall.city 1915
classifieds
YOUR MESSAGE GOES HERE
.

Якщо коротко розібрати команди:

  • першим кроком відбувається підключення до серверу по DNS чи IP на 1915 порт
  • далі слідує вибір URI ресурсу, у даному випадку classifieds
  • після цього надсилається тіло повідомлення по одному рядку
  • якщо рядок містить тільки крапку - пакет вважається надісланим

Згідно такому принципу, можна надсилати і багато-рядкові дані з певного файлу:

створимо file.txt з наступним вмістом:

classifieds
      ___                 
     /\__\          ___   
    /:/  /         /\  \  
   /:/__/          \:\  \ 
  /::\  \ ___      /::\__\
 /:/\:\  /\__\  __/:/\/__/
 \/__\:\/:/  / /\/:/  /   
      \::/  /  \::/__/    
      /:/  /    \:\__\    
     /:/  /      \/__/    
     \/__/                
.

тепер надішлемо його на сервер nightfall.city, до розділу classifieds (що вказаний у першому рядку) за допомогою утиліти cat

cat file.txt | nc nightfall.city 1915
  • сервер у прикладі не є тестовим, експериментуючи дотримуйтесь мережної етики і змістовності повідомлень
  • для коректної роботи nc в середовищі IPv6, можливо доведеться встановити пакет netcat-openbsd
  • варто зауважити, що деякі емулятори терміналу (наприклад, Tilda) можуть некоректно обробляти кириличні символи командою backspace, через відсутність підтримки мультибайтового UTF-8. Виправити це можна зміною емулятора або спробувавши вказати stty iutf8 в ~/.bashrc

Проксі

Потокові дані легко проксуються через сервер Nginx, простий приклад з nginx.conf:

stream {
        server {
                listen 1915;
                proxy_pass [IP]:1915;
        }
}

Висновки

Протокол NEX - це окремий різновид взаємодії та спілкування у мережі. Його переваги здебільшого стають зрозумілими після досвіду роботи з Gemini, який не дивлячись на лаконічність, все ж має ряд особливостей, які у певних випадках бувають зайві.

Якщо ви знаєте цікаві ресурси, доступні у форматах NEX/NPS, поділіться в коментарях!

Посилання

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
p.s. 564
Приєднався: 4 місяці тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація