- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll - stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close - utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP), add deferred drain in both Phase J and L - stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39, exchange ed25519_pubkey in both handshake directions - etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb - chat_sync.c: fix lk->conn NULL dereference for TCP links - test_stcp.c: update stcp_server_create/stcp_client_connect callsites - tools/chat_tcp_test: change transport udp→tcp
30 lines
3.7 KiB
Markdown
30 lines
3.7 KiB
Markdown
UTUN
|
|
|
|
Идея: объединить узлы в единую локальную сеть.
|
|
Чтобы узлы сами находили оптимальные линки между собой, пробивали NAT где это можно, где нельзя - выбирали посредника с хорошей связью; чтобы подсто было добавлять новые узлы и адреса узлов сразу виделись во всей сети.
|
|
|
|
Похож на libp2p но трафик превращает в случайную последовательность кторую сложно классифицировать
|
|
|
|
Потенциальные варианты использования:
|
|
- локальная сеть. хочу объединить офис, сотрудников (включая их работчие подсети), телефоны, офисы, сервер доступа итд в одно адресное пространство.
|
|
- чат с файлообменником. узлы сети - это мемберы группы и одновременно сети.
|
|
- CDN. узлы - потребители контента - это мемберы сети, которые распространяют трафик.
|
|
|
|
То есть задача utun - обеспечить связность группы узлов и адаптацию работы всей сети к подключению-отключении отдельных узлов.
|
|
|
|
Механизмы:
|
|
1. Пробитие nat.
|
|
2. автообновление списка узлов и их адресов для подключения
|
|
3. шифрование трафика и маскировка handshake.
|
|
handshake просиходит без сигнатур по которым можно опреедлить тип сервиса, весь трафик выглядлит как случайный набор байт случайного размера
|
|
4. многоканальные подключения, агрегирование каналов, исключение мёртвых каналов
|
|
подключиться к узлу можно через несколько линков. UTUN будет объединять пропускную способность каналов, наблюдая за состоянием каналов, не допуская перегрузки и обеспечивая быстрые переповторы через другие каналы при потерях или большой задержке.
|
|
5. динамическая маршрутизация. Узлы могут назначать себе IP адреса и при подключении к сети анонсировать свои адреса/подсети.
|
|
это максимально упрощает добавление нового узла в сеть.
|
|
6. автоматический роутинг между узлами: узлы маршрутизируют трафик между собой.
|
|
используя статические подключения, прописанные в конфиге.
|
|
7. прямые подключения и поиск лучших подключений
|
|
узлы могут подключаться друг к другу напрямую, либо если оба узла за строгим NAT - выбирать оптимального посредника.
|
|
Узлы определяют свой тип подключения и NAT. Например у ростелеком - EIM NAT который можно использовать и для входящих подклюений.
|
|
Можно использовать IPv6.
|