QUIC
QUIC (сокр. от англ. Quick UDP Internet Connections; произносится quick) — экспериментальный интернет-протокол, разработанный Google[1][2] в конце 2012 года[3].
QUIC | |
---|---|
Название | Quick UDP Internet Connections |
Уровень (по модели OSI) | Транспортный |
Семейство | TCP/IP |
Создан в | июнь 2013 |
Основные реализации (клиенты) | Веб-браузеры: Google Chrome. |
Разработчик |
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. Представленная реализация обладает следующими недостатками[источник не указан 2638 дней]:
- серверная часть использует 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].
См. такжеПравить
ПримечанияПравить
- ↑ Looks Like Google Is Working On A UDP Replacement Called QUIC (неопр.). Дата обращения: 29 октября 2017. Архивировано 4 июля 2013 года.
- ↑ Google making the Web faster with protocol that reduces round trips (неопр.). Дата обращения: 29 июня 2013. Архивировано 4 июля 2013 года.
- ↑ Issue 11125002: Add QuicFramer and friends. — Code Review (неопр.). Дата обращения: 17 декабря 2017. Архивировано 13 апреля 2020 года.
- ↑ 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)»
- ↑ Chromium Code Reviews: Issue 12317026: Various small QUIC cleanups after merging to Chrome. (неопр.) Дата обращения: 22 февраля 2013. Архивировано 24 декабря 2013 года.
- ↑ chromium / chromium / src / net / refs/heads/main / . / quic (неопр.). Дата обращения: 30 июня 2013. Архивировано 16 мая 2013 года.
- ↑ Index of /trunk/src/net/quic (неопр.). Дата обращения: 2 ноября 2020. Архивировано 10 апреля 2021 года.
- ↑ Chromium Code Search: net/tools/quic (неопр.). Дата обращения: 22 сентября 2021. Архивировано 16 марта 2022 года.
- ↑ ВКонтакте ускорилась в 2 раза (рус.). РИА Новости (20 сентября 2021). Дата обращения: 22 сентября 2021. Архивировано 21 сентября 2021 года.
- ↑ chromium/src/net/tools/quic/quic_server.h (неопр.). Дата обращения: 30 сентября 2013. Архивировано 3 июня 2016 года.
- ↑ репозиторий Devsisters libQUIC на github (неопр.). Дата обращения: 12 декабря 2015. Архивировано 7 декабря 2020 года.
- ↑ quic-go/README.md at master · lucas-clemente/quic-go · GitHub Архивная копия от 6 февраля 2022 на Wayback Machine GitHub
- ↑ QUIC — LiteSpeed Technologies (неопр.). Дата обращения: 18 августа 2017. Архивировано 18 августа 2017 года.
- ↑ Cross-platform, C implementation of the IETF QUIC protocol. (неопр.) github.com. github.com (6 января 2021). Дата обращения: 5 марта 2021. Архивировано 9 мая 2022 года.
ЛитератураПравить
- Connecting on the QUIC // LWN, Nathan Willis, July 17, 2013
СсылкиПравить
- https://src.chromium.org/chrome/trunk/src/net/quic/
- QUIC: Design Document and Specification Rational
- QUIC FAQ for Geeks
- https://plus.google.com/u/0/100132233764003563318/posts/b36wVornPtD François Beaufort — Blog discussion
- http://src.chromium.org/viewvc/chrome?view=rev&revision=162259
- http://blog.chromium.org/2013/06/experimenting-with-quic.html