QUIC объединяет транспортный уровень и шифрование в одном протоколе. Рукопожатие занимает 1 RTT (или 0-RTT при повторном подключении) против 3 RTT у TCP+TLS. Это основа HTTP/3.
Ключевые отличия от TCP
| Характеристика | TCP+TLS | QUIC |
|---|---|---|
| Транспорт | TCP | UDP |
| Рукопожатие | 3 RTT | 1 RTT (0-RTT повторно) |
| Шифрование | TLS отдельно | TLS 1.3 встроено |
| Head-of-line blocking | Есть | Нет (независимые потоки) |
| Смена сети | Разрывает соединение | Connection ID (без разрыва) |
Почему UDP, а не TCP
TCP реализован в ядре ОС и практически невозможно быстро изменить. QUIC работает в user space — Google, Cloudflare и другие могут обновлять протокол независимо от ОС. Потери пакетов в QUIC не блокируют все потоки сразу: если потерян пакет потока 3, потоки 1, 2, 4 продолжают работать — в отличие от TCP.
История
QUIC разработан Google в 2012 году. В 2015 году Google открыл спецификацию. К 2017 году ~7% трафика Google проходило через QUIC. IETF начал стандартизацию в 2016 году, RFC 9000 опубликован в мае 2021 года. HTTP/3 (RFC 9114) использует QUIC как транспорт и в 2023 году поддерживается 29% сайтов по данным W3Techs.
QUIC в хостинге и CDN
Nginx поддерживает QUIC/HTTP/3 начиная с версии 1.25.0 (2023). CDN Cloudflare включил QUIC по умолчанию в 2020 году. Для включения в nginx нужен специальный пакет с поддержкой BoringSSL или OpenSSL 3.x. Прирост производительности наиболее заметен на мобильных клиентах с нестабильным соединением и высоким RTT (>100 мс).
На VPS для включения QUIC открывают UDP/443 в файрволе — многие по умолчанию открывают только TCP/443.
Как работает QUIC
QUIC работает поверх UDP, что обходит ограничения TCP. Установка соединения: первое подключение требует 1 RTT (Round Trip Time) для QUIC handshake (TLS 1.3 интегрирован) против 3 RTT для TCP+TLS 1.2 (1 RTT TCP + 2 RTT TLS). Повторное подключение: 0-RTT (Zero-RTT) — клиент отправляет данные сразу, без ожидания подтверждения, используя сохранённые параметры сессии. Это критично для мобильных сетей с высокой задержкой.
Мультиплексирование потоков: несколько HTTP-запросов идут параллельно внутри одного QUIC-соединения без проблемы head-of-line blocking. В HTTP/2 потеря одного TCP-пакета блокирует все потоки (head-of-line blocking на транспортном уровне). В QUIC потеря пакета одного потока не влияет на другие.
QUIC и хостинг
Nginx поддерживает QUIC/HTTP3 с версии 1.25.0 (2023). Caddy поддерживал HTTP/3 с версии 2.0 (2020). Для включения QUIC на сервере нужны: UDP-порт 443 открыт в файрволе (QUIC работает только на 443), поддержка TLS 1.3, современная версия веб-сервера. Проверка поддержки: https://http3check.net/.
Cloudflare поддерживает QUIC для всех сайтов за их CDN с 2019 года. По данным Cloudflare, доля QUIC-соединений выросла с 10% в 2020 году до 25%+ в 2023 году. Google Chrome выбирает QUIC для подключений к Google-сервисам начиная с Chrome 29 (2013).
История QUIC
QUIC разработан Google в 2012–2013 годах под руководством Джима Роскинда. Имя — акроним Quick UDP Internet Connections, хотя впоследствии стал просто именем собственным. В 2016 году IETF начал стандартизацию. RFC 9000 (IETF QUIC) опубликован в мае 2021 года. HTTP/3 (RFC 9114) — HTTP поверх QUIC, опубликован одновременно. По данным W3Techs на 2024 год, 28% веб-сайтов поддерживают HTTP/3.