QUIC

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
QUIC
Название Quick UDP Internet Connections
Уровень (по модели OSI) Транспортный (функционирует поверх UDP)
Семейство TCP/IP
Создан в июнь 2013
Порт/ID UDP
Спецификация RFC 8999, RFC 9000, RFC 9001, RFC 9002
Основные реализации (клиенты) Веб-браузеры (Google Chrome, Edge, Firefox и др.), серверы (nginx, LiteSpeed)

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

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

QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая по протоколу UDP, и содержит возможности шифрования, эквивалентные TLS и SSL. Он имеет меньшую задержку соединения и передачи, чем TCP, но допускает потерю некоторых пакетов за счет хорошего выравнивания границ криптографических блоков с границами пакетов. Протокол включает возможность переадресации исправления ошибок на уровне пакетов, но на практике она отключена[1].

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

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

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

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

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

Недостатки клиентской реализации

[править | править код]

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

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

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

Серверная реализация

[править | править код]

Имеется серверная реализация на языке Go[8], что позволяет использовать её в других проектах. 11 июля 2017 года LiteSpeed Technologies, Inc. начали официально поддерживать QUIC[9] в своём балансировщике нагрузки (WebADC) и веб-сервере (LiteSpeed Web Server).

В конце 2020 года появилась реализация IETF QUIC протокола от Microsoft — MsQuic, написанная на языке C. Утверждается, что MsQuic имеет отличия от других вариантов библиотек тем, что:

  • Оптимизирована для клиентской и серверной стороны.
  • Оптимизирована для максимальной пропускной способности при минимизации задержки.
  • Асинхронная работа.
  • Поддержка масштабирования на стороне приёма (RSS).
  • Поддержка слияния приёма и отправки по UDP[10].

Примечания

[править | править код]
  1. https://www.blackhat.com/docs/us-16/materials/us-16-Pearce-HTTP2-&-QUIC-Teaching-Good-Protocols-To-Do-Bad-Things.pdf#page=61 Архивная копия от 11 декабря 2021 на Wayback Machine «FEC (currently disabled)»
  2. Chromium Code Reviews: Issue 12317026: Various small QUIC cleanups after merging to Chrome. Дата обращения: 22 февраля 2013. Архивировано 24 декабря 2013 года.
  3. chromium / chromium / src / net / refs/heads/main / . / quic. Дата обращения: 30 июня 2013. Архивировано 16 мая 2013 года.
  4. Index of /trunk/src/net/quic. Дата обращения: 2 ноября 2020. Архивировано 10 апреля 2021 года.
  5. Chromium Code Search: net/tools/quic. Дата обращения: 22 сентября 2021. Архивировано 16 марта 2022 года.
  6. chromium/src/net/tools/quic/quic_server.h. Дата обращения: 30 сентября 2013. Архивировано 3 июня 2016 года.
  7. репозиторий Devsisters libQUIC на github. Дата обращения: 12 декабря 2015. Архивировано 7 декабря 2020 года.
  8. quic-go/README.md at master · lucas-clemente/quic-go · GitHub Архивная копия от 6 февраля 2022 на Wayback Machine GitHub
  9. QUIC — LiteSpeed Technologies. Дата обращения: 18 августа 2017. Архивировано 18 августа 2017 года.
  10. Cross-platform, C implementation of the IETF QUIC protocol. github.com. github.com (6 января 2021). Дата обращения: 5 марта 2021. Архивировано 9 мая 2022 года.

Литература

[править | править код]