Nп/п : 59 из 75
От : Nil A 2:5015/46 26 фев 26 22:55:32
К : Andrei Kopanchuk 26 фев 26 23:23:01
Тема : Fidonet-over-ax25
----------------------------------------------------------------------------------
@MSGID: 2:5015/46 69a0ab94
@REPLY: 2:5058/108.2 698cda9e
@CHRS: CP866 2
@TZUTC: 0300
@TID: hpt/lnx 1.9
Hello, Andrei!
Wednesday February 11 2026 21:13, from Andrei Kopanchuk -> Sergey Anokhin:
SA>> А ты ведь как то оптимизировал binkp для работы по радиоканалу?
AK> Его сильно не оптимизируешь, разве что уменьшить размеры
AK> файлов/блоков, хотя там еще были кое-какие флаги, для докачки,
AK> ожидания передачи файла и подобное, но он все же работает сразу в два
AK> направления, т.е. больше подходит для дуплексных каналов.
AK> Если хочется качественно, то лучше брать за основу симплексные
AK> протоколы, такие как FBB.
Я тут поболтал с Чатовым (chatgpt/gemini/..) на эту тему - умный
чел (в смысле бот).
Во-первых, для тестов можно погонять AX.25 между двумя линуксами,
просто в виртуалках, и звуковуху виртуальную пробросить по IP, либо через
PulseAudio Networking, либо ALSA c snd_aloop + JACK, т.е. вообще в песочнице.
Для контроля звук можно ещё зароутить на хост, и послушать через
звуковуху, или в анализатор.
Во-вторых, точно выкинуть AX25 + TCP/IP + Binkd - это просто огроменный оверхед.
В-третьих, тогда уж использовать модемный EMSI/ZModem протокол, через
stdin/stdout как-то запустить qico или ifcico - тогда оверхед
радио<->ax25_сессия<->EMSI... но дричканий RX/TX будет дофигища тоже. Короче, так тоже лучше не
делать.
Правильный способ - из ax.25 использовать не Connected Mode, а UI
Frames (Unnumbered Information), и пакеты, подтверждение, ретрансляция - это
всё самому из своего протокола контролировать.
По факту, надо написать свой мейлер, или добавить "новый протокол" в
Binkd, который откроет сокет `socket(AF_AX25, SOCK_DGRAM, 0);`, почти как UDP
получается. Взять библиотечку libax25, подготовить позывной `ax25_aton("N0CALL-1",
&addr.fsa_ax25.sax25_call);`, добавить некий HELLO в стиле FTN, тут же какие у нас есть бандлы
и пр, и всё это отправить одним `sendto(fd, buffer, len, ...`, а на
приёмной стороне принять `recvfrom(fd, buffer, sizeof(buffer), ...`. Понятно,
что paclen типа 128 байт дефолт, но можно увеличить, например на 256 -
на 1200 это будет в эфире 2 секунды. Без подтверждения приёма, можно,
например, 7 пакетов отправлять. Присылать только какие фрагменты не прошли.
Короче, прямо по самому минимуму приём/передача, и сразу в первом же пакете
и сессия, и аутентификация, и данные, и поехали.
Протокол можно сделать также парольным и не парольным, всё в
фидошном стиле. Парольную сессию можно делать в открытом виде, но с подписью
пакетов по hmac, или вообще целиком отправки шифровать (но тогда нарушается
правила HAM например). Отдельно обмениваться ключами, или каким-то парольным
челленджем как в бинкп - не надо, т.к. это долго, много переключений TX/RX. У
нас есть пароль у обоих сторон, можно сделать Pre-Shared Key (PSK) на
его основе, если время и соль замешать ещё - часы на обоих компах
должны быть плюс/минус минуты одинаковые. Фсё! Если нет почты - один пакет
туда, один обратно. Если есть pkt, то несколько пакетов туда, и один
обратно, и всё парольное, или даже зашифрованное.
Всё сводится к разработке собственного протокола, и собственного
мейлера, который Binkley-style outbound умеет читать. Собственный протокол
сначала можно опробовать на UDP, заодно ещё один протокол появится :-) потом
на AX.25 сокет просто перевести, с настройками размера покета, таймаута,
и пр.
Best Regards, Nil
--- GoldED+/LNX 1.1.5-b20250409
* Origin: Gemini can make mistakes, so double-check it (2:5015/46)
SEEN-BY: 50/109 301/1 341/66 450/1024 463/68 4500/1
5000/111 5015/42 46 120
SEEN-BY: 5015/255 5019/40 5020/113 545 715 830 846
848 1042 4441 12000
SEEN-BY: 5022/128 5030/49 115 1081 1474 5049/1
5053/51 58 5058/104 5060/900
SEEN-BY: 5061/133 5083/1 444 6035/66 6078/80
@PATH: 5015/46 5020/1042 4441