awesome-everything EN
↑ Обратно к восхождению

Сети и протоколы

Почему QUIC, а не TCP+TLS

Суть QUIC переносит логику транспорта из ядра в пользовательское пространство поверх UDP — чтобы протокол мог свободно эволюционировать и завершать рукопожатие за один RTT.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на junior-высоте — поверхность
◷ 8 min

Вы знаете TCP. Вы знаете TLS. Вы знаете, как они складываются: браузер делает TCP-рукопожатие (1 RTT), потом TLS-рукопожатие сверху (ещё 1 RTT), и только потом отправляет HTTP-запрос. На межконтинентальной линии с задержкой 100 ms это 200 ms накладных расходов до того, как страница вообще начнёт загружаться.

Две проблемы TCP

TCP устарел. Добавление новых TCP-опций требует обновления ядра, выпуска патчей ОС через несколько месяцев, а потом нужно надеяться, что middlebox’ы — брандмауэры, NAT, балансировщики — не отбросят опцию молча. Это окостенение означало, что TCP почти не мог эволюционировать десятилетиями.

Вторая проблема: потеря одного пакета блокирует все потоки соединения, даже не связанные с этим пакетом. Это состояние называется head-of-line blocking.

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

TCP+TLS против QUIC: задержка рукопожатия
TCP SYN/ACK1 RTT
TLS ClientHello1 RTT
Первый HTTP байт= 2 RTT итого
QUIC Initial1 RTT
Первый HTTP байт= 1 RTT итого
На межконтинентальной линии 100 ms: TCP+TLS стоит 200 ms; QUIC стоит 100 ms

Определение в одно предложение

QUIC — транспортный протокол поверх UDP, который несёт TLS 1.3-рукопожатие, мультиплексирует много независимых потоков данных и переживает миграцию сети — ваш ноутбук переходит с WiFi на сотовую без потери соединения.

Метафора. Представьте почтовую доставку: TCP — это отправка конвертов один за другим в строгом порядке. Потеряешь один — все остальные ждут. QUIC — это почтальон с одной сумкой, в которой много отдельных конвертов; потеряешь один, остальные продолжают движение. Кроме того, сумка QUIC зашифрована.

Один сценарий от начала до конца

Вы открываете мобильное приложение, которое потоком отправляет видео через QUIC, одновременно отправляя периодические beacon-запросы (аналитика) и чат в реальном времени. В TCP каждый использовал бы своё соединение и платил три рукопожатия. В QUIC они используют одно соединение, так что платите одно 1-RTT-рукопожатие, а потом приложение может использовать stream ID 0 для видео, stream ID 2 для аналитики, stream ID 1 для чата. Потеря пакета в потоке 1 не блокирует видеокадры из потока 0. Когда вы переходите с WiFi на 4G, ID соединения остаётся действительным, все потоки остаются живы, и приложение никогда это не заметит.

Викторина

Почему QUIC в пользовательском пространстве, а не в ядре?

Почему это работает

RFC 9000 стандартизировался тринадцать лет (опубликован в мае 2021). Главная сложность — убедить интернет-сообщество доверить новый транспорт пользовательскому пространству, традиционно предназначенному для кода приложений, а не для гарантий доставки. Google выпустил ранний прототип (gQUIC) в Chrome в 2012 году, измерил реальные выигрыши в задержке в масштабе YouTube и передал данные в IETF как доказательство.

Расставь шаги по порядку

Расставьте ключевые события в QUIC-соединении от ноутбука к мобильной сети:

  1. 1 Ноутбук отправляет QUIC Initial-пакет с Connection ID (например, 0x12345678)
  2. 2 Мобильный получает, открывает соединение, Connection ID остаётся привязан к сессии
  3. 3 Ноутбук переходит на сотовую — IP-адрес меняется, но Connection ID всё ещё 0x12345678
  4. 4 Мобильный узнаёт Connection ID, валидирует новый IP и держит соединение живым
  5. 5 Все потоки и состояние управления потоком пережили переход — без переподключения
Ключевые числа QUIC
Стоимость рукопожатия
1 RTT (vs TCP+TLS 2 RTT)
Стоимость возобновления
0 RTT на кешированном сессионном тикете
Загрузка страницы на мобильных с потерями
на 30–55% быстрее HTTP/2
Интернет-трафик на HTTP/3
~21% (2026)
Вспомните перед уходом
  1. 01
    Что такое окостенение middlebox и как QUIC его обходит?
  2. 02
    В одном предложении: в чём главное преимущество QUIC по задержке перед TCP+TLS?
  3. 03
    Как QUIC сохраняет соединение при изменении IP-адреса клиента?
Итог

Эволюция TCP в ядре была заморожена middlebox-окостенением на десятилетия — любая новая TCP-опция отбрасывается до того, как достигнет пира. QUIC обходит это, работая поверх UDP в пользовательском пространстве, где любое приложение может еженедельно отгружать обновлённое управление перегрузкой. Объединённое рукопожатие транспорт+TLS экономит один полный RTT: 100 ms на межконтинентальной линии, 150 ms на трансокеанской. Независимое мультиплексирование потоков означает, что потерянный пакет блокирует только свой поток, а не всё соединение. Цена — CPU: обработка пакетов в пользовательском пространстве и пошаговое AES-GCM-шифрование добавляют 15–30% накладных расходов на байт по сравнению с kernel TCP.

Связанные уроки
встречается в258
Продолжить восхождение ↑QUIC-потоки и head-of-line blocking
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.