QUIC (произносится «квик»; бэкроним от англ. Quick UDP Internet Connections) — сетевой протокол транспортного уровня, изначально разработанный компанией Google в 2012 году и впоследствии стандартизированный IETF.

Протокол предназначен для замены связки TCP+TLS+HTTP/2 с целью уменьшения задержек при передаче данных и улучшения производительности веб-приложений.

QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая по протоколу UDP, и содержит возможности шифрования, эквивалентные TLS и SSL. Он имеет меньшую задержку соединения и передачи, чем TCP, но допускает потерю некоторых пакетов за счёт хорошего выравнивания границ криптографических блоков с границами пакетов. Протокол включает возможность переадресации исправления ошибок на уровне пакетов, но на практике она отключенаhttps://www.blackhat.com/docs/us-16/materials/us-16-Pearce-HTTP2-&-QUIC-Teaching-Good-Protocols-To-Do-Bad-Things.pdf#page=61 «FEC (currently disabled)».

Поддержка Код для поддержки QUIC был добавлен в Google Chrome, начиная с версии 29 (в предрелизных ветках dev и canary — с июня 2013, в релизной — с 20 августа 2013 года). Он может быть включен на странице chrome://flags/#enable-quic, активные сеансы видны на chrome://net-internals/#quic.

Реализация на языке C++ для поддержки QUIC доступна под лицензией BSD. Клиентская часть протокола доступна на Git.

Экспериментальный сервер с поддержкой QUIC доступен как часть проекта Chromium.

HTTP-сервер может объявить клиенту о поддержке протокола QUIC с помощью дополнительного заголовка «Alternate-Protocol: 80:quic» или «Alternate-Protocol: 443:quic».

В мае 2021 года протокол был принят в качестве официального стандарта RFC 9000.

Недостатки клиентской реализации По состоянию на 2015 г. существует одна открытая реализация протокола, разработанная в Google. Представленная реализация обладает следующими недостатками:

серверная часть использует epoll, что, как минимум, не позволяет без дополнительной доработки собрать и запустить серверную часть протокола на других ОС, за исключением Linux; реализация интегрирована в Chromium, что затрудняет использование в других проектах, как в плане интеграции, так и в плане синхронизации и обновления кодовой базы.

Существует извлечённая из дерева исходных текстов Chromium клиентская часть реализации протокола под названием libQUIC. Извлечением и синхронизацией с кодовой базой, а также некоторой доработкой занимается компания . Данное ответвление от основной реализации устраняет недостаток интеграции в проект Chromium.

Серверная реализация Имеется серверная реализация на языке Goquic-go/README.md at master · lucas-clemente/quic-go · GitHub GitHub, что позволяет использовать её в других проектах. 11 июля 2017 года LiteSpeed Technologies, Inc. начали официально поддерживать QUIC в своём балансировщике нагрузки (WebADC) и веб-сервере (LiteSpeed Web Server).

В конце 2020 года появилась реализация IETF QUIC протокола от Microsoft — MsQuic, написанная на языке C. Утверждается, что MsQuic имеет отличия от других вариантов библиотек тем, что: Оптимизирована для клиентской и серверной стороны. Оптимизирована для максимальной пропускной способности при минимизации задержки. Асинхронная работа. Поддержка масштабирования на стороне приёма (RSS). Поддержка слияния приёма и отправки по UDP.

См. также SPDY — другой экспериментальный протокол Google. DTLS HTTP/2 SCTP μTP — транспортный протокол поверх UDP с контролем доставки в μTorrent

Примечания

Литература Connecting on the QUIC // LWN, Nathan Willis, July 17, 2013

Ссылки net/quic — chromium/src — Git at Google QUIC: Design Document and Specification Rational QUIC FAQ for Geeks François Beaufort — Blog discussion Experimenting with QUIC

Категория:Браузеры Категория:Интернет-протоколы Категория:Протоколы прикладного уровня Категория:Компьютерные сети Категория:Всемирная паутина Категория:Google