Quickx protocol что это

Обновлено: 16.05.2024

Нынешние протоколы связи Интернета хорошо нам служили долгие годы, но мир не стоит на месте, Интернет как живой организм развивается, и приходит время отказаться от старых протоколов ради прогресса.

реклама

Сейчас настал черед протокола TCP (Transmission Control Protocol). Новый протокол, предложенный Google, получил название - QUIC (Quick UDP Internet Connections). QUIC построен на базе UDP (User Datagram Protocol). В отличие от TCP он более компактный, но для безопасного Интернета UDP не имеет ряда необходимых функций. А именно – UDP не надежный, то есть не знает отсутствующих данных от начальной точки, беспорядочный, то есть данные получаются не в том порядке, в котором они передаются, без коррекции ошибок, то есть не обнаруживает повреждение данных. Все эти функции есть в TCP.

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

Транспортный протокол QUIC приняли в качестве стандарта RFC 9000


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

Таким образом, QUIC версии 1 теперь официально принят и утверждён. Все участвующие стороны могут завершить эксперименты с черновиками протокола и перейти на первую официальную версию.

В последние годы QUIC был одним из главных приоритетов IETF. Появившись как эксперимент Google, вскоре разработка QUIC вышла на международный уровень. Она велась почти пять лет. Зафиксировано 26 очных собраний, 1749 задач в трекере и многие тысячи писем в почтовой рассылке.

QUIC — очень амбициозный проект, который принесёт большие изменения. «Транспортная экосистема интернета за несколько десятилетий закостенела, а QUIC оживит её», — пишут инженеры из компании Fastly, которые входят в рабочую группу по разработке протокола.

Окостенение означает, что система с каждым годом становится всё менее гибкой, менее подвижной. QUIC принесёт в транспортный уровень множество инноваций, включая обязательное шифрование, версионность, гораздо более богатый и более производительный набор сервисов, поверх которых будут строиться новые технологии. Предполагается, что QUIC приведёт к появлению нового поколения интернет-инноваций. Это уже начало происходит с расширениями, такими как ненадёжные датаграммы (Unreliable Datagram Extension). Ненадёжные датаграммы открывают двери перед новым классом медиа в реальном времени и другими приложениями, которым нужен более функциональный транспорт, чем обязательная доставка пакетов с обрывом канала при потере нескольких пикселей. Мы уже видим многообещающие технологии, такие как MASQUE и WebTransport.

Долгое время версия IETF называлась iQUIC, в то время как Google и другие продолжили работу над собственной реализацией gQUIC, но 7 ноября 2018 года один из ведущих разработчиков протокола Дмитрий Тихонов объявил, что стороны достигли совместимости протоколов, и теперь разработка продолжится в общем русле. QUIC в Chrome включается в настройках chrome://flags. Есть ещё расширение-индикатор, которое показывает, какие сайты поддерживают QUIC.


Встроенная безопасность и производительность

В чём преимущества транспортного протокола QUIC перед TCP? Преимуществ очень много. По словам руководителя рабочей группы Марка Ноттингема, переход от устаревшего TCP на новые протоколы просто неизбежен, поскольку сейчас очевидно, что TCP страдает от проблем неэффективности.

Кроме перехода значительного объёма трафика с TCP на UDP, протокол QUIC требует обязательного шифрования: нешифрованного QUIC не существует вообще. QUIC использует TLS 1.3 для установки ключей сессии, а затем шифрования каждого пакета. Но поскольку он основан на UDP, значительная часть информации о сессии и метаданных, открытых в TCP, шифруется в QUIC.


В статье «Будущее интернет-протоколов» Марк Ноттингем говорит о значительных улучшениях в безопасности с переходом на QUIC:

На самом деле текущий «короткий заголовок» iQUIC — который используется для всех пакетов, кроме рукопожатия — выдаёт только номер пакета, необязательный идентификатор соединения и байт состояния, необходимый для процессов вроде смены ключей шифрования и типа пакета (который тоже может быть зашифрован). Всё остальное зашифровано — включая пакеты ACK, что значительно повышает планку для проведения атак с анализом трафика.

Кроме того, становится невозможна пассивная оценка RTT и потерь пакетов путём простого наблюдения за соединением; там недостаточно информации для этого.

Отсутствие наблюдаемости вызвало серьёзную озабоченность у некоторых представителей сообщества операторов связи. Они говорят, что такие пассивные измерения критически важны для отладки и анализа их сетей.

