Was sind QUIC und HTTP/3?

Quick UDP Internet Connections (QUIC) ist ein allgemeines Transportschichtprotokoll, das das Transmission Control Protocol (TCP) durch seine Flexibilität, eingebaute Sicherheit, geringere Leistungsprobleme und schnellere Akzeptanz ersetzen soll. QUIC wurde ursprünglich von Google entwickelt und verwendet das User Datagram Protocol (UDP) als Low-Level-Transportmechanismus für die Übertragung von Paketen zwischen Client und Server. QUIC beinhaltet auch Transport Layer Security (TLS) als integralen Bestandteil und nicht als zusätzliche Schicht wie HTTP/1.1 und HTTP/2.

HTTP/3, basierend auf QUIC, ist die dritte Hauptversion des Hypertext Transfer Protocol (HTTP) und wurde 2022 als IETF-Standard übernommen. QUIC+HTTP/3 wurden entwickelt, um die mit TCP verbundenen Einschränkungen zu beseitigen, die die Leistung und das Benutzererlebnis beeinträchtigen.

Wie funktionieren APIs?

APIs sind das „öffentliche Gesicht“ von Anwendungen, sie zeigen die Funktionen, die sie ausführen und die Informationen, die sie bereitstellen können, und definieren das richtige Format von Anforderungen. Wenn ein Entwickler die API für eine Anwendung erstellt und offenlegt, ermöglicht er anderen Anwendungen die Kommunikation mit ihr.

In vielen Fällen sparen APIs den Entwicklern wertvolle Zeit, da sie häufig genutzte Funktionen leicht verfügbar machen. Anstatt die Funktionalität einer bestehenden Anwendung zu duplizieren, können Entwickler die Funktionalität in ihre Anwendungen integrieren, indem sie die API der bestehenden Anwendung aufrufen.

Http-Diagramm

Allgemeiner Überblick über HTTP-Transport-Stacks

QUIC+HTTP/3-Grundlagen

Das Ziel von QUIC ist es, ein hochleistungsfähiges, hochzuverlässiges und hochsicheres Transportprotokoll für HTTP/3 bereitzustellen (obwohl QUIC auch für Nicht-HTTP-Datenverkehr geeignet ist).

Wenn QUIC für Sie völlig neu ist, empfehlen wir Ihnen, sich das folgende Einführungsvideo anzusehen.

UDP, TCP und TLS

UDP ist ein einfaches, leichtgewichtiges Protokoll, das keinen komplexen Drei-Wege-Handschlag wie TCP benötigt, um die erste Verbindung aufzubauen. Diese Einfachheit macht UDP schnell und verbindungslos, bedeutet aber auch, dass ihm im Vergleich zu TCP die für eine zuverlässige und sichere Kommunikation erforderlichen Funktionen fehlen.

QUIC ist einzigartig, weil es die Vorteile von UDP- und TCP-Protokollen vereint. Während es verbindungslos ist und UDP für das Low-Level-Transportprotokoll nutzt, um die Verbindungs- und Transportverzögerungen zu reduzieren, ist es in den höheren Schichten verbindungsorientiert, da es die Verbindungsaufbau- und Verlusterkennungsfunktionen von TCP neu implementiert, die die Paketübermittlung garantieren. Es übernimmt die Aufgaben der Identifizierung verlorener Daten und der Vervollständigung von erneuten Übertragungen, um eine problemlose Benutzererfahrung sicherzustellen.

QUIC beinhaltet TLS als integralen Bestandteil und nicht als zusätzliche Schicht wie bei HTTP/1.1 und HTTP/2. Dadurch wird sichergestellt, dass die Nachrichten standardmäßig verschlüsselt sind.

Überblick über ein QUIC-Netzwerk

Das folgende Diagramm zeigt den grundlegenden Aufbau eines QUIC-Netzwerks. Wie im Diagramm zu sehen ist, sind die logischen Objekte, die HTTP/3-Anforderungen, Antworten oder Anwendungsdaten enthalten, QUIC-Streams. Für die Übertragung zwischen Netzwerkendpunkten werden QUIC-Streams in mehrere logische Schichten eingeschlossen.

Netzwerkanatomie des QUIC-Diagramms

Anatomie eines QUIC-Streams

Von außen nach innen betrachtet sind die logischen Schichten und Objekte folgende:

  • UDP-Datagramm – Enthält einen Header mit Angabe des Quell- und Ziel-Ports (zusammen mit Längen- und Prüfsummendaten), gefolgt von einem oder mehreren QUIC-Paketen. Das Datagramm ist die Informationseinheit, die vom Client zum Server über das Netzwerk übertragen wird.
  • QUIC-Paket – Enthält einen QUIC-Header und einen oder mehrere QUIC-Frames.
  • QUIC-Header – Enthält Metadaten über das Paket. Es gibt zwei Arten von Headern:
    • Der lange Header, der beim Verbindungsaufbau verwendet wird.
    • Der kurze Header, der nach dem Verbindungsaufbau verwendet wird. Er enthält (neben anderen Daten) die Verbindungs-ID, die Paketnummer und die Schlüsselphase (um zu verfolgen, welche Schlüssel zur Verschlüsselung des Pakets verwendet wurden, um die Schlüsselrotation zu unterstützen). Die Paketnummern sind für eine bestimmte Verbindung und Schlüsselphase eindeutig (und werden immer höher).
  • Frame – Enthält den Typ, die Stream-ID, den Offset und die Stream-Daten. Die Stream-Daten sind auf mehrere Frames verteilt, können aber mit Hilfe der Verbindungs-ID, der Stream-ID und des Offsets zusammengesetzt werden, was dazu dient, die Datenpakete in der richtigen Reihenfolge darzustellen.
  • Stream – Ein unidirektionaler oder bidirektionaler Datenfluss innerhalb einer einzelnen QUIC-Verbindung. Jede QUIC-Verbindung kann mehrere unabhängige Streams unterstützen, jeden mit seiner eigenen Stream-ID. Wenn ein QUIC-Paket, das einige Streams enthält, verloren geht, wirkt sich dies nicht auf den Fortschritt der Streams aus, die nicht in dem fehlenden Paket enthalten sind (Dies ist entscheidend, um das Head-of-Line-Blocking zu vermeiden, das bei HTTP/2 auftritt.). Streams können bidirektional sein und von beiden Endpunkten erstellt werden.
So funktioniert QUIC mit einem TLS-Handschlag

Ein TLS-Handschlag sorgt für eine sichere Verbindung zwischen Client und Server. Die von QUIC bereitgestellte Verschlüsselung erfordert TLS v1.3. Wie im folgenden Diagramm zu sehen ist, behält QUIC die TLS-„Inhaltsschicht“ bei, die die kryptografischen Schlüssel bereitstellt, ersetzt aber die „Datensatzschicht“ durch seinen eigenen Transportmechanismus.

TLS- und QUIC-Schichtdiagramm

QUIC stützt sich auch auf TLS für die Authentifizierung und die Aushandlung von Parametern, die für die Sicherheit und die Leistung von entscheidender Bedeutung sind. Anstelle einer strikten Schichtung arbeiten die beiden Protokolle zusammen: QUIC verwendet den TLS-Handschlag, um eine sichere Verbindung herzustellen, während TLS die von QUIC bereitgestellte Zuverlässigkeits-, Zustellungs- und Aufzeichnungsschichten nutzt.

Allgemein gesehen gibt es zwei Hauptinteraktionen zwischen den TLS- und QUIC-Komponenten:

  • Die TLS-Komponente sendet und empfängt Nachrichten über die QUIC-Komponente, wobei QUIC eine zuverlässige Stream-Abstraktion für TLS bereitstellt.
  • Die TLS-Komponente stellt der QUIC-Komponente eine Reihe von Updates zur Verfügung, darunter (a) neue Paketschutzschlüssel, die zu installieren sind, und (b) Zustandsänderungen wie der Abschluss des Handschlags, das Serverzertifikat usw.

HTTP/3-Unterstützungsoptionen für QUIC TLS

QUIC TLS ist eine Variante von TLS, die speziell für das QUIC-Protokoll entwickelt wurde. Derzeit gibt es zwei Optionen für Benutzer, die HTTP/3-Unterstützung in QUIC TLS suchen:

  • OpenSSL QUIC-Implementierung – OpenSSL arbeitet derzeit an der Implementierung eines kompletten QUIC-Stacks. Diese Entwicklung wird die gesamte QUIC-Funktionalität innerhalb der Implementierung kapseln, wodurch es für HTTP/3-Benutzer viel einfacher wird, die OpenSSL-TLS-API zu verwenden, ohne sich um QUIC-spezifische Funktionalität kümmern zu müssen.
  • Bibliotheken, die BoringSSL QUIC API unterstützen – Verschiedene SSL-Bibliotheken wie BoringSSL, quicTLS und LibreSSL (die als Fork von OpenSSL begannen) bieten nun eine QUIC TLS-Funktionalität durch die Implementierung der BoringSSL QUIC API. Dies ist derzeit die einzige Option für Benutzer, die HTTP/3 verwenden wollen, da die OpenSSL QUIC TLS-Implementierung noch nicht fertig ist.
Vorteile von QUIC+HTTP/3

QUIC+HTTP/3 zielen darauf ab, die Leistung von Webanwendungen zu verbessern, indem sie die Latenzzeit verkürzen und die Datenübertragung über unzuverlässige Netzwerke verbessern. Zu ihren Vorteilen gehören:

  • Geringere Latenz – Herkömmliche Protokolle wie TCP leiden aufgrund ihres Verbindungsaufbaus unter Latenz. Die Multiplexing-Fähigkeiten von QUIC+HTTP/3 ermöglichen einen effizienteren Verbindungsaufbau, was zu einer geringeren Latenz beim Verbindungsaufbau und der Datenübertragung führt.
  • Schnellerer Verbindungsaufbau – QUIC+HTTP/3 fasst den TLS-Handschlag und den Aufbau der Verschlüsselung in einem einzigen Schritt zusammen und reduziert so die Anzahl der für den Aufbau einer sicheren Verbindung erforderlichen Umlaufzeiten.
  • Multiplexing – Durch die Verarbeitung mehrerer Datenströme innerhalb einer einzigen Verbindung ermöglicht QUIC+HTTP/3 eine effizientere Nutzung der Netzressourcen und hilft, das Head-of-Line-Blocking-Problem zu vermeiden, bei dem ein langsamer Datenstrom andere in herkömmlichen TCP-Verbindungen verzögern kann.
  • Verbesserte Fehlerkorrektur – QUIC enthält Techniken der Vorwärtsfehlerkorrektur, mit deren Hilfe verlorene Pakete ohne erneute Übertragung wiederhergestellt werden können, wodurch die Auswirkungen von Paketverlusten auf die Leistung verringert werden.
  • Geringere Auswirkungen von Paketverlusten – UDP ist verbindungslos und ermöglicht eine schnellere Übertragung ohne die strenge Fehlerprüfung von TCP, was besonders in Szenarien mit weniger stabilen Netzwerkbedingungen von Vorteil ist.
  • Adaptive Staukontrolle – QUIC+HTTP/3 sind so konzipiert, dass sie effizienter und reaktionsschneller sind als die Staukontrolle von TCP, was zu einer besseren Leistung in unterschiedlichen Netzwerkumgebungen führt.
  • Migrationsunterstützung – QUIC+HTTP/3 kann nahtlos zwischen verschiedenen Netzwerkverbindungen wechseln (z. B. von WLAN zu Mobilfunk), ohne die Leistung der Anwendung zu beeinträchtigen.
  • Verbesserte Sicherheit – QUIC+HTTP/3 integriert standardmäßig eine Verschlüsselung, die die Sicherheit und den Datenschutz bei der Datenübertragung erhöht. Diese Verschlüsselung verhindert das Abhören und die Manipulation der Daten während der Übertragung.
  • NAT-Traversierung – Die Verwendung von UDP durch QUIC+HTTP/3 kann bei der Traversierung von Network Address Translation (NAT) helfen, was den Aufbau von Verbindungen in Szenarien, in denen herkömmliche TCP-Verbindungen Probleme bereiten könnten, vereinfacht.
  • Ständige Weiterentwicklung – Da QUIC+HTTP/3 so konzipiert wurden, dass sie durch Software implementiert und aktualisiert werden können, anstatt Änderungen an der zugrunde liegenden Netzwerkinfrastruktur zu erfordern, können sie schneller aktualisiert und verbessert werden, um sich an veränderte Netzwerkbedingungen und Sicherheitsbelange anzupassen.
Weitere Informationen zur Verwendung von QUIC+HTTP/3 mit NGINX

In den folgenden Ressourcen erfahren Sie mehr über die QUIC+HTTP/3-Implementierung von NGINX und andere Möglichkeiten, wie Sie QUIC+HTTP/3 für eine schnellere und effizientere Kommunikation nutzen können.