Firma NGINX o rozpoczęciu testów protokół QUIC i HTTP/3 w serwerze HTTP i proxy nginx. Realizacja opiera się na specyfikacji IETF-QUIC i jest dostępna przez , odgałęzienie wypuszczenia 1.19.0. Kod jest udostępniany na licencji BSD i nie krzyżuje się z realizacją HTTP/3 dla nginx od firmy Cloudflare, która jest osobnym projektem.
Wsparcie HTTP/3 w nginx oznaczone jest jako eksperymentalne, ponieważ protokołu są zaimplementowane. Mimo to, nginx może już być stosowany do wysyłania odpowiedzi na proste zapytania HTTP/3 poprzez QUIC oraz do ładowania/odsyłania dużych plików. Wśród brakujących możliwości protokołu można wskazać mechanizmy negocjacji wersji protokołu, ECN i kontrolę przeciążenia, strukturalne logi, tryb odzyskiwania (QUIC recovery, kontrola przepływu i przeciążenia), NAT Rebinding, adresy mobilne, Server push, dołączanie danych (trailer). Oferowane jest jedynie podstawowe wsparcie dla przetwarzania pakietów ACK oraz zarządzania przepływem, które wymaga dalszych prac. Nie wszystkie wymagania standardu zostały uwzględnione.
Aby aktywować HTTP/3, należy skompilować nginx z modułem http_v3_module i dodać dodatkową dyrektywę
«listen» z flagą «http3″ do utworzenia słuchającego gniazda UDP. Na przykład:
server {
listen 443 ssl; # TCP-socket dla HTTP/1.1
listen 443 http3 reuseport; # UDP-socket dla QUIC+HTTP/3
ssl_protocols TLSv1.3; # w QUIC wymagany jest TLS 1.3
ssl_certificate ssl/www.example.com.crt;
ssl_certificate_key ssl/www.example.com.key;
add_header Alt-Svc ‘quic=»:443″‘; # oznaczenie dostępności QUIC
add_header QUIC-Status $quic; # Nagłówek ze statusem użycia QUIC
}
Przypomnijmy, że HTTP/3 standaryzuje użycie protokołu QUIC jako transportu dla HTTP/2. Protokół (Szybkie Połączenia UDP w Internecie) od 2013 roku rozwijane przez firmę Google jako alternatywa dla połączenia TCP+TLS dla Sieci, rozwiązujące problemy z długim czasem nawiązywania i negocjowania połączeń w TCP oraz eliminujące opóźnienia spowodowane utratą pakietów podczas przesyłania danych. QUIC jest nakładką na protokół UDP, obsługującą mnożenie wielu połączeń i zapewniającą metody szyfrowania, równoważne TLS/SSL. Po stronie oprogramowania klienckiego eksperymentalne wsparcie HTTP/3 zostało już dodane do , i .
Podstawowe QUIC:
- Wysokie bezpieczeństwo, podobne do TLS (w zasadzie QUIC umożliwia używanie TLS 1.3 na UDP);
- Kontrola integralności strumienia, zapobiegająca utracie pakietów;
- Możliwość natychmiastowego ustanowienia połączenia (0-RTT, w około 75% przypadków dane można przesyłać natychmiast po wysłaniu pakietu ustanowienia połączenia) oraz zapewnienie minimalnych opóźnień między wysłaniem żądania a otrzymaniem odpowiedzi (RTT, Round Trip Time);
- Nie używanie tego samego numeru sekwencji podczas ponownej transmisji pakietu, co pozwala uniknąć dwuznaczności przy określaniu odebranych pakietów i wyeliminować opóźnienia;
- Utrata pakietu wpływa na dostarczanie tylko powiązanego z nim strumienia i nie zatrzymuje dostarczania danych w równolegle przesyłanych strumieniach przez bieżące połączenie;
- Środki korekcji błędów, minimalizujące opóźnienia spowodowane ponowną transmisją zagubionych pakietów. Wykorzystanie specjalnych kodów korekcji błędów na poziomie pakietów w celu zmniejszenia liczby sytuacji wymagających ponownej transmisji danych zagubionego pakietu.
- Granice bloków kryptograficznych są wyrównane z granicami pakietów QUIC, co zmniejsza wpływ utraty pakietów na dekodowanie zawartości następnych pakietów;
- Brak problemów z blokowaniem kolejek TCP;
- Wsparcie dla identyfikatora połączenia, co pozwala skrócić czas na ponowne nawiązanie połączenia dla klientów mobilnych;
- Możliwość podłączenia rozszerzonych mechanizmów kontroli przeciążenia połączenia;
- Wykorzystanie techniki prognozowania przepustowości w każdym kierunku, aby zapewnić optymalną intensywność wysyłania pakietów, zapobiegając wpadnięciu w stan przeciążenia, w którym występuje utrata pakietów;
- Wyraźny wydajności i przepustowości w porównaniu z TCP. Dla serwisów wideo, takich jak YouTube, zastosowanie QUIC wykazało zmniejszenie operacji ponownego buforowania podczas oglądania wideo o 30%.
Źródło: opennet.ru