Одно из предложений для решения этой проблемы — введение спин-бита. Это бит в заголовке, который меняет своё значение один раз по пути туда-обратно, так что наблюдатель может оценить RTT. Поскольку он не привязан к состоянию приложения, то не должен выдавать никакой информации о конечных точках, кроме примерной оценки местоположения сети.

Возможно, принятие стандарта QUIC произошло бы и раньше, если бы компания Google не поспешила внедрить свою реализацию в браузер Chrome, так что случилось «раздвоение» стандарта.

Протокол QUIC: переход Web от TCP к UDP

Протокол QUIC (название расшифровывается как Quick UDP Internet Connections) — совершенно новый способ передачи информации в интернете, построенный поверх протокола UDP, вместо общепринятого ранее использования TCP. Некоторые люди называют его (в шутку) TCP/2. Переход к UDP — наиболее интересная и мощная особенность протокола, из которой следуют некоторые другие особенности.

image

Если вы захотите установить защищённое TLS-соединение, придётся переслать ещё больше пакетов.

image

Некоторые инновации, вроде TCP Fast Open, улучшат некоторые аспекты ситуации, но эта технология пока не очень широко распространена.

image

Это невероятно ускоряет открытие соединения и начало загрузки данных.

Зачем нужен QUIC?

Планы команды разработчиков протокола QUIC выглядят очень амбициозно: протокол попытается совместить скорость UDP с надёжностью TCP.

Вот что об этом пишет Википедия:

Улучшение протокола TCP является долговременной целью для Google, а протокол QUIC создан как эквивалент независимого TCP-соединения, но с уменьшенными задержками и улучшенной в духе SPDY поддержкой мультиплексирования. Если QUIC покажет свою эффективность, то эти возможности могут войти в следующую версию протоколов TCP и TLS (разработка которых занимает больше времени).

В этой цитате есть важный момент: если QUIC докажет свою эффективность, то есть шанс, что опробованные в нём идеи станут частью следующей версии TCP.

Протокол TCP достаточно сильно формализован. Его реализации есть в ядрах Windows и Linux, в каждой мобильной OS, да и во многих более простых устройствах. Улучшение TCP является непростым делом, поскольку все эти реализации должны его поддерживать.

UDP же является относительно простым протоколом. Значительно быстрее разработать новый протокол поверх UDP чтобы иметь возможность проверить теоретические идеи, работу в перегруженных сетях, обработку заблокированных потерянным пакетом потоков и т.д. Как только эти моменты будут прояснены — можно будет начинать работу по переносу лучших частей QUIC в следующую версию TCP.

Где же сегодня место QUIC?

Да, протокол QUIC реализует собственный крипто-слой, что позволяет избежать использования TLS 1.2.

image

Блокировка начала очереди (Head-of-line blocking)

image

Поскольку весь обмен данными теперь построен на одном TCP-соединении, мы автоматически получаем один недостаток: блокировку начала очереди (Head-of-line blocking). В протоколе TCP требуется, чтобы пакеты приходили (точнее обрабатывались) в правильном порядке. Если пакет потерялся на пути к\от сервера — он должен быть отослан повторно. TCP-соединение в это время должно ожидать (блокироваться) и лишь после повторного получения потерянного пакета продолжается обработка всех пакетов в очереди — только так можно соблюсти условие корректного порядка обработки пакетов.

image

Протокол QUIC решает эту проблему фундаментально — отказом от протокола TCP в пользу UDP, который не требует соблюдения порядка обработки принимаемых пакетов. И, хотя потери пакетов, конечно, всё так же возможны, это будет влиять только на обработку тех ресурсов (индивидуальных HTML\CSS\JS-файлов), к которым относится потерянный пакет.

image

Почему уменьшить количество пересылаемых пакетов так важно

Если у вас быстрое Интернет-соединение, то задержки передачи пакетов между вашим компьютером и удалённым сервером составляют около 10-50 мс. Каждый пересылаемый от вас по сети пакет будет получен сервером через этот промежуток времени. Для такого порядка величин преимущества QUIC могут быть не очень понятны. Но стоит нам рассмотреть вопрос обмена данными с сервером на другом континенте или использования мобильных сетей — и вот у нас уже появляются задержки порядка 100-150 мс.

image

