Компания NGINX обяви за стартиране на тестове на протоколите QUIC и HTTP/3 в HTTP сървъра и прокси nginx. Реализацията е базирана на на спецификацията 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. Протоколът (Quick UDP Internet Connections) се развива от 2013 г. от компанията Google като алтернатива на TCP+TLS за уеб, разрешаваща проблемите с дългото време за свързване и преговори в TCP и премахваща закъснението при загуба на пакети при предаване на данни. QUIC представлява надстройка над протокола UDP, поддържаща мултиплексиране на множество връзки и предоставяща методи за криптиране, еквивалентни на TLS/SSL. На клиентската страна, вече е добавена експериментална поддръжка на HTTP/3 в , и .
Основни QUIC:
- Висока сигурност, подобна на TLS (по същество QUIC предоставя възможност за използване на TLS 1.3 върху UDP);
- Контрол за целостта на потока, предотвратяващ загуба на пакети;
- Възможност за незабавно установяване на връзка (0-RTT, в около 75% от случаите данните могат да се предават веднага след изпращането на пакета за установяване на връзката) и осигуряване на минимални забавяния между изпращането на запитването и получаването на отговора (RTT, Round Trip Time);
- Не използване на повторно предаване на пакета със същия номер на последователност, което позволява да се избегне двусмислие при определяне на получените пакети и да се премахнат таймаутите;
- Загубата на пакет влияе само на доставката на свързания с него поток и не спира доставката на данни в паралелно предавани през текущото съединение потоци;
- Средства за корекция на грешки, минимизиращи забавянията поради повторно предаване на изгубени пакети. Използване на специални кодове за корекция на грешки на ниво пакет, за да се намалят ситуациите, изискващи повторно предаване на данни от изгубения пакет.
- Границите на криптографските блокове са подравнени с границите на QUIC пакетите, което намалява влиянието на загубите на пакети върху декодирането на съдържанието на следващите пакети;
- Липса на проблеми с блокиране на опашката TCP;
- Поддръжка на идентификатор на съединение, позволяваща да се съкрати времето за установяване на повторно съединение за мобилни клиенти;
- Възможност за свързване на разширени механизми за контрол на претоварването на съединението;
- Използване на техника за прогнозиране на пропускната способност във всяка посока за осигуряване на оптимална интензивност на изпращане на пакети, предотвратявайки свличането в състояние на претоварване, при което се наблюдава загуба на пакети;
- Забележимо на производителността и пропускната способност в сравнение с TCP. За видеосервизи като YouTube, прилагането на QUIC показва намаление на операциите за повторно буфериране при гледане на видео с 30%.
Източник: opennet.ru
