Предварительный выпуск nginx с поддержкой QUIC и HTTP/3
11 июня 2020 года
Компания NGINX объявила о начале тестирования реализации протоколов QUIC и HTTP/3 в HTTP-сервере и прокси nginx. Реализация основана на 27 черновике спецификации IETF-QUIC и доступна через отдельный репозиторий, ответвлённый от выпуска 1.19.0. Код распространяется под лицензией BSD и не пересекается с предложенной ранее реализацией HTTP/3 для nginx от компании Cloudflare, которая является отдельным проектом.
Поддержка HTTP/3 в nginx помечена как экспериментальная, так как не все возможности протокола реализованы. При этом nginx уже может применяться для отправки ответов на простые запросы HTTP/3 поверх QUIC и загрузки/отдачи больших файлов. Из пока отсутствующих возможностей протокола отмечаются средства согласования версии протокола, ECN и контроль перегрузки, структурированные логи, режим восстановления (QUIC recovery, управление потоком и перегрузкой), NAT Rebinding, мобильные адреса, Server push, присоединение данных (trailer). Также предложена только базовая поддержка обработки ACK-пакетов и управления потоком, которая требует доработки. Не все требования стандарта учтены.
Для активации HTTP/3 требуется собрать nginx с модулем http_v3_module и добавить дополнительную директиву "listen" с флагом "http3" для создания слушающего UDP-сокета. Например: server { listen 443 ssl; # TCP-сокет для HTTP/1.1 listen 443 http3 reuseport; # UDP-сокет для QUIC+HTTP/3 ssl_protocols TLSv1.3; # в QUIC обязателен TLS 1.3 ssl_certificate ssl/www.example.com.crt; ssl_certificate_key ssl/www.example.com.key; add_header Alt-Svc 'quic=":443"'; # признак доступности QUIC add_header QUIC-Status $quic; # Заголовок со статусом использования QUIC }
Напомним, что HTTP/3 стандартизирует использование протокола QUIC в качестве транспорта для HTTP/2. Протокол QUIC (Quick UDP Internet Connections) c 2013 года развивается компанией Google в качестве альтернативы связке TCP+TLS для Web, решающей проблемы с большим временем установки и согласования соединений в TCP и устраняющей задержки при потере пакетов в процессе передачи данных. QUIC представляет собой надстройку над протоколом UDP, поддерживающую мультиплексирование нескольких соединений и обеспечивающую методы шифрования, эквивалентные TLS/SSL. На стороне клиентского ПО экспериментальная поддержка HTTP/3 уже добавлена в Curl, Firefox и Chromium.
Основные особенности QUIC:
- Высокая безопасность, аналогичная TLS (по сути QUIC предоставляет возможность использования TLS 1.3 поверх UDP);
- Контроль за целостностью потока, предотвращающий потерю пакетов;
- Возможность мгновенно установить соединение (0-RTT, примерно в 75% случаях данные можно передавать сразу после отправки пакета установки соединения) и обеспечить минимальные задержки между отправкой запроса и получением ответа (RTT, Round Trip Time);
- Не использование при повторной передаче пакета того же номера последовательности, что позволяет избежать двусмысленности при определении полученных пакетов и избавиться от таймаутов;
- Потеря пакета влияет на доставку только связанного с ним потока и не останавливает доставку данных в параллельно передаваемых через текущее соединение потоках;
- Средства коррекции ошибок, минимизирующие задержки из-за повторной передачи потерянных пакетов. Использование специальных кодов коррекции ошибок на уровне пакета для сокращения ситуаций, требующих повторной передачи данных потерянного пакета.
- Границы криптографических блоков выравнены с границами пакетов QUIC, что уменьшает влияние потерь пакетов на декодирование содержимого следующих пакетов;
- Отсутствие проблем с блокировкой очереди TCP;
- Поддержка идентификатора соединения, позволяющего сократить время на установку повторного соединения для мобильных клиентов;
- Возможность подключения расширенных механизмов контроля перегрузки соединения;
- Использование техники прогнозирования пропускной способности в каждом направлении для обеспечения оптимальной интенсивности отправки пакетов, предотвращая скатывание в состояние перегрузки, при которой наблюдается потеря пакетов;
- Заметный прирост производительности и пропускной способности, по сравнению с TCP. Для видеосервисов, таких как YouTube, применение QUIC показало сокращение операций повторной буферизации при просмотре видео на 30%.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.