7817bb96aa2af7af541eda514814526cac6af1c0
Раньше START ставился один раз при первой отправке и терялся в ретрансмите, а принимающая сторона молча авто-синкала rx_seq на любой первый пакет — после рестарта пира/среднего узла seq рассинхронизировались (тихий data loss или no-ACK close). Теперь: - Клиент: флаг start_sent «новый» до первого ACK; пока он стоит, первый seq (0) шлётся со START, включая ретрансмит. Первый принятый ACK (tx_acked>0) сбрасывает флаг. При рестарте conn флаг снова «новый». - Сервер: после рестарта peer_sync_done=0 («ждёт START»). Не-START пакет → отправка RST (через recv_conn). START → синк rx_seq + ACK → обычный режим. - RST на принимающей стороне теперь сбрасывает локальное состояние (etcp_router_conn_restart), а не закрывает conn. Тесты unit обновлены: первый data-пакет сессии инжектится со START.
whisper: опциональный configure --with-whisper; chatgui: парсер [debug]; stdint.h в AC_CHECK_HEADERS
UTUN
Идея: объединить узлы в единую локальную сеть. Чтобы узлы сами находили оптимальные линки между собой, пробивали NAT где это можно, где нельзя - выбирали посредника с хорошей связью; чтобы подсто было добавлять новые узлы и адреса узлов сразу виделись во всей сети.
Похож на libp2p но трафик превращает в случайную последовательность кторую сложно классифицировать
Потенциальные варианты использования:
- локальная сеть. хочу объединить офис, сотрудников (включая их работчие подсети), телефоны, офисы, сервер доступа итд в одно адресное пространство.
- чат с файлообменником. узлы сети - это мемберы группы и одновременно сети.
- CDN. узлы - потребители контента - это мемберы сети, которые распространяют трафик.
То есть задача utun - обеспечить связность группы узлов и адаптацию работы всей сети к подключению-отключении отдельных узлов.
Механизмы:
- Пробитие nat.
- автообновление списка узлов и их адресов для подключения
- шифрование трафика и маскировка handshake. handshake просиходит без сигнатур по которым можно опреедлить тип сервиса, весь трафик выглядлит как случайный набор байт случайного размера
- многоканальные подключения, агрегирование каналов, исключение мёртвых каналов подключиться к узлу можно через несколько линков. UTUN будет объединять пропускную способность каналов, наблюдая за состоянием каналов, не допуская перегрузки и обеспечивая быстрые переповторы через другие каналы при потерях или большой задержке.
- динамическая маршрутизация. Узлы могут назначать себе IP адреса и при подключении к сети анонсировать свои адреса/подсети. это максимально упрощает добавление нового узла в сеть.
- автоматический роутинг между узлами: узлы маршрутизируют трафик между собой. используя статические подключения, прописанные в конфиге.
- прямые подключения и поиск лучших подключений узлы могут подключаться друг к другу напрямую, либо если оба узла за строгим NAT - выбирать оптимального посредника. Узлы определяют свой тип подключения и NAT. Например у ростелеком - EIM NAT который можно использовать и для входящих подклюений. Можно использовать IPv6.
Languages
C
83.5%
C++
12%
Kotlin
3.2%
Python
0.4%
Shell
0.3%
Other
0.4%