Ettevõte Cloudflare для обеспечения поддержки протокола HTTP/3 в NGINX. Модуль выполнен в форме надстройки над развиваемой в Cloudflare библиотекой с реализацией транспортного протокола QUIC и HTTP/3. Код quiche написан на языке Rust, но сам модуль для NGINX написан на языке Си и обращается к библиотеке при помощи динамического связывания. Наработки BSD litsentsi all.
Для сборки достаточно загрузить к nginx 1.16 и библиотеки quiche, после чего пересобрать nginx с опциями «—with-http_v3_module —with-quiche=../quiche». При сборке поддержка TLS должна базироваться на библиотеке BoringSSL («—with-openssl=../quiche/deps/boringssl»), использование OpenSSL пока не поддерживается. Для приёма соединений в настройки нужно добавить директиву listen с флагом «quic» (например «listen 443 quic reuseport»).
Из клиентского ПО поддержка HTTP/3 уже добавлена в экспериментальные сборки Chrome Canary и утилиту curl. На стороне сервера до сих пор требовалось использовать ограниченные по своим возможностям обособленные . Возможность обработки HTTP/3 в nginx позволит существенно упростить развёртывание серверов с поддержкой HTTP/3 и сделает более доступным тестовое внедрение нового протокола. Появление штатной поддержки HTTP/3 в nginx в ветке 1.17.x в течение 6-12 месяцев.
Tuletame meelde, et HTTP/3 standardiseerib QUIC protokolli kasutamise transpordina HTTP/2 jaoks. Protokoll (Quick UDP Internet Connections) areneb alates 2013. aastast Google'i poolt alternatiivina TCP+TLS ühenduse jaoks, lahendades TCP pika ühenduse loomise ja kokku leppimise probleemid ning kõrvaldab pakettide kadumise tõttu tekkivad viivitused andmete edastamise protsessis. QUIC on UDP protokolli peal olev lisakiht, mis toetab mitme ühenduse mitmekordistamist ja pakub krüpteerimismeetodeid, mis on võrdsed TLS/SSL-iga.
Peamised QUIC:
- Kõrge turvalisus, võrreldav TLS'iga (QUIC pakub tegelikult võimalust kasutada TLS'i UDP peal);
- Voolu terviklikkuse jälgimine, mis takistab pakettide kaotust;
- Võime koheselt ühendust luua (0-RTT, umbes 75% juhtudest saab andmeid edastada kohe pärast ühenduse loomise paketi saatmist) ja tagada minimaalne viivitus küsimise ja vastuse saamise vahel (RTT, Round Trip Time);
- Paketi sama järjestuse numbri uuesti edastamisel mittekasutamine, mis võimaldab vältida segadust vastuvõetud pakettide määratlemisel ja kaotada aegumised;
- Paketi kaotus mõjutab ainult selle kaasnevat voolu ja ei peata andmete edastamist samaaegselt praeguse ühenduse kaudu edastatavatest voogudest;
- Vigade parandusmeetmed, mis minimeerivad viivitusi kadunud pakettide uuesti edastamise tõttu. Eriliste vigade parandamise koodide kasutamine paketi tasemel, et vähendada olukordi, mis nõuavad kadunud paketi andmete uuesti edastamist.
- Krüptograafiliste plokkide piirid on joondatud QUIC pakettide piiridega, mis vähendab pakettide kaotuse mõju järgmiste pakettide sisu dekodeerimisele;
- TCP järjekorra ummistumise probleemide puudumine;
- Ühenduse identifikaatori tugi, mis võimaldab vähendada mobiilsete klientide uuesti ühendamise aega;
- Võime ühendada laienevaid ühenduse ülekande kontrolli mehhanisme;
- Igas suunas läbilaskevõime ennustamise tehnika kasutamine, et tagada pakkide edastamise optimaalne intensiivsus, vältides üleminekuid koormuse seisundisse, kus esineb pakettide kaotust;
- Tähtis tõhususes ja läbilaskevõimes võrreldes TCP-ga. Videoteenuste, nagu YouTube, puhul näitas QUIC kasutamine video vaatamise jooksul uuesti vahepealsete operatsioonide vähenemist 30% võrra.
Allikas: opennet.ru
