Русская Википедия:QUIC

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Стиль Шаблон:Много внутренних ссылок Шаблон:Карточка протокола

QUIC (сокр. от Шаблон:Lang-en; произносится quick) — экспериментальный интернет-протокол, разработанный Google[1][2] в конце 2012 года[3].

QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая поверх протокола UDP, и содержит возможности шифрования, эквивалентные TLS и SSL. Имеет более низкую задержку соединения и передачи, чем TCP. Хорошо переносит потерю части пакетов путём выравнивания границ криптографических блоков по границам пакетов. В протокол заложена возможность прямой (упреждающей) коррекции ошибок на уровне пакетов, но на практике она отключена[4].

Поддержка

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

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

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

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

В мае 2021 года протокол был принят в качестве официального стандарта RFC 9000. Социальная сеть ВКонтакте заявила о внедрении протокола для всех пользователей своих приложений[9].

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

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

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

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

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

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

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

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

См. также

Примечания

Шаблон:Примечания

Литература

Ссылки

  1. Ошибка цитирования Неверный тег <ref>; для сносок Google Working on QUIC не указан текст
  2. Ошибка цитирования Неверный тег <ref>; для сносок ars_announcement не указан текст
  3. Шаблон:Cite web
  4. https://www.blackhat.com/docs/us-16/materials/us-16-Pearce-HTTP2-&-QUIC-Teaching-Good-Protocols-To-Do-Bad-Things.pdf#page=61 Шаблон:Wayback «FEC (currently disabled)»
  5. Ошибка цитирования Неверный тег <ref>; для сносок Chromium Code Merging QUIC не указан текст
  6. Шаблон:Cite web
  7. Шаблон:Cite web
  8. Шаблон:Cite web
  9. Шаблон:Cite web
  10. Шаблон:Cite web
  11. Шаблон:Cite web
  12. quic-go/README.md at master · lucas-clemente/quic-go · GitHub Шаблон:Wayback GitHub
  13. Шаблон:Cite web
  14. Шаблон:Cite web