Zum Inhalt springen

QUIC

aus Wikipedia, der freien Enzyklopädie

Vorlage:Hinweisbaustein

QUIC
Familie: Internetprotokollfamilie
Einsatzfeld: Zuverlässiger und verschlüsselter
bidirektionaler Datentransport
aufbauend auf UDP
Einführung: Mai 2021
entwickelt aus SPDY
Entwickler: Google LLC, IETF
Internet-Standards
RFC 8999<ref name="RFC8999" /> Versionsunabhängige Eigenschaften
RFC 9000<ref name="RFC9000" /> Hauptdefinition
RFC 9001<ref name="RFC9001" /> Benutzung von TLS
RFC 9002<ref name="RFC9002" /> Verlusterkennung und Staukontrolle
RFC 9368<ref name="RFC9368" /> Aushandlung kompatibler Versionen
RFC 9369<ref name="RFC9369" /> QUIC Version 2
QUIC im TCP/IP-Protokollstapel:
Anwendung HTTP/3 DNS over QUIC …
Transport QUIC
Transport UDP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token
Bus
Token
Ring
FDDI …

QUIC (ursprünglich ein Akronym für Quick UDP Internet Connections) ist ein auf dem User Datagram Protocol (UDP) aufbauendes zuverlässiges, verbindungsorientiertes und verschlüsseltes Netzwerkprotokoll auf Transportschicht. Es kann Transport Layer Security (TLS) zur kryptographischen Absicherung der Kommunikation nutzen und verfolgt das Ziel, eine höhere Performanz als das Transmission Control Protocol (TCP) zu bieten. QUIC wird von Protokollen wie HTTP/3 und DNS over QUIC (DoQ) verwendet.<ref>Monika Ermert: Internetbeschleuniger: Die IETF lässt das QUIC-Protokoll vom Stapel. In: heise online. 1. Juni 2021, abgerufen am 1. Juni 2021.</ref>

Geschichte[Bearbeiten]

QUIC wurde ursprünglich von der Firma Google Inc. entwickelt und am 20. Juli 2016 zur Standardisierung eingebracht.<ref>IETF-96 : quic. Abgerufen am 12. März 2023.</ref> Im Februar 2017 gründete die Internet Engineering Task Force (IETF) eine entsprechende Arbeitsgruppe.<ref>QUIC Working Group. Abgerufen am 5. April 2017.</ref><ref>Monika Ermert: QUIC kommt quicker: IETF bringt neues Internet-Transportprotokoll voran. Heise, 5. April 2017, abgerufen am 5. April 2017.</ref> Der Standard wurde im Mai 2021 als RFC 8999,<ref name="RFC8999" /> RFC 9000,<ref name="RFC9000" /> RFC 9001,<ref name="RFC9001" /> und RFC 9002<ref name="RFC9002" /> veröffentlicht.<ref name="golem">Sebastian Grüner: Quic ist offizieller Internet-Standard. In: golem.de. 28. Mai 2021, abgerufen am 28. Mai 2021.</ref>

Das von Google geprägte Akronym (für englisch Quick UDP Internet Connections) wird in diesem Zusammenhang als eigenständiger Begriff verwendet und Unterschiede zwischen den verschiedenen Versionen werden in RFC 9000<ref name="RFC9000" /> ausdrücklich betont.

Die durch die IETF standardisierte Variante unterscheidet sich zum Teil erheblich von der durch Google entwickelten Variante.<ref>Manuel Burghard, Benedikt Jaeger: How Good Is QUIC Actually? Hrsg.: Chair of Network Architectures and Services, Department of Informatics Technical University of Munich. München Oktober 2019 (tum.de [PDF]).</ref>

Im Mai 2023 wurde QUIC Version 2 als RFC 9369<ref name="RFC9369" /> veröffentlicht. QUIC Version 2 bringt keine nennenswerten funktionalen Änderungen mit sich, sondern soll primär Ossifikation des Protokolls bekämpfen.

Seit Windows Server2022 Azure Edition und Windows Server 2025 hat Microsoft ebenfalls QUIC implementiert und bietet damit eine Möglichkeit SMB über ungesicherte Netzwerke wie z. B. das Internet zu betreiben.<ref>robinharwood: SMB über QUIC. Abgerufen am 22. Januar 2026 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Hintergrund und Eigenschaften[Bearbeiten]

Datei:Tcp-vs-quic-handshake.svg
Verbindungsaufbau von QUIC im Vergleich zu TCP mit TLS1.2

Als Weiterentwicklung von HTTP hat Google bereits das Protokoll SPDY ausgearbeitet, dessen Neuerungen aber aufgrund von Beschränkungen des darunterliegenden Transmission Control Protocol nicht in vollem Umfang genutzt werden können. Diese Beschränkungen soll das auf UDP basierende QUIC aufheben.<ref>Experimenting with QUIC. In: Chromium Blog. Google, 27. Juni 2013, abgerufen am 29. Juni 2013 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

QUIC schreibt vor, dass die gesendeten Daten mit TLS 1.3 verschlüsselt übertragen werden.<ref>M. Thomson, S. Turner: Using Transport Layer Security (TLS) to Secure QUIC. (txt) IETF, 13. März 2017, abgerufen am 5. April 2017 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Es kommen zwei unterschiedliche Header zum Einsatz. Der erste Header enthält mehr Informationen und dient dem Verbindungsaufbau. Sobald die Verbindung hergestellt wurde, wird der kürzere Header verwendet. Bei einem bekannten Host wird die Verschlüsselung bei einer erneuten Verbindungsherstellung zudem nicht neu ausgehandelt, sondern ab dem ersten Paket verschlüsselt übertragen. Da der Header zu einem großen Teil verschlüsselt wird, sind – im Vergleich zu älteren Protokollen – weniger Metadaten aus dem Header auslesbar. Hierdurch wird einerseits die Privatsphäre der Nutzer besser gewahrt, aber anderseits das Netzwerk-Monitoring und -Management erschwert.<ref>M. Kuehlewind, B. Trammell, D. Druta: Manageability of the QUIC Transport Protocol. (txt) IETF, 9. März 2017, abgerufen am 5. April 2017 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

QUIC bietet höherliegenden Schichten gemultiplexte Verbindungen an, so dass mehrere Datenströme unabhängig voneinander empfangen und gesendet werden können.<ref name="golem" /> Dies kann von HTTP/2 genutzt werden, HTTP/3 wird sogar immer über QUIC genutzt.<ref>Sebastian Grüner: HTTP über Quic wird zu HTTP/3. In: golem.de. 12. November 2018, abgerufen am 29. Mai 2021.</ref> Im Gegensatz dazu kann es bei Multiplexing über TCP zu Verzögerungen auf Grund von Head-of-Line-Blocking aller gemultiplexten Streams kommen, wenn eines der TCP-Pakete verzögert wird oder verloren geht.

Zu den weiteren Zielen von QUIC gehören eine reduzierte Verbindungs- und Transportlatenz sowie eine Geschwindigkeitsabschätzung in beide Richtungen, um Überlastungen zu vermeiden. Außerdem werden die Algorithmen zur Staukontrolle an beiden Endpunkten in den User-Space (anstatt Kernel-Space) verlagert, was eine schnellere Verbesserung dieser Algorithmen ermöglichen soll. Zusätzlich kann das Protokoll mit einer Vorwärtsfehlerkorrektur (FEC) versehen werden, um die Leistung bei zu erwartenden Fehlern weiter zu verbessern, was als nächster Schritt in der Evolution des Protokolls angesehen wird. Es wurde so konzipiert, dass eine Ossifizierung des Protokolls vermieden wird. Es wurde also gezielt so entworfen, dass zukünftige Weiterentwicklungen an QUIC durch Middleboxes möglichst nicht eingeschränkt werden. Bei TCP, welches stark ossifiziert ist, sind Weiterentwicklungen z. B. stark eingeschränkt, da Middleboxes durch verschiedene Verhaltensweisen das Paketformat stark auf das ursprüngliche Format einschränken.

Seit Anfang 2021 sind die grundlegenden Protokollspezifikationen von QUICv1 standardisiert. Zu den wichtigsten weiterhin diskutierten vielfältigen Erweiterungen gehört Multipath, also – analog zu Multipath TCP (MPTCP) – der parallele Verbindungsaufbau zwischen Endgeräten und einem netzseitigen Server über mehrere (z. B. leitungsgebundene und drahtlose) Pfade.<ref>IETF-Vorsitzender im Interview: Lars Eggert über das QUIC-Protokoll. In: heise online. Abgerufen am 6. Mai 2021.</ref>

Unterstützung[Bearbeiten]

QUIC muss von der Anwendung unterstützt werden. Der erste Browser, der clientseitig QUIC unterstützt, war Google Chrome ab Version 29.<ref>Christian Kirsch: Google experimentiert mit UDP fürs Web. In: iX. Heise, 28. Juni 2013, abgerufen am 29. Juni 2013.</ref> Beispielimplementierungen für Client und Server finden sich im Repository von Chromium. Hierbei handelt es sich allerdings noch um die ursprünglich von Google implementierte Variante.

Ab Version 72 hat auch Firefox experimentelle Unterstützung für die vom IETF entwickelte Version implementiert.<ref>Sebastian Grüner: Firefox Nightly unterstützt HTTP/3-Experimente. In: Golem.de. 6. November 2019, abgerufen am 15. November 2019.</ref> Apple fügte den QUIC Support in Version 104 des Safari Webbrowsers hinzu.<ref>Jon Davis: Release Notes for Safari Technology Preview 104. In: WebKit. 8. April 2020, abgerufen am 13. Dezember 2022.</ref>

Im Oktober 2020 gab Facebook bekannt,<ref>Matt Joras, Yang Chi: How Facebook is bringing QUIC to billions. 21. Oktober 2020, abgerufen am 23. Oktober 2020.</ref> dass es sowohl seine Apps auf Android und iOS als auch seine Server-Infrastruktur auf QUIC umgestellt habe und mittlerweile 75 % seines Internet-Datenverkehrs darüber erfolge. Für die Benutzer ergäben sich daraus eindeutig messbare Verbesserungen u. a. hinsichtlich Fehlerraten und Latenzzeiten.

Implementierungen[Bearbeiten]

Für QUIC stehen unterschiedliche Bibliotheken und Referenzimplementierungen zur Verfügung. Die folgende Liste liefert einen Überblick zu Implementierungen, die ihren Source Code veröffentlicht haben.

Implementierung Lizenz Programmiersprache Beschreibung
Chromium BSD-Lizenz C++ Der Source Code des Chrome Web Browser. Dieser dient als Referenzimplementierung für gQUIC. Für Testzwecke stehen sowohl für QUIC als auch gQUIC Server und Client Implementierungen zur Verfügung.
MsQuic MIT-Lizenz C Von Microsoft entwickelte Implementierung des QUIC Protokolls, die sowohl in Windows als auch .NET genutzt wird.
QUIC Library (mvfst) MIT-Lizenz C++ Client und Server Implementierung des QUIC Protokolls durch Meta Platforms.
LiteSpeed QUIC Library (lsquic) MIT-Lizenz C QuIC und HTTP/3 Implementierung des Lite Speed Webservers.
ngtcp2 MIT-Lizenz C Eine QUIC Implementierung, die vor allem auf die Kompatibilität zu unterschiedlichen kryptografischen Bibliotheken Wert legt.
Quiche BSD-2-Clause Lizenz Rust Implementierung in Rust, die zusätzlich eine API für die Verwendung in C und C++ zur Verfügung stellt.
quicly MIT-Lizenz C QUIC Implementierung des H2O Webservers.
quic-go MIT-Lizenz Go QUIC Implementierung des Caddy Webservers.
Quinn Apache-Lizenz 2.0 Rust Eine Implementierung von QUIC zu 100 % in Rust geschrieben.
Neqo Apache-Lizenz 2.0 Rust Implementierung von QUIC in der Necko Bibliothek des Firefox Browsers.
aioquic BSD-3-Clause Lizenz Python QUIC Implementierung in Python, die sowohl für Clients als auch Server verwendet werden kann.
picoquic BSD-3-Clause Lizenz C Minimalimplementierung der Spezifikationen der IETF in C.
pquic MIT-Lizenz C Eine erweiterbare Implementierung von QUIC, die durch die Integration einer eBPF virtuellen Maschine plugins nachladen kann.
QUANT BSD-2-Clause Lizenz C QUIC Implementierung für sowohl POSIX Systeme als auch für Eingebettete Systeme
quic BSD-3-Clause Lizenz Haskell Haskell Implementierung, die sich die leichtgewichtigen Threads zunutze macht.
netty-incubator-codec-quic Apache-Lizenz 2.0 Java Java Implementierung für Netty, die auf den Arbeiten von Quiche basiert.
nodejs-quic MIT-Lizenz NodeJs NodeJs Implementierung von QUIC
s2n-quic Apache-Lizenz 2.0 Rust Open Source Implementierung in Rust durch Amazon Web Services
swift-quic Apache-Lizenz 2.0 Swift Implementierung von QUIC in Swift.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references> <ref name="RFC8999"> Vorlage:RFC-Internet </ref> <ref name="RFC9000"> Vorlage:RFC-Internet </ref> <ref name="RFC9001"> Vorlage:RFC-Internet </ref> <ref name="RFC9002"> Vorlage:RFC-Internet </ref> <ref name="RFC9368"> Vorlage:RFC-Internet </ref> <ref name="RFC9369"> Vorlage:RFC-Internet </ref> </references>