QUIC: Что стоит за экспериментальным протоколом Google?

Благодаря еще более быстрому DSL-доступу время загрузки сайтов в Интернете значительно сократилось. В результате быстрая загрузка страниц стала само собой разумеющейся, а это значит, что у медленно загружающихся сайтов мало шансов выжить на рынке. Что еще хуже, тема шифрования становится все более актуальной: стандарт HTTPS — надежный союзник в деле защиты конфиденциальности пользователей, но рукопожатие TLS, сертификаты и обмен ключами приведут к дополнительным задержкам в процессе загрузки. Протокол QUIC от Google решит эту проблему.

Что такое QUIC (Quick UDP Internet Connections)?

QUIC — это экспериментальный протокол, созданный поисковым гигантом Google и представленный общественности в 2013 году. Название расшифровывается как «Quick UDP Internet Connections», что связано с тем, что он позволяет быстро и легко отправлять простые пакеты по протоколу User Datagram Protocol (UDP), не требующему подключения. Причиной разработки QUIC стало желание предоставить альтернативу устоявшимся решениям безопасности TCP, HTTP/2 и TLS/SSL, разработав такую же защиту, но с уменьшенной задержкой соединения и транспорта, а также позволяющую мультиплексировать соединения.

Google разработал QUIC таким образом, что протокол сам контролирует соединение. Во время первого рукопожатия между отправителем и получателем происходит обмен сертификатами и ключами, необходимыми для шифрования отправляемых дейтаграмм. При последующих обменах этот обмен исключается, что минимизирует задержку. В качестве протокола шифрования используется современный, оптимизированный по скорости TLS версии 1.3 (стандартизирован в марте 2017 года), который предпочтительнее собственного криптографического решения. Что касается мультиплексирования, протокол QUIC следует разработанному Google протоколу SPDY, который послужил шаблоном для HTTP/2: одно соединение клиент-сервер может использоваться для передачи нескольких различных потоков данных, что значительно сокращает время загрузки.

Примечание

С 2016 года официальная рабочая группа IEFT работает над оптимизацией протокола QUIC. Около 50 разработчиков из Google, Mozilla, Microsoft и других компаний под руководством Ларса Эггерта и Марка Ноттингема занимаются продвижением и распространением спецификаций QUIC. Протокол используется на серверах Google уже несколько лет (с 2013 года). Кроме того, QUIC был внедрен в их собственный браузер Chrome, поэтому некоторые виды интернет-трафика (например, YouTube) в настоящее время обрабатываются с использованием передового транспортного протокола.

Какие преимущества предлагает QUIC?

Некоторые важные особенности и преимущества QUIC уже упоминались, но здесь они будут рассмотрены более подробно и с учетом дальнейших усовершенствований. TCP, который играет важную роль в качестве пионера в концепции развивающегося транспортного протокола, служит хорошим протоколом сравнения. Однако в некоторых аспектах он явно уступает протоколу Google, что будет показано в следующем руководстве: 

Более быстрые соединения

Основной аспект производительности, который дает QUIC преимущество перед TCP, заключается в том, что установка соединения происходит намного быстрее. Даже без шифрования через SSL/TLS, соединение с использованием традиционного транспортного протокола с «трехсторонним рукопожатием» занимает больше шагов, чем решение Google на основе UDP. QUIC начнет соединение с одного пакета (или двух пакетов, если это первое соединение) и даже передаст все необходимые параметры TLS или HTTPS. В большинстве случаев клиент может отправлять данные непосредственно на сервер, не рассчитывая на ответ, в то время как TCP должен сначала получить и обработать подтверждение сервера.

Варианты мультиплексного соединения

TCP использует TCP-порты и IP-адреса подключенных систем для идентификации соединения. Из-за этого клиент не может взаимодействовать с сервером через несколько портов в рамках одного соединения. Протокол QUIC решает эту ситуацию по-другому: он использует 64-битное определение соединения и различные «потоки» для передачи данных внутри соединения. Поэтому соединение QUIC не обязательно привязано к конкретному порту (в данном случае к порту UDP), IP-адресу или определенной конечной точке. Как следствие, изменение порта и IP-адреса является жизнеспособным вариантом, как и ранее описанное мультиплексное соединение.

