Открыть сервис

QUIC

QUIC (Quick UDP Internet Connections) — это сетевой протокол транспортного уровня, разработанный компанией Google как альтернатива связке TCP+TLS для ускорения передачи данных в интернете. В отличие от традиционных протоколов, QUIC работает поверх UDP (User Datagram Protocol), а не TCP, и включает в себя встроенную поддержку шифрования, мультиплексирования потоков и механизмы борьбы с потерей пакетов. Протокол стандартизирован в 2021 году как RFC 9000 в рамках рабочей группы IETF (Internet Engineering Task Force).

История

Разработка QUIC началась в 2012 году в компании Google. Основной мотивацией стало стремление решить фундаментальные проблемы протокола TCP, которые замедляли загрузку веб-страниц и работу современных интернет-приложений. TCP, созданный в 1970-х годах, не был рассчитан на высокие задержки, частые потери пакетов и необходимость быстрого установления соединения.

В 2013 году Google внедрил экспериментальную версию QUIC в свой браузер Chrome и на серверы. К 2015 году значительная часть трафика Google (включая YouTube, Поиск, Gmail) уже передавалась через QUIC. Успех протокола привлёк внимание IETF, которая в 2016 году начала процесс стандартизации. В 2021 году был опубликован RFC 9000, описывающий базовую версию протокола, а также RFC 9001 (использование TLS 1.3) и RFC 9002 (механизмы контроля перегрузки).

После стандартизации QUIC начал активно внедряться крупными интернет-компаниями. В 2022 году протокол был включён в состав HTTP/3 — новой версии протокола HTTP, которая заменила HTTP/2 на базе TCP. К 2025 году QUIC поддерживается всеми основными браузерами (Chrome, Firefox, Safari, Edge) и операционными системами (Windows, macOS, Linux, Android, iOS).

Архитектура и принцип работы

Транспортный уровень поверх UDP

QUIC использует UDP в качестве транспортного протокола, что позволяет обойти ограничения TCP, накладываемые сетевыми устройствами (например, NAT и файрволами). UDP не гарантирует доставку пакетов, но обеспечивает низкую задержку и не требует установления соединения. QUIC реализует все необходимые механизмы надёжности и управления потоком на уровне приложения, что даёт гибкость в настройке.

Установление соединения (0-RTT и 1-RTT)

QUIC значительно ускоряет процесс установления соединения. В отличие от TCP, где требуется трёхстороннее рукопожатие (3-way handshake), а затем отдельное рукопожатие TLS (обычно 2 раунда), QUIC объединяет эти этапы. При первом соединении (1-RTT) клиент и сервер обмениваются криптографическими параметрами и согласовывают ключи за один круговой обход (round trip). При повторном соединении с тем же сервером (0-RTT) клиент может отправить данные немедленно, используя ранее сохранённые ключи, что даёт выигрыш в скорости до 30-50% для повторных загрузок.

Мультиплексирование без блокировки головы очереди (Head-of-Line Blocking)

Одной из ключевых проблем HTTP/2 поверх TCP является блокировка головы очереди (HoL blocking). Если один поток теряет пакет, все остальные потоки, передаваемые по тому же TCP-соединению, вынуждены ждать его повторной передачи. QUIC решает эту проблему, реализуя мультиплексирование на уровне протокола: каждый поток (stream) является независимой последовательностью данных, и потеря пакета в одном потоке не влияет на другие. Это особенно важно для приложений, передающих одновременно несколько типов данных (например, HTML, CSS, JavaScript, изображения).

Шифрование и безопасность

QUIC использует TLS 1.3 для шифрования всех данных, включая заголовки пакетов (за исключением минимально необходимых для маршрутизации). Это обеспечивает конфиденциальность и целостность трафика, а также защиту от атак типа «человек посередине» (MITM). В отличие от TCP, где шифрование реализуется отдельным уровнем (TLS), в QUIC оно встроено в протокол, что упрощает реализацию и снижает задержки.

Управление перегрузкой и потерями

QUIC включает собственные механизмы контроля перегрузки, аналогичные TCP-алгоритмам (например, Cubic, NewReno), но с возможностью более гибкой настройки. Протокол использует номера пакетов (packet numbers) для обнаружения потерь, что позволяет точнее определять момент потери и быстрее восстанавливать данные. Также QUIC поддерживает механизм Explicit Congestion Notification (ECN), позволяющий сетевым устройствам сигнализировать о перегрузке до возникновения потерь.

Преимущества и недостатки

Преимущества

  • Скорость установления соединения: 0-RTT и 1-RTT значительно сокращают задержки по сравнению с TCP+TLS (обычно 2-3 RTT).
  • Отсутствие блокировки головы очереди: мультиплексирование потоков без взаимной блокировки повышает производительность при потере пакетов.
  • Встроенное шифрование: безопасность по умолчанию без дополнительных настроек.
  • Устойчивость к смене сети: QUIC использует идентификаторы соединения (Connection IDs), которые позволяют сохранять сессию при смене IP-адреса (например, при переходе с Wi-Fi на мобильную сеть). Это особенно полезно для мобильных приложений.
  • Гибкость: протокол реализован на уровне приложения, что позволяет быстро вносить изменения без обновления операционной системы.

Недостатки

  • Зависимость от UDP: некоторые сети и файрволы блокируют или ограничивают UDP-трафик, что может препятствовать использованию QUIC.
  • Сложность реализации: протокол требует больше вычислительных ресурсов для обработки, чем TCP, особенно на стороне сервера.
  • Проблемы с совместимостью: старые сетевые устройства и программное обеспечение могут не поддерживать QUIC, что требует fallback на TCP.
  • Потенциальная уязвимость к DDoS-атакам: возможность 0-RTT может быть использована для усиления атак, хотя протокол включает механизмы защиты.

Применение

HTTP/3

Основное применение QUIC — это транспорт для HTTP/3. HTTP/3 заменил HTTP/2, который использовал TCP, и стал стандартом для современных веб-приложений. Крупные веб-сайты и сервисы (Google, YouTube, Facebook, Netflix, Cloudflare) активно используют HTTP/3 для ускорения загрузки контента.

Потоковое видео и аудио

QUIC широко применяется в сервисах потокового видео (YouTube, Netflix, Twitch) и аудио (Spotify). Благодаря низкой задержке и устойчивости к потере пакетов, протокол обеспечивает плавное воспроизведение без буферизации, особенно в условиях нестабильного интернет-соединения.

Мобильные приложения

QUIC популярен в мобильных приложениях, где частая смена сети (Wi-Fi, 4G, 5G) может приводить к разрыву TCP-соединений. Использование Connection IDs позволяет сохранять сессию без повторного рукопожатия, что улучшает пользовательский опыт.

Игры и реальное время

Протокол используется в онлайн-играх и приложениях для видеоконференций (Google Meet, Zoom), где требуется минимальная задержка и быстрая реакция на потерю пакетов. QUIC позволяет передавать данные с меньшей задержкой, чем TCP, и более надёжно, чем чистый UDP.

Стандартизация и реализация

IETF QUIC

Стандартизация QUIC в IETF привела к созданию нескольких реализаций. Основные из них:

  • quiche (Cloudflare) — реализация на Rust, используется в Cloudflare Workers и nginx.
  • lsquic (LiteSpeed Technologies) — реализация на C, используется в веб-серверах LiteSpeed.
  • msquic (Microsoft) — реализация на C, используется в Windows и .NET.
  • ngtcp2 (Tatsuhiro Tsujikawa) — реализация на C, используется в curl и nginx.
  • Chromium QUIC — реализация Google, встроенная в браузер Chrome.

Поддержка в операционных системах

  • Windows: начиная с Windows 10 (версия 2004) и Windows Server 2022, msquic включён в состав системы.
  • macOS и iOS: поддержка QUIC встроена в Network.framework с macOS 10.15 и iOS 13.
  • Linux: поддержка реализована через пользовательские библиотеки (например, quiche, msquic), ядро Linux не включает встроенную поддержку QUIC.
  • Android: поддержка добавлена в Android 12 через Cronet (библиотека Google).

Интересные факты

  • Название «QUIC» изначально было акронимом «Quick UDP Internet Connections», но после стандартизации IETF официально отказалась от расшифровки, оставив просто «QUIC».
  • QUIC стал первым протоколом транспортного уровня, стандартизированным IETF за последние 20 лет (после SCTP в 2000 году).
  • В 2023 году около 70% всего веб-трафика Google передавалось через QUIC.
  • Протокол поддерживает миграцию соединения: если пользователь переходит с Wi-Fi на мобильную сеть, QUIC-сессия может быть продолжена без перерыва, что невозможно для TCP.

Критика и ограничения

Несмотря на преимущества, QUIC подвергается критике за увеличение нагрузки на процессор (из-за шифрования и сложной обработки пакетов) и за сложность отладки и мониторинга. Некоторые операторы сетей блокируют UDP-трафик, что вынуждает использовать fallback на TCP. Также существует обеспокоенность по поводу возможности использования QUIC для обхода сетевых политик (например, в корпоративных сетях), так как шифрование заголовков затрудняет анализ трафика.

Источники

  • RFC 9000: QUIC: A UDP-Based Multiplexed and Secure Transport
  • RFC 9001: Using TLS to Secure QUIC
  • RFC 9002: QUIC Loss Detection and Congestion Control
  • IETF QUIC Working Group: https://quicwg.org
  • Google Research: QUIC: Quick UDP Internet Connections
  • Cloudflare: What is QUIC?
  • Microsoft: msquic documentation

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →