todo/protocols/tuic.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

98 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-07-25
tags:
- протоколы
- tuic
- quic
- udp
- обход-блокировок
aliases:
- TUIC
- TUIC v5
- TUIC протокол
link: https://github.com/tuic-protocol/tuic
---
# 🚄 TUIC: QUIC-прокси с нулевой задержкой на переподключении
> [!info] О чём заметка
> Разбор протокола **TUIC** — прокси поверх QUIC, спроектированного вокруг быстрого установления соединения (0-RTT) и честной работы с UDP. Здесь: как он устроен, чем отличается от [[Hysteria/00-overview|Hysteria 2]], в чём разница версий v4 и v5, какие режимы UDP-релея бывают и в каком состоянии находится проект. Карта протоколов — в [[protocols/00-overview|обзоре]].
## TL;DR
- TUIC — прокси поверх **QUIC**: транспорт работает по UDP, шифрование берётся из TLS 1.3, несколько потоков мультиплексируются в одном соединении.
- Главная особенность — **0-RTT при возобновлении сессии**: повторное подключение к знакомому серверу не требует полного рукопожатия, и восстановление занимает доли миллисекунды вместо сотен.
- **UDP проксируется по-настоящему**, а не эмуляцией поверх TCP: поддерживается Full Cone NAT, что важно для игр, голосовой связи и P2P.
- Два режима UDP-релея: **`native`** (через QUIC-датаграммы, быстро, но пакет ограничен размером датаграммы) и **`quic`** (через потоки, надёжно, но с накладными расходами).
- В **v5** появился отдельный пароль пользователя; конфиги v4 и v5 несовместимы — это частая причина «всё введено верно, но не подключается».
- Оригинальный репозиторий попал в волну архиваций ноября 2023 года; протокол живёт прежде всего в реализациях универсальных ядер — [[Clash/02-mihomo|mihomo]], [[sing-box/sing-box-extended|sing-box]].
## Зачем понадобился ещё один QUIC-протокол
К моменту появления TUIC у обхода блокировок уже был набор TCP-протоколов ([[protocols/trojan|Trojan]], [[xray/vless|VLESS]], [[protocols/shadowsocks|Shadowsocks]]), и у всех них общие врождённые проблемы.
**Первая — стоимость установления соединения.** TCP-рукопожатие плюс TLS-рукопожатие — это два-три обмена пакетами до того, как пойдут данные. На канале до другого континента с задержкой 200300 мс каждое новое соединение обходится в заметную паузу, и это ощущается как «интернет думает».
**Вторая — проксирование UDP.** TCP-протоколы вынуждены упаковывать UDP-пакеты в TCP-поток. Это ломает свойства UDP: появляется лишняя надёжность там, где она не нужна (игре важнее свежий пакет, чем гарантированно доставленный старый), и рушится NAT-поведение, от которого зависят голосовые звонки и P2P.
**Третья — потери пакетов.** При потере TCP резко снижает скорость. На плохом канале это выглядит как «скорость есть, но её нет».
QUIC решает всё три задачи на уровне транспорта: он несёт TLS 1.3 внутри себя (рукопожатие совмещено), умеет 0-RTT-возобновление, мультиплексирует потоки без блокировки друг друга и передаёт датаграммы. TUIC — это тонкий прокси-протокол поверх этих возможностей: **вся криптография и надёжность взяты у QUIC, сверху добавлены только аутентификация и команды релея**.
## Как это работает
Клиент устанавливает QUIC-соединение с сервером (TLS 1.3, сертификат — обычный или самоподписанный), проходит аутентификацию и дальше отправляет команды: «открой TCP до такого-то адреса» или «перешли этот UDP-пакет туда-то». Каждое проксируемое TCP-соединение живёт в своём QUIC-потоке, поэтому потеря пакета в одном не тормозит остальные.
**0-RTT при возобновлении.** QUIC умеет сохранять параметры прошлой сессии: при повторном подключении клиент отправляет данные вместе с рукопожатием, не дожидаясь ответа сервера. Практическая разница ощутима — вместо задержки в 200300 мс на каждое новое соединение восстановление проходит почти мгновенно. Особенно заметно на мобильной сети, где соединения рвутся постоянно (переход между вышками, засыпание экрана).
**Режимы UDP-релея.** Это единственная настройка TUIC, которую действительно стоит понимать:
- **`native`** — UDP-пакеты идут в QUIC-датаграммах. Быстро и семантически честно (пакет либо доехал, либо нет), но датаграмма QUIC ограничена по размеру: большие UDP-пакеты в неё не помещаются, и на практике это приводит к проблемам с некоторыми приложениями.
- **`quic`** — UDP-пакеты идут через потоки QUIC. Ограничение размера снимается и доставка гарантирована, но появляются накладные расходы и та самая надёжность, которая UDP-приложениям не всегда нужна.
Проще говоря: `native` быстрее и «честнее» по смыслу, `quic` — безопаснее по совместимости. Если UDP-приложение ведёт себя странно, переключение режима — первое, что стоит попробовать.
**Full Cone NAT.** TUIC проксирует UDP так, что внешние узлы могут отвечать на ваш порт напрямую. Это то, без чего плохо работают голосовые звонки, игровые лобби и P2P-передача.
## v4 против v5
Версии несовместимы, и это самая частая практическая проблема. Ключевое отличие на уровне конфига: **в v5 у пользователя есть UUID и отдельный пароль**, тогда как в v4 пароля нет. Если вы вписали пароль в конфиг узла v4 или, наоборот, не указали его для v5 — соединение не установится, при том что адрес, порт и сертификат верны.
Помимо этого v5 привёл в порядок формат команд и работу с аутентификацией. В документации ядер ([mihomo](https://wiki.metacubex.one/en/config/proxies/tuic/), [sing-box](https://sing-box.sagernet.org/configuration/outbound/tuic/)) параметры версий описаны раздельно — при настройке сверяйтесь именно с разделом своей версии.
## TUIC против Hysteria 2
Оба протокола работают поверх QUIC и решают похожие задачи, поэтому выбор между ними — типичный вопрос.
| Свойство | TUIC | [[Hysteria/00-overview\|Hysteria 2]] |
|---|---|---|
| Основной акцент | Быстрое установление соединения, честный UDP | Скорость на каналах с потерями, маскировка |
| Контроль перегрузки | Стандартные алгоритмы QUIC (BBR и др.) | Собственный [[Hysteria/bandwidth-brutal\|Brutal]] с заданной скоростью |
| Маскировка | Обычный QUIC/TLS 1.3 | Маскировка под HTTP/3 плюс режим [[Hysteria/config-server\|masquerade]] — сервер отвечает как настоящий сайт |
| Своя серверная обвязка | Минимальная | Развитая: ACL, [[Hysteria/traffic-stats-api\|API статистики]], [[Hysteria/obfs-port-hopping\|port hopping]] |
| Развитие проекта | Оригинальный репозиторий заархивирован, живёт в ядрах | Активное |
Практический ориентир: **Hysteria 2 сильнее там, где канал плохой или где нужна серверная обвязка**; TUIC привлекателен минимализмом и поведением при частых переподключениях. И у обоих одна общая уязвимость — они целиком зависят от того, пропускает ли сеть UDP.
> [!warning] Всё упирается в UDP
> Часть провайдеров и мобильных операторов режет, троттлит или полностью блокирует UDP, особенно длинные сессии и трафик на 443-й порт. Тогда QUIC-протоколы отваливаются там, где TCP-based [[xray/vless|VLESS]] продолжает работать. Держите TCP-вариант как запасной: это не перестраховка, а типовая практика.
## Состояние проекта
Оригинальный репозиторий TUIC (автор — @EAimTY) попал в волну удалений и архиваций 23 ноября 2023 года, описанную в [сводке gfw.report](https://gfw.report/blog/developers_deleted_repos/en/) и в заметке [[Clash/01-clash-core|Ядро Clash]]. Спецификация и код остались доступны, но отдельная активная разработка протокола фактически остановилась.
Это не означает, что TUIC мёртв: он реализован в [[Clash/02-mihomo|mihomo]] и [[sing-box/sing-box-extended|sing-box]] (в [[xray/project-x|Xray-core]] его нет — там из QUIC-протоколов есть только Hysteria 2), там же чинятся ошибки и добавляются мелкие улучшения (в релизах [[Clash/02-mihomo|mihomo]] середины 2026 года, например, дорабатывали UDP-релей). Но рассчитывать на развитие самого протокола — на новые версии, на ответ на новые методы детекта — не стоит. Для сравнения: [[protocols/anytls|AnyTLS]] и Hysteria развиваются активно.
## 📚 См. также
- [[protocols/00-overview|Обзор протоколов]] — карта задач и поддержки в ядрах.
- [[Hysteria/00-overview|Hysteria 2]] — второй крупный QUIC-протокол и его отличия.
- [[protocols/anytls|AnyTLS]] и [[protocols/naiveproxy|NaiveProxy]] — современные TCP-альтернативы с упором на маскировку.
- [[Clash/06-features-protocols|Возможности и протоколы mihomo]] — как TUIC настраивается в YAML-конфиге.
- 🔗 [github.com/tuic-protocol/tuic](https://github.com/tuic-protocol/tuic) — спецификация и исходники.
- 🔗 [Документация TUIC в mihomo](https://wiki.metacubex.one/en/config/proxies/tuic/) — актуальные параметры конфига.
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/protocols/tuic.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).