Die vorläufige Version von nginx mit Unterstützung für QUIC und HTTP/3.

Unternehmen NGINX kündigte an Über den Beginn des Testens Implementierung. der QUIC- und HTTP/3-Protokolle im HTTP-Server und Proxy nginx. Die Implementierung basiert auf Entwurf 27 der IETF-QUIC-Spezifikation und ist über ein separates Repository, das von Version 1.19.0 abgezweigt ist. Der Code wird unter der BSD-Lizenz verbreitet und überschneidet sich nicht mit der zuvor vorgeschlagenen HTTP/3-Implementierung für nginx von Cloudflare, die ein separates Projekt darstellt.

Die Unterstützung von HTTP/3 in nginx ist als experimentell gekennzeichnet, da nicht alle Funktionen des Protokolls implementiert sind. Dennoch kann nginx bereits verwendet werden, um Antworten auf einfache HTTP/3-Anfragen über QUIC zu senden und große Dateien hochzuladen/herunterzuladen. Fehlende Funktionen des Protokolls umfassen Protokollversionsverhandlungen, ECN und Überlastkontrolle, strukturierte Protokolle, Wiederherstellungsmodus (QUIC Recovery, Fluss- und Überlastkontrolle), NAT-Rebinding, mobile Adressen, Server-Push und Datenanhänge (Trailer). Außerdem wird nur eine grundlegende Unterstützung für die Verarbeitung von ACK-Paketen und die Flusskontrolle angeboten, die weiterentwickelt werden muss. Nicht alle Anforderungen des Standards sind berücksichtigt.

Um HTTP/3 zu aktivieren, muss nginx mit dem http_v3_module kompiliert und eine zusätzliche Direktive
„listen“ mit dem Flag „http3“ hinzugefügt werden, um einen hörenden UDP-Socket zu erstellen. Zum Beispiel:

server {
listen 443 ssl; # TCP-Socket für HTTP/1.1
listen 443 http3 reuseport; # UDP-Socket für QUIC+HTTP/3

ssl_protocols TLSv1.3; # In QUIC ist TLS 1.3 erforderlich
ssl_certificate ssl/www.example.com.crt;
ssl_certificate_key ssl/www.example.com.key;

add_header Alt-Svc ‘quic=»:443“‘; # Hinweis auf die Verfügbarkeit von QUIC
add_header QUIC-Status $quic; # Header mit dem Status der Verwendung von QUIC
}

Wir erinnern daran, dass HTTP/3 die Verwendung des QUIC-Protokolls als Transportmittel für HTTP/2 standardisiert. Das Protokoll QUIC (Quick UDP Internet Connections) wird seit 2013 von Google als Alternative zur Kombination von TCP+TLS für das Web entwickelt, um Probleme mit langen Verbindungsaufbau- und Aushandlungszeiten bei TCP zu lösen und Verzögerungen durch Paketverluste während der Datenübertragung zu beseitigen. QUIC ist eine Erweiterung des UDP-Protokolls, das die Multiplexierung mehrerer Verbindungen unterstützt und Verschlüsselungsmethoden bereitstellt, die TLS/SSL entsprechen. Auf der Client-Seite wurde experimentelle Unterstützung für HTTP/3 bereits hinzugefügt in Curl, Firefox und Chromium.

Die vorläufige Version von nginx mit Unterstützung für QUIC und HTTP/3.

Haupt- Beispielcodes QUIC:

  • Hohe Sicherheit, vergleichbar mit TLS (im Wesentlichen ermöglicht QUIC die Verwendung von TLS 1.3 über UDP);
  • Kontrolle der Integrität des Datenstroms, um Paketverluste zu verhindern;
  • Die Möglichkeit, eine Verbindung sofort aufzubauen (0-RTT, in etwa 75 % der Fälle können Daten sofort nach dem Senden des Verbindungsaufbaus übertragen werden) und minimale Verzögerungen zwischen der Anfrage und dem Erhalt einer Antwort (RTT, Round Trip Time) zu gewährleisten;
    Die vorläufige Version von nginx mit Unterstützung für QUIC und HTTP/3.
  • Die Wiederverwendung der gleichen Sequenznummer bei der erneuten Übertragung von Paketen zu vermeiden, um Mehrdeutigkeiten bei der Identifizierung empfangener Pakete zu beseitigen und Zeitüberschreitungen zu vermeiden;
  • Paketverluste beeinflussen nur den damit verbundenen Datenstrom und stoppen nicht die Datenübertragung in parallel über die aktuelle Verbindung gesendeten Datenströmen;
  • Fehlerkorrekturmaßnahmen, die Verzögerungen aufgrund der erneuten Übertragung verlorener Pakete minimieren. Verwendung spezieller Fehlerkorrekturcodes auf Paketeebene, um Situationen zu reduzieren, die eine erneute Übertragung der Daten des verlorenen Pakets erfordern.
  • Die Grenzen der kryptografischen Blöcke sind an die Grenzen der QUIC-Pakete angepasst, was die Auswirkungen von Paketverlusten auf die Dekodierung der Inhalte nachfolgender Pakete verringert;
  • Keine Probleme mit der Blockierung von TCP-Warteschlangen;
  • Unterstützung einer Verbindungs-ID, die die Zeit für die Wiederherstellung einer Verbindung für mobile Clients reduziert;
  • Die Möglichkeit, erweiterte Mechanismen zur Überlaststeuerung der Verbindung zu integrieren;
  • Einsatz von Bandbreitenvorhersagetechniken in jede Richtung, um die optimale Intensität der Paketsendung sicherzustellen und ein Abrutschen in einen Überlastzustand, der Paketverluste zur Folge hat, zu verhindern;
  • Deutlicher Zuwachs an Leistung und Geschwindigkeit im Vergleich zu TCP. Für Video-Dienste wie YouTube hat die Anwendung von QUIC zu einer 30%igen Verringerung der Puffervorgänge beim Ansehen von Videos geführt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4