Предварительный выпуск nginx с поддержкой QUIC и HTTP/3

Discussion in 'Мировые новости. Обсуждения.' started by Suicide, 11 Jun 2020.

  1. Suicide

    Suicide Super Moderator
    Staff Member

    Joined:
    24 Apr 2009
    Messages:
    2,373
    Likes Received:
    6,619
    Reputations:
    693
    Компания 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.

    [​IMG]


    Основные особенности QUIC:

    • Высокая безопасность, аналогичная TLS (по сути QUIC предоставляет возможность использования TLS 1.3 поверх UDP);
    • Контроль за целостностью потока, предотвращающий потерю пакетов;
    • Возможность мгновенно установить соединение (0-RTT, примерно в 75% случаях данные можно передавать сразу после отправки пакета установки соединения) и обеспечить минимальные задержки между отправкой запроса и получением ответа (RTT, Round Trip Time);[​IMG]
    • Не использование при повторной передаче пакета того же номера последовательности, что позволяет избежать двусмысленности при определении полученных пакетов и избавиться от таймаутов;
    • Потеря пакета влияет на доставку только связанного с ним потока и не останавливает доставку данных в параллельно передаваемых через текущее соединение потоках;
    • Средства коррекции ошибок, минимизирующие задержки из-за повторной передачи потерянных пакетов. Использование специальных кодов коррекции ошибок на уровне пакета для сокращения ситуаций, требующих повторной передачи данных потерянного пакета.
    • Границы криптографических блоков выравнены с границами пакетов QUIC, что уменьшает влияние потерь пакетов на декодирование содержимого следующих пакетов;
    • Отсутствие проблем с блокировкой очереди TCP;
    • Поддержка идентификатора соединения, позволяющего сократить время на установку повторного соединения для мобильных клиентов;
    • Возможность подключения расширенных механизмов контроля перегрузки соединения;
    • Использование техники прогнозирования пропускной способности в каждом направлении для обеспечения оптимальной интенсивности отправки пакетов, предотвращая скатывание в состояние перегрузки, при которой наблюдается потеря пакетов;
    • Заметный прирост производительности и пропускной способности, по сравнению с TCP. Для видеосервисов, таких как YouTube, применение QUIC показало сокращение операций повторной буферизации при просмотре видео на 30%.
     
    CKAP, seostock and DartPhoenix like this.