В итоге на мобильном устройстве, при доступе к находящемуся далеко серверу, разница между 4 пакетами TCP+TLS и одним пакетом QUIC может составить около 300 мс, что уже является существенной величиной, наблюдаемой невооруженным глазом.

Превентивная коррекция ошибок

Изящной фичей протокола QUIC является превентивная коррекция ошибок (Forward Error Correction, FEC). Каждый пересылаемый пакет содержит в себе некоторое количество данных других пакетов, что позволяет реконструировать любой потерянный пакет по данным в его соседях, без необходимости запрашивать переотправку потерянного пакета и дожидаться его содержимого. Это, по сути, реализация RAID 5 на сетевом уровне.

Но вы уже и сами видите недостаток этого решения: каждый пакет становится немного больше. Текущая реализация устанавливает этот оверхед равным 10%, т.е. сделав каждый пересылаемый пакет на 10% больше мы тем самым получаем возможность восстановления данных без перезапроса в случае, если будет теряться не более каждого десятого пакета.

Эта избыточность — плата пропускной способностью сети за уменьшение задержек (что выглядит логично, ведь скорости соединения и пропускная способность каналов непрерывно растут, а вот тот факт, что передача данных на другой конец планеты занимает сотню миллисекунд — навряд ли удастся как-то изменить без фундаментального переворота в физике).

Возобновление сессии и параллельные загрузки

Ещё одной интересной особенностью использования протокола UDP является то, что вы больше не привязаны к IP сервера. В протоколе TCP соединение определяется четырьмя параметрам: IP-адресами сервера и клиента, портами сервера и клиента. В Linux вы можете увидеть эти параметры для каждого установленного соединения с помощью комманды netstat:


Если любой из этих четырёх параметров потребуется изменить — нам потребуется открывать новое TCP-соединение. Вот почему трудно поддерживать стабильную связь на мобильных устройствах при переключении между WiFi и 3G/LTE.

image

В QUIC, с его использованием UDP, данного набора параметров больше нет. QUIC вводит понятие идентификатора соединения, называемого Connection UUID. Появляется возможность перейти с WiFi на LTE с сохранением Connection UUID, таким образом избежав затрат на пересоздание соединения. Похожим образом работает Mosh Shell, сохраняя SSH-соединение активным при смене IP-адреса.

Также данный подход открывает двери возможности использования нескольких источников для запроса контента. Если Connection UUID может быть использовано для перехода от WiFi к мобильной сети, то мы можем, теоретически, использовать и их обе одновременно для получения данных параллельно. Больше каналов связи — больше пропускная способность.

Практические реализации QUIC

image

image

Как при этом всём работают файрволы?

Если вы — сисадмин или сетевой инженер, то, возможно, слегка дёрнулись, когда услышали о том, что QUIC использует UDP вместо TCP. Да, наверное, у вас есть на то свои причины. Возможно у вас (как, например, и у нас в компании), настройки доступа к веб-серверу выглядят как-то так:

image

Самое главное здесь, конечно же, столбик протокола, в котором явно написано «TCP». Подобные настройки используются тысячами веб-серверов по всему миру, поскольку они разумны. 80 и 443 порты, только TCP — и больше ничего на продакшн-вебсервере разрешено быть не должно. Никакого UDP.

Ну, если мы хотим использовать QUIC, придётся добавить и разрешение UDP-соединений на 443-ий порт. В больших энтерпрайз-сетях это может быть проблемой. Как показывает статистика Google, UDP кое-где блокируется:

image

Эти цифры были получены в ходе недавнего исследования в Швеции. Отметим несколько ключевых моментов:

  • Поскольку QUIC тестировался только с сервисами Google, можно предположить, что недоступности из-за неверно настроенного файрвола на сервере не было.
  • Цифры отражают успешность исходящих запросов от пользователей на 443-ий UDP-порт.
  • QUIC может быть отключен в Chrome по разным причинам. Держу пари, что в некоторых энтерпрайз-средах его отключили превентивно, просто на всякий случай.
  • Поскольку протокол QUIC по-умолчанию использует шифрование, нам следует беспокоиться только о доступе к 443-му порту, доступность или недоступность 80-го не должна как-то влиять.
Использование QUIC на серверной стороне

На данный момент QUIC поддерживается вебсервером Caddy (с версии 0.9). И клиентская, и серверная реализация QUIC ещё на стадии экспериментальной поддержки, так что будьте осторожны с практическим применением QUIC. Поскольку ни у кого по-умолчанию не включен QUIC, то, вероятно, будет безопасным включить его на своём сервере и экспериментировать со своим браузером (Обновление: с версии 52 QUIC включён по-умолчанию в Chrome).

Производительность QUIC

В 2015-ом году Google опубликовала некоторые результаты замеров производительности QUIC.

Статистика Youtube особенно интересна. Если улучшения подобного масштаба действительно возможны, то мы увидим очень быструю адаптацию QUIC как-минимум в сфере видеосервисов вроде Vimeo, а также на рынке «видео для взрослых».

Выводы

Лично я нахожу протокол QUIC совершенно очаровательным! Огромный объём работы, проделанный его разработчиками, не пропал даром — один лишь факт того, что уже сегодня крупнейшие сайты в Интернете поддерживают QUIC, немного ошеломляет. Я жду не дождусь финальной спецификации QUIC, ну и дальнейшей её реализации всеми браузерами и веб-серверами.

Комментарий к статье от Jim Roskind, одного из разработчиков QUIC

Я потратил много лет на исследования, дизайн и разработку реализации протокола QUIC, и хотел бы добавить к статье кое-какие свои мысли. В тексте был верно подмечен момент о вероятной недоступности протокола QUIC у некоторых пользователей из-за строгих корпоративных политик в отношении протокола UDP. Это и было причиной того, что мы получили среднюю доступность протокола на уровне в 93%.

Если мы вернёмся немного в прошлое, то увидим что ещё совсем недавно корпоративные системы часто запрещали даже исходящий трафик к 80-му порту, с аргументацией «это уменьшит количество времени, которое работники тратят на серфинг в ущерб работе». Позже, как вы знаете, преимущества доступа к веб-сайтам (в том числе в производственных целях) вынудило большинство корпораций пересмотреть свои правила, разрешив выход в интернет с рабочего места рядового сотрудника. Я ожидаю чего-то аналогичного и с протоколом QUIC: как-только станет понятно, что с новым протоколом связь может быть быстрее, задачи выполняются оперативнее — он пробьёт себе путь и в энтерпрайз.

Я рассчитываю, что QUIC массово заместит собой TCP, и это даже помимо того, что он подарит следующей версии TCP ряд своих идей. Дело в том, что TCP реализуется в ядрах операционных систем, в железе, а значит адаптация к новой версии может занять 5-15 лет, в то время как внедрить QUIC поверх общедоступного и всеми поддерживаемого UDP можно в отдельно взятом продукте\сервисе буквально за несколько недель или месяцев.

Quickx protocol что это

Команда поддержки социальной сети «ВКонтакте» объявила о внедрении передовой технологии передачи данных на базе нового интернет-протокола QUIC, это позволило в два раза ускорить доставку контента в веб-версии и мобильных приложениях. Соответствующая информация была обнародована на конференции Saint HighLoad++ в Санкт-Петербурге техническим директором «ВКонтакте» Александром Тоболем. На данном мероприятии команда соцсети также объявила, что потребление контента на высокой скорости будет возможно без потери качества даже при слабом интернет-соединении и в неустойчивых мобильных сетях.

реклама


Для наглядности нужно привести кое-какие цифры. С новым протоколом «ВКонтакте» время доставки контента сократилось на 55%, суммарное число ежедневно просматриваемых событий выросло более чем на 250 миллионов. В так называемых «плохих сетях» пользователи стали потреблять на 10% больше контента. Приложение с новой сетевой технологией прошло тестирование и показало кратный рост по скорости не только в России, но и в ряде других стран, среди которых Германия, Бразилия и Молдавия.


Разработчики рассказали, что новый транспортный протокол отличается от широко используемого протокола старого поколения TCP. Так, QUIC может похвастаться уменьшенным временем задержки при передаче разных видов контента и встроенными современными технологиями обеспечения надёжности данных. К тому же, передача информации в Сети по этому протоколу происходит исключительно в зашифрованном виде — это повышает безопасность обмена данными аудиторией социальной сети.

Технический директор «ВКонтакте» отметил, что на данный момент в отрасли не существует готового набора решений одновременно для клиента и сервера, необходимого для внедрения и поддержки нового протокола в высоконагруженных системах. Именно поэтому далеко не все компании могут быстро перевести сервисы на QUIC.

Читайте также: