Quick UDP Internet Connections (QUIC) ist ein universelles Transportschichtprotokoll, das aufgrund seiner Flexibilität, integrierten Sicherheit, weniger Leistungsprobleme und schnelleren Akzeptanz das Transmission Control Protocol (TCP) ersetzen soll. QUIC wurde ursprünglich von Google entwickelt und verwendet das User Datagram Protocol (UDP) als Low-Level-Transportmechanismus zum Verschieben von Paketen zwischen Client und Server. Insbesondere enthält QUIC 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 inhärente Einschränkungen von TCP zu lösen, die die Leistung und das Benutzererlebnis beeinträchtigen.

Wie funktionieren APIs?

APIs sind das „öffentliche Gesicht“ von Anwendungen. Sie zeigen die Funktionen an, die sie ausführen, die Informationen, die sie bereitstellen können, und definieren das richtige Format für Anfragen. Wenn ein Entwickler die API für eine Anwendung erstellt und verfügbar macht, können andere Anwendungen mit ihr kommunizieren.

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

HTTP-Diagramm

Allgemeine Übersicht über HTTP-Transportstapel

QUIC+HTTP/3-Grundlagen

Das Ziel von QUIC besteht darin, ein leistungsstarkes, zuverlässiges und sicheres Transportprotokoll für HTTP/3 bereitzustellen (obwohl QUIC auch für Nicht-HTTP-Verkehr 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, leichtes Protokoll, das keinen komplexen Drei-Wege-Handshake wie TCP benötigt, um die erste Verbindung herzustellen. 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 wesentlichen Funktionen fehlen.

QUIC ist einzigartig, weil es die Vorteile der UDP- und TCP-Protokolle vereint. Während es verbindungslos ist und UDP als Transportprotokoll auf niedriger Ebene nutzt, um 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 Paketzustellung garantieren. Es übernimmt die Aufgaben der Identifizierung verlorener Daten und der Durchführung erneuter Übertragungen, um ein nahtloses Benutzererlebnis zu gewährleisten.

QUIC integriert TLS außerdem als integralen Bestandteil und nicht als zusätzliche Schicht wie dies bei HTTP/1.1 und HTTP/2 der Fall ist. Diese Einbindung stellt sicher, dass die Nachrichten standardmäßig verschlüsselt sind.

Übersicht über ein QUIC-Netzwerk

Das folgende Diagramm zeigt die grundlegende Anatomie eines QUIC-Netzwerks. Wie im Diagramm zu sehen ist, sind die logischen Objekte, die HTTP/3-Anfragen, -Antworten oder beliebige Anwendungsdaten enthalten, QUIC- Streams. Für die Übertragung zwischen Netzwerkendpunkten werden QUIC-Streams in mehrere logische Schichten verpackt.

Netzwerkanatomie des Quic-Diagramms

Anatomie eines QUIC-Streams

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

  • UDP-Datagramm – Enthält einen Header, der die Quell- und Zielports (zusammen mit Längen- und Prüfsummendaten) angibt, gefolgt von einem oder mehreren QUIC-Paketen. Das Datagramm ist die Informationseinheit, die über das Netzwerk vom Client zum Server übertragen wird.
  • QUIC-Paket – Enthält einen QUIC-Header und einen oder mehrere QUIC-Frames.
  • QUIC-Header – Enthält Metadaten zum Paket. Es gibt zwei Arten von Headern:
    • Der lange Header, der beim Verbindungsaufbau verwendet wird.
    • Der kurze Header, der nach dem Herstellen der Verbindung verwendet wird. Es enthält (unter anderem) die Verbindungs-ID, die Paketnummer und die Schlüsselphase (wird verwendet, um zu verfolgen, welche Schlüssel zum Verschlüsseln des Pakets verwendet wurden, zur Unterstützung der Schlüsselrotation). Paketnummern sind für eine bestimmte Verbindung und Schlüsselphase eindeutig (und steigen immer an).
  • Frame – Enthält Typ, Stream-ID, Offset und Stream-Daten. Stream-Daten sind auf mehrere Frames verteilt, können aber mithilfe der Verbindungs-ID, der Stream-ID und des Offsets zusammengesetzt werden, wodurch die Datenblöcke in der richtigen Reihenfolge dargestellt werden.
  • Stream – Ein unidirektionaler oder bidirektionaler Datenfluss innerhalb einer einzelnen QUIC-Verbindung. Jede QUIC-Verbindung kann mehrere unabhängige Streams unterstützen, jeder mit seiner eigenen Stream-ID. Wenn ein QUIC-Paket mit einigen Streams verloren geht, hat dies keine Auswirkungen auf den Fortschritt von Streams, die nicht im fehlenden Paket enthalten sind (dies ist entscheidend, um die Head-of-Line-Blockierung zu vermeiden, die bei HTTP/2 auftritt). Streams können bidirektional sein und von beiden Endpunkten erstellt werden.
So funktioniert QUIC mit einem TLS-Handshake

Ein TLS-Handshake stellt eine sichere Verbindung zwischen Client und Server her. Die von QUIC bereitgestellte Verschlüsselung erfordert TLS v1.3 . Wie im Diagramm unten zu sehen ist, behält QUIC die TLS-„Content-Schicht“ bei, die die kryptografischen Schlüssel bereitstellt, ersetzt jedoch die „Record-Schicht“ durch einen eigenen Transportmechanismus.

QUIC verlässt sich außerdem auf TLS zur Authentifizierung und Aushandlung von Parametern, die für die Sicherheit und Leistung entscheidend sind. Anstelle einer strikten Schichtung arbeiten die beiden Protokolle zusammen: QUIC verwendet den TLS-Handshake, um eine sichere Verbindung herzustellen, während TLS die von QUIC bereitgestellte Zuverlässigkeit, geordnete Zustellung und Aufzeichnungsebene nutzt.

Auf hoher Ebene 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 bietet eine Reihe von Updates für die QUIC-Komponente, darunter (a) neue zu installierende Paketschutzschlüssel und (b) Statusänderungen wie Handshake-Abschluss, Serverzertifikat usw.

HTTP/3-Supportoptionen 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 eigenständigen Implementierung eines vollständigen QUIC-Stacks. Diese Entwicklung wird die gesamte QUIC-Funktionalität in die Implementierung einbinden und es für HTTP/3-Benutzer dadurch wesentlich einfacher machen, die OpenSSL TLS API zu verwenden, ohne sich um QUIC-spezifische Funktionalitäten kümmern zu müssen.
  • Bibliotheken, die BoringSSL QUIC API unterstützen – Verschiedene SSL-Bibliotheken wie BoringSSL, quicTLS und LibreSSL (das als Fork von OpenSSL begann) bieten jetzt QUIC TLS-Funktionalität durch Implementierung der BoringSSL QUIC API. Dies ist derzeit die einzige Option für Benutzer, die HTTP/3 verwenden möchten, da die OpenSSL QUIC TLS-Implementierung noch nicht fertig ist.
Vorteile von QUIC+HTTP/3

QUIC+HTTP/3 zielt darauf ab, die Leistung von Webanwendungen zu verbessern, indem die Latenz reduziert und die Datenübertragung über unzuverlässige Netzwerke verbessert wird. Zu ihren Vorteilen zählen:

  • Reduzierte Latenz – Herkömmliche Protokolle wie TCP leiden aufgrund ihres Verbindungsaufbauprozesses unter Latenz. Die Multiplexing-Funktionen von QUIC+HTTP/3 ermöglichen einen effizienteren Verbindungsaufbau, was zu geringeren Latenzen beim Verbindungsaufbau und der Datenübertragung führt.
  • Schnellerer Verbindungsaufbau – QUIC+HTTP/3 kombiniert den TLS-Handshake und die Verschlüsselungseinrichtung in einem einzigen Schritt und reduziert so die Anzahl der zum Aufbau einer sicheren Verbindung erforderlichen Roundtrips.
  • Multiplexing – Durch die Verarbeitung mehrerer Datenströme innerhalb einer einzigen Verbindung ermöglichen QUIC+HTTP/3 eine effizientere Nutzung der Netzwerkressourcen und tragen dazu bei, das Head-of-Line-Blockierungsproblem zu vermeiden, bei dem ein langsamer Stream andere in herkömmlichen TCP-Verbindungen verzögern kann.
  • Verbesserte Fehlerkorrektur – QUIC enthält Techniken zur Vorwärtsfehlerkorrektur, mit deren Hilfe verlorene Pakete ohne erneute Übertragung wiederhergestellt werden können. So werden die Auswirkungen von Paketverlusten auf die Leistung reduziert.
  • Reduzierte Auswirkungen von Paketverlusten – UDP ist verbindungslos und ermöglicht eine schnellere Übertragung ohne die strenge Fehlerprüfung von TCP. Dies ist insbesondere in Szenarien von Vorteil, in denen die Netzwerkbedingungen weniger stabil sind.
  • Adaptive Überlastungskontrolle – QUIC+HTTP/3 sind effizienter und reaktionsschneller als die Überlastungskontrolle von TCP und führen so zu einer besseren Leistung in unterschiedlichen Netzwerkumgebungen.
  • Migrationsunterstützung – QUIC+HTTP/3 kann nahtlos zwischen verschiedenen Netzwerkverbindungen wechseln (z. B. von WLAN auf Mobilfunk), ohne die Leistung der Anwendung zu beeinträchtigen.
  • Verbesserte Sicherheit – QUIC+HTTP/3 integrieren standardmäßig die Verschlüsselung und verbessern so die Sicherheit und den Datenschutz bei der Datenübertragung. Diese Verschlüsselung verhindert das Abhören und Manipulieren der Daten während der Übertragung.
  • NAT-Traversal – Die Verwendung von UDP durch QUIC+HTTP/3 kann beim Network Address Translation (NAT)-Traversal helfen und das Herstellen von Verbindungen in Szenarien einfacher machen, in denen bei herkömmlichen TCP-Verbindungen möglicherweise Probleme auftreten.
  • Ständige Weiterentwicklung – Da QUIC+HTTP/3 so konzipiert wurden, dass sie per Software implementiert und aktualisiert werden und keine Änderungen an der zugrunde liegenden Netzwerkinfrastruktur erfordern, können sie schneller aktualisiert und verbessert werden, um sich an veränderte Netzwerkbedingungen und Sicherheitsbedenken anzupassen.
Erfahren Sie mehr über die Verwendung von QUIC+HTTP/3 mit NGINX

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