Was sind QUIC und HTTP/3?
Quick UDP Internet Connections (QUIC) ist ein universell einsetzbares Transportschichtprotokoll, das dank seiner Flexibilität, integrierten Sicherheit, geringeren Leistungsprobleme und schnelleren Verbreitung das Transmission Control Protocol (TCP) ersetzen soll. QUIC wurde ursprünglich von Google entwickelt und nutzt das User Datagram Protocol (UDP) als grundlegenden Transportmechanismus, um Pakete zwischen Client und Server zu übertragen. Bemerkenswert ist außerdem, dass QUIC Transport Layer Security (TLS) als integralen Bestandteil einbindet und nicht als zusätzliche Schicht wie bei HTTP/1.1 und HTTP/2.
HTTP/3, das auf QUIC basiert, ist die dritte Hauptversion des Hypertext Transfer Protocol (HTTP) und wurde 2022 als IETF-Standard verabschiedet. QUIC+HTTP/3 wurden entwickelt, um inhärente Einschränkungen von TCP zu überwinden, die die Leistung und das Benutzererlebnis beeinträchtigen.
Wie funktionieren APIs?
APIs sind das „öffentliche Gesicht“ von Anwendungen: Sie zeigen, welche Funktionen diese ausführen und welche Informationen sie bereitstellen können, und legen das korrekte Format für Anfragen fest. Wenn ein Entwickler die API für eine Anwendung erstellt und zugänglich macht, können andere Anwendungen mit ihr kommunizieren.
In vielen Fällen sparen APIs Entwicklern wertvolle Zeit, da sie häufig verwendete Funktionen direkt verfügbar machen. Anstatt die Funktionalität einer bestehenden Anwendung zu duplizieren, können Entwickler diese durch Aufrufe der API der bestehenden Anwendung in ihre eigenen Anwendungen integrieren.

Allgemeiner Überblick über HTTP-Transport-Stacks
Grundlagen zu QUIC+HTTP/3
Das Ziel von QUIC ist es, ein leistungsstarkes, äußerst zuverlässiges und hochsicheres Transportprotokoll für HTTP/3 bereitzustellen (wobei QUIC auch für Nicht-HTTP-Datenverkehr geeignet ist).
Wenn QUIC für Sie völliges Neuland ist, empfehlen wir Ihnen, sich das folgende Einführungsvideo anzusehen.
UDP, TCP und TLS
UDP ist ein einfaches, schlankes Protokoll, das zum erstmaligen Verbindungsaufbau keinen komplexen Drei-Wege-Handshake wie TCP benötigt. Diese Einfachheit macht UDP schnell und verbindungslos, bedeutet aber auch, dass ihm im Vergleich zu TCP wesentliche Funktionen für eine zuverlässige und sichere Kommunikation fehlen.
QUIC ist einzigartig, da es die Vorteile der UDP- und TCP-Protokolle vereint. Während es verbindungslos arbeitet und UDP als Transportprotokoll auf niedriger Ebene nutzt, um Verzögerungen beim Verbindungsaufbau und bei der Übertragung zu reduzieren, ist es auf den höheren Ebenen verbindungsorientiert, da es die TCP-Funktionen für den Verbindungsaufbau und die Verlusterkennung neu implementiert und so die Paketzustellung gewährleistet. Es erkennt verloren gegangene Daten und führt erneute Übertragungen durch, um ein nahtloses Nutzererlebnis sicherzustellen.
QUIC integriert TLS zudem als festen Bestandteil und nicht als zusätzliche Schicht, wie es bei HTTP/1.1 und HTTP/2 der Fall ist. Dadurch wird sichergestellt, dass Nachrichten standardmäßig verschlüsselt werden.
Überblick über ein QUIC-Netzwerk
Das folgende Diagramm zeigt den grundlegenden Aufbau eines QUIC-Netzwerks. Wie im Diagramm zu sehen ist, sind QUIC-Streams die logischen Objekte, die HTTP/3-Anfragen, -Antworten oder beliebige Anwendungsdaten enthalten. Für die Übertragung zwischen Netzwerkendpunkten werden QUIC-Streams in mehrere logische Schichten eingebettet.

Anatomie eines QUIC-Streams
Von außen nach innen betrachtet sind die logischen Schichten und Objekte:
- UDP-Datagramm – Enthält einen Header, der die Quell- und Zielports (sowie Längen- und Prüfsummendaten) angibt, gefolgt von einem oder mehreren QUIC-Paketen. Das Datagramm ist die Informationseinheit, die über das Netzwerk vom Client an den Server ü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 Long Header, der beim Verbindungsaufbau verwendet wird.
- Der kurze Header, der nach dem Verbindungsaufbau verwendet wird. Er enthält unter anderem die Verbindungs-ID, die Paketnummer und die Schlüsselphase (mit der zur Unterstützung der Schlüsselrotation nachverfolgt wird, welche Schlüssel zur Verschlüsselung des Pakets verwendet wurden). Paketnummern sind für eine bestimmte Verbindung und Schlüsselphase eindeutig (und werden stets größer).
- Frame – enthält den Typ, die Stream-ID, den Offset und die Stream-Daten. Die Stream-Daten sind auf mehrere Frames verteilt, können jedoch mithilfe der Verbindungs-ID, der Stream-ID und des Offsets zusammengesetzt werden. Anhand des Offsets werden die Datenblöcke in der richtigen Reihenfolge angeordnet.
- Stream – Ein unidirektionaler oder bidirektionaler Datenfluss innerhalb einer einzelnen QUIC-Verbindung. Jede QUIC-Verbindung kann mehrere unabhängige Streams mit jeweils eigener Stream-ID unterstützen. Geht ein QUIC-Paket verloren, das einige Streams enthält, beeinträchtigt dies nicht den Fortschritt der Streams, die nicht im fehlenden Paket enthalten sind (dies ist entscheidend, um das bei HTTP/2 auftretende Head-of-Line-Blocking zu vermeiden). 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 in der folgenden Abbildung zu sehen ist, behält QUIC den TLS-„Content Layer“ bei, der die kryptografischen Schlüssel bereitstellt, ersetzt jedoch den „Record Layer“ durch einen eigenen Transportmechanismus.
QUIC stützt sich außerdem auf TLS, um die Authentifizierung durchzuführen und Parameter auszuhandeln, die für Sicherheit und Leistung entscheidend sind. Statt einer strikten Schichtung arbeiten die beiden Protokolle zusammen: QUIC nutzt den TLS-Handshake, um eine sichere Verbindung herzustellen, während TLS die von QUIC bereitgestellte zuverlässige, geordnete Übertragung und Datensatzschicht nutzt.
Auf übergeordneter Ebene gibt es zwei wesentliche Interaktionen zwischen den TLS- und QUIC-Komponenten:
- Die TLS-Komponente sendet und empfängt Nachrichten über die QUIC-Komponente, wobei QUIC TLS eine zuverlässige Stream-Abstraktion bereitstellt.
- Die TLS-Komponente stellt der QUIC-Komponente eine Reihe von Aktualisierungen bereit, darunter (a) neu zu installierende Schlüssel für den Paketschutz und (b) Statusänderungen wie den Abschluss des Handshakes, das Serverzertifikat usw.
HTTP/3-Unterstützungsoptionen für QUIC TLS
QUIC TLS ist eine speziell für das QUIC-Protokoll entwickelte TLS-Variante. Derzeit stehen Benutzern, die HTTP/3-Unterstützung in QUIC TLS benötigen, zwei Optionen zur Verfügung:
- OpenSSL-QUIC-Implementierung – OpenSSL arbeitet derzeit an der Implementierung eines eigenen vollständigen QUIC-Stacks. Dadurch wird die gesamte QUIC-Funktionalität in der Implementierung gekapselt, sodass HTTP/3-Nutzer die OpenSSL-TLS-API wesentlich einfacher verwenden können, ohne sich um QUIC-spezifische Funktionen kümmern zu müssen.
- Bibliotheken mit Unterstützung für die BoringSSL-QUIC-API – Verschiedene SSL-Bibliotheken wie BoringSSL, quicTLS und LibreSSL (ursprünglich ein Fork von OpenSSL) stellen nun QUIC-TLS-Funktionen bereit, indem sie die BoringSSL-QUIC-API implementieren. Dies ist derzeit die einzige Option für Benutzer, die HTTP/3 verwenden möchten, da die QUIC-TLS-Implementierung von OpenSSL noch nicht einsatzbereit ist.
Vorteile von QUIC+HTTP/3
QUIC+HTTP/3 zielen darauf ab, die Leistung von Webanwendungen zu steigern, indem sie die Latenz reduzieren und die Datenübertragung über unzuverlässige Netzwerke verbessern. Zu ihren Vorteilen gehören:
- Geringere Latenz – Herkömmliche Protokolle wie TCP weisen aufgrund ihres Verbindungsaufbaus eine höhere Latenz auf. Dank der Multiplexing-Funktionen von QUIC+HTTP/3 können Verbindungen effizienter hergestellt werden, wodurch sich die Latenz beim Verbindungsaufbau und bei der Datenübertragung verringert.
- Schnellerer Verbindungsaufbau – QUIC+HTTP/3 fasst den TLS-Handshake und die Einrichtung der Verschlüsselung in einem einzigen Schritt zusammen. Dadurch sind weniger Roundtrips erforderlich, um eine sichere Verbindung herzustellen.
- 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-Blocking-Problem zu vermeiden, bei dem ein langsamer Datenstrom in herkömmlichen TCP-Verbindungen andere verzögern könnte.
- Verbesserte Fehlerkorrektur – QUIC nutzt Vorwärtsfehlerkorrekturverfahren, mit denen verlorene Pakete ohne erneute Übertragung wiederhergestellt werden können. Dadurch werden die Auswirkungen von Paketverlusten auf die Leistung reduziert.
- Geringere Auswirkungen von Paketverlusten – UDP ist verbindungslos und ermöglicht eine schnellere Übertragung, ohne dass die strenge Fehlerprüfung von TCP erforderlich ist. Dies ist besonders vorteilhaft in Szenarien mit weniger stabilen Netzwerkbedingungen.
- Adaptive Überlastungssteuerung – QUIC und HTTP/3 sind effizienter und reaktionsschneller als die Überlastungssteuerung von TCP und bieten dadurch eine bessere Leistung bei wechselnden Netzwerkbedingungen.
- Unterstützung für Verbindungswechsel – QUIC+HTTP/3 ermöglicht einen nahtlosen Wechsel zwischen verschiedenen Netzwerkverbindungen (z. B. von WLAN zu Mobilfunk), ohne die Leistung der Anwendung zu beeinträchtigen.
- Verbesserte Sicherheit – QUIC+HTTP/3 verwenden standardmäßig Verschlüsselung und erhöhen so die Sicherheit und den Datenschutz bei der Datenübertragung. Diese Verschlüsselung verhindert das Abhören und Manipulieren von Daten während der Übertragung.
- NAT-Traversal – Die Verwendung von UDP durch QUIC+HTTP/3 kann die Überwindung von Network Address Translation (NAT) erleichtern. Dadurch lassen sich Verbindungen in Szenarien, in denen herkömmliche TCP-Verbindungen möglicherweise auf Probleme stoßen, einfacher herstellen.
- Kontinuierliche Weiterentwicklung – Da QUIC+HTTP/3 so konzipiert wurden, dass sie softwareseitig implementiert und aktualisiert werden können, ohne Änderungen an der zugrunde liegenden Netzwerkinfrastruktur zu erfordern, lassen sie sich schneller aktualisieren und verbessern, um sie an veränderte Netzwerkbedingungen und Sicherheitsanforderungen anzupassen.