Присвоение уникальных порядковых номеров

Каждый сегмент данных в соединении QUIC получает свой собственный порядковый номер, независимо от того, является ли он исходным или пересылаемым сегментом. По умолчанию TCP этого не делает, поэтому хост не может определить статус последовательности — только при использовании расширения временной метки классический транспортный протокол позволяет провести такое различие. Непрерывная маркировка пакетов выгодна, поскольку позволяет более точно оценить время в пути (RTT). 

Коррекция ошибок в прямом направлении

Потерянные пакеты не представляют большой проблемы при передаче данных через QUIC. Благодаря простой системе коррекции ошибок на основе XOR нет необходимости повторно передавать соответствующие данные. Они могут быть созданы в любое время с помощью пакетов FEC (Forward Error Correction) — резервных копий исходных пакетов для группы данных. Однако коррекция ошибок не работает, если несколько пакетов из группы данных отсутствуют.

Контроль перегрузки (темп передачи пакетов)

TCP всегда старается отправлять данные как можно быстрее, что является преимуществом с точки зрения наличия быстрого соединения для передачи данных, но также связано с определенным уровнем потерь. Если пакет потерян, быстро инициируется повторная передача (TCP Fast Retransmit). Однако для этого TCP временно уменьшает размер бутикового окна, что часто приводит к прерывистой передаче данных. Протокол QUIC противодействует этим пикам нагрузки с помощью ‘packet pacing’. Эта процедура обеспечивает автоматическое ограничение скорости передачи данных. Таким образом, даже при низкой пропускной способности соединения не возникает перегрузки. Однако это не новая техника: некоторые ядра Linux также используют этот метод для протокола TCP.

Аутентификация и шифрование

Безопасность была ключевым аспектом при планировании и разработке QUIC с самого начала. Разработчики также уделяли первостепенное внимание поиску решения одной из самых больших проблем TCP: заголовок отправляемого пакета находится в открытом тексте и может быть прочитан без предварительной аутентификации. В результате нередки атаки типа «человек посередине». Однако пакеты QUIC всегда аутентифицированы и в основном зашифрованы (включая полезную нагрузку). Те части заголовка, которые не зашифрованы, защищены от инъекций и фальсификации путем аутентификации на стороне получателя. 

Аппаратная независимость

Еще одним важным преимуществом QUIC перед TCP является то, что протокол Google отделен от системы. В то время как TCP нуждается в поддержке со стороны соответствующих платформ или устройств для обеспечения взаимодействия, поддержка QUIC требуется только на уровне приложений. Интеграция программного обеспечения зависит от отдельных компаний — они не зависят от производителей оборудования. На сегодняшний день QUIC реализован в основном в приложениях Google, таких как серверы Google или Google Chrome. Однако такие программы, как браузер Opera, серверное программное обеспечение Caddy и продукты балансировки нагрузки и веб-сервера компании LiteSpeed Technologies, уже имеют сторонние приложения, которые позволяют устанавливать соединения по новому транспортному протоколу.

Недостатки протокола QUIC

Тот факт, что QUIC, скорее всего, станет более популярным, объясняется приверженностью IETF. Благодаря корректировке общих стандартов с момента создания группы в 2016 году, протокол превратился из ориентированного на Google в общепринятый сетевой протокол. Однако процесс оптимизации еще далек от завершения: команда QUIC продолжает решать существующие проблемы, которые все еще требуют правильного решения.

Одной из самых важных проблем, с которыми по-прежнему сталкивается протокол QUIC, является безопасность. Хотя аутентификация и шифрование обеспечивают более безопасный способ передачи данных, они также ответственны за один из основных недостатков QUIC: Поскольку заголовки пакетов содержат меньше текстовой информации, чем заголовки TCP-соединений, такие задачи, как поиск и устранение неисправностей, регулирование трафика или управление сетью, становятся более сложными при использовании QUIC-соединений. Из-за этого операторам сетей и производителям межсетевых экранов, в частности, трудно обеспечить качество своей продукции.

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

Активация и деактивация QUIC — как это работает

Несмотря на то, что разработка протокола QUIC значительно продвинулась вперед, особенно в последние годы, он использовался только экспериментально в браузерах Google Chrome и Opera. В Chrome он активирован по умолчанию, в то время как пользователям Opera придется вручную разблокировать протокол, чтобы воспользоваться потенциальным увеличением производительности. В следующих разделах мы объясним, как именно активировать и деактивировать QUIC в обоих браузерах.

Настройка QUIC в Chrome

Чтобы изменить настройки протокола QUIC в Google Chrome, необходимо перейти в меню настройки экспериментальных функций. Просто введите в адресной строке следующую команду:

chrome://flags

Найдите пункт меню экспериментального протокола QUIC с помощью функции поиска, которую можно выполнить, нажав комбинацию клавиш [CRTL+F]. Если вы еще не вносили никаких изменений в основные настройки, для протокола должна быть выбрана опция ‘По умолчанию’. С точки зрения QUIC, эта конфигурация Chrome по умолчанию означает, что протокол включен.

Если вы хотите отключить протокол, просто нажмите ‘Отключено’, а затем нажмите ‘Начать сейчас’. После этого Chrome закроется, но при следующем запуске браузера новые настройки будут активированы. Если вы хотите снова активировать протокол, действуйте аналогичным образом, но выберите либо «По умолчанию», либо «Включено». 

Совет

Chrome предлагает возможность просмотра активных сессий QUIC. Для этого достаточно вставить команду chrome://net-internals/#quic в адрес QUIC.

Выключение и включение QUIC в Opera и других браузерах

Opera, основанная на Chromium, интегрирует экспериментальную версию протокола QUIC с версии 16, которая была выпущена в августе 2013 года. Разница с Google Chrome заключается в том, что в Opera протокол отключен по умолчанию. Чтобы использовать новую технологию транспортировки данных, вам придется активировать ее самостоятельно. Опцию для этого можно найти в меню настройки экспериментальных функций, как и в Google Chrome. В Opera оно называется «Эксперименты» и может быть вызвано путем ввода в адресную строку следующей команды:

opera://flags

В списке функций вы найдете протокол под заголовком «Экспериментальный протокол QUIC». Чтобы включить QUIC, просто выберите ‘Включено’, а затем ‘Перезапустить сейчас’. Если позже вы захотите вернуть исходные настройки, вы можете сделать это тем же способом, но выбрав ‘Disabled’. 

Совет

Opera позволяет просматривать активные соединения данных, которые работают на QUIC. Для этого добавьте в браузер команду opera://net-internals/#quic после включения протокола.

Какие веб-сайты уже используют протокол QUIC?

Как разработчики QUIC, компания Google интегрировала протокол в свои серверы еще в 2013 году, поэтому различные сервисы Google являются одними из самых известных веб-приложений, позволяющих передавать данные по прогрессивному протоколу. В первую очередь, конечно, это поисковая система, находящаяся в центре внимания компании. Но и другие веб-сервисы Google, такие как Maps, Google +, Gmail, Google Docs и YouTube, могут быть переданы по протоколу QUIC при условии использования соответствующего клиента.

Пользователи Chrome могут использовать индикатор HTTP/2 и SPDY для запуска QUIC на других веб-сайтах. Расширение добавляет небольшой символ молнии рядом с адресной строкой, который становится зеленым, когда вызванная страница подтверждает, что она может поддерживать транспортный протокол. Если вы наведете курсор мыши на символ, инструмент также покажет номер версии.

  • Технические вопросы

    Оцените статью
    cdelat.ru
    Добавить комментарий