QUIC Server und Clients
Damit QUIC überhaupt zum Einsatz kommt, muss sowohl der HTTP-Server über den "Alt-Svc"-Header die Erreichbarkeit mitteilen und der Client auch QUIC unterstützen und erlauben. Zuletzt muss auch das Netzwerk natürlich 443/UDP zulassen. Viele Firmenfirewalls machen das noch nicht.
Auch wenn ich hier QUIC und HTTP3 beschreibe, ist QUIC einfach nur ein weiteres Transportprotokoll und kann von beliebigen Diensten genutzt werden. Microsoft SMB wird auch QUIC nutzen können.
QUIC Libraries
Ehe wir über die Server und Clients sprechen, müssen sie sich noch einmal in Erinnerung rufen, was ich auf Was ist QUIC? beschrieben habe: QUIC ist nicht Bestandteil des TCP/IP-Stacks des Betriebssystems, sondern ein auf UDP aufgesetztes eigenes Transportprotokoll. Es gibt natürlich z.B. von Microsoft eine Implementierung namens "msquic" aber im Grunde obliegt es den Entwicklern der Server und Clients, ob Sie QUIC selbst implementieren oder eine bestehende Library nutzen. Es gibt, anders als bei der SOCKETS-Schnittstelle wohl auch keinen Standard zur Kommunikation mit solchen Libraries, so dass der Wechsel nicht mal eben schnell gemacht ist. Folgende Libraries habe ich gefunden.
Name | Sprache | Beschreibung und Links |
---|---|---|
msquic |
C/C++/C# |
Mit dem .NET Framework 7 hat Microsoft eine Klasse "[System.net.quic]" eingeführt, die ihrerseits auf einem C++-Modul basiert.
|
aioquic |
Python |
|
lsquic |
C |
|
ngtcp2 |
C |
|
quic-go |
Go |
|
mvfst |
C++ |
|
picoquic |
C |
Welche nun die beste Library ist, kann ich noch nicht sagen.
- QUIC Working group: Implementations
https://github.com/quicwg/base-drafts/wiki/Implementations - Comparison of Different QUIC Implementations
https://www.net.in.tum.de/fileadmin/TUM/NET/NET-2022-07-1/NET-2022-07-1_10.pdf
QUIC Server
Die Frage ist hier natürlich, welcher Webserver im Backend die Anfragen beantwortet. Im Juni 2021 ist der Support noch eingeschränkt. Wobei es gerade bei den UNIX-Systemen eher an OpenSSL hängt, auf dem die Webserver aufsetzen. Mögliche Server und Clients sind aber nicht auf "Browser/Webserver" beschränkt. Jeder Dienst, der bislang HTTP als Transport nutzt, kann im Prinzip auch QUIC nutzen.
Server | Ab Version | Links |
---|---|---|
NGNIX |
? |
|
Apache |
? |
Vermutlich warten auf OpenSSL |
OpenSSL |
2024 |
Viele UNIX-basierte Dienste, die TLS-Verschlüsselung mittels OpenSSL bereitstellen, können davon profitieren, wenn OpenSSL auch QUIC unterstützt. Ende 2023 habe ich erste Quelle gefunden, die dies versprechen
|
IIS |
Ab Win2022 |
Windows 2022 Server unterstützt QUIC und die Funktion ist per Default auch aktiv, aber kann in den HTTPS-Bindungen deaktiviert werden. Denken Sie daran, dass Sie für QUIC aber erst TLS 1.3 aktivieren müssen. Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:ffffffff [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:ffffffff Für die Nutzung im IIS müssen Sie noch folgende Werte addieren. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters] "EnableHttp3"=dword:00000001 "EnableAltSvc"=dword:00000001 Prüfen Sie bitte die aktuelle Microsoft Dokumentation
|
Windows HTTPListener |
? |
Ich habe noch keine Quellen gefunden, die den einfachen HTTP-Listener, den ich gerne in PowerShell-Skripten nutze, für QUIC aktivieren. |
Safari (MAC) |
|
|
SMB |
|
Leider gibt es QUIC mit SMB nur auf Windows Server 2022 in Azure. Vielleicht möchte Microsoft da erst noch etwas Erfahrungen sammlen und QUIC spielt seine Stärke ja auch eher im WAN aus. SMB over
QUIC updates the SMB 3.1.1
protocol in Windows Server
2022 Datacenter: Azure
Edition and supported
Windows clients to use the
QUIC protocol instead of
TCP. By using SMB over QUIC
along with TLS 1.3, users
and applications can
securely and reliably access
data from edge file servers
running in Azure. Mobile and
telecommuter users no longer
need a VPN to access their
file servers over SMB when
on Windows. More information
can be found at the SMB
over QUIC documentation. Windows OnPremises bekommt das Feature im Jahr 2024
|
C++, C#, Python |
NET 7 |
|
Weitere |
|
Im Prinzip kann jede Client/Server-Kombination, die heute schon HTTPS/TCP nutzt auch HTTP3/QUIC über UDP nutzen. |
Denken Sie auch an Firewall und Proxy. QUIC spielt seine Stärke aus, wenn der Client und Server direkt per UDP über Port 443 miteinander kommunizieren können. Ein klassischer HTTP-Proxy ist auf UDP/443 taub. Eine Firewall lässt aber meist UDP 443 per Default nicht zu. Sie kann dies aber machen, wenn Sie zugleich im Handshake einige Dinge nach Firmenvorgabe prüfen kann.
- Microsoft and QUIC
https://blog.workinghardinit.work/2021/06/30/microsoft-and-quic - HTTP/3 test servers Documentation for early HTTP/3 testing (with
curl and more)
https://bagder.github.io/HTTP3-test/ - WHERE IS HTTP/3 RIGHT NOW?
https://daniel.haxx.se/blog/2021/04/02/where-is-http-3-right-now - QUIC and OpenSSL
https://www.openssl.org/blog/blog/2020/02/17/QUIC-and-OpenSSL/ - QUIC Interop Runner
https://interop.seemann.io/ - quicwg / base-drafts - QUIC Protocol Drafts
https://GitHub.com/quicwg/base-drafts/wiki/Implementations - The state of QUIC and HTTP/3 2020
https://www.fastly.com/blog/state-of-quic-and-http3-2020 - Cloudflare Radar
https://radar.cloudflare.com/ - QUIC, HURRY UP!
https://www.starwindsoftware.com/blog/smb-over-quic
QUIC auf Clients
Natürlich muss auch der Client den Weg über QUIC wählen. Aktuell sind es Browser, die QUIC nutzen und dies wohl über die IP-Sockets ansprechen. Ich wüsste nicht dass, dass die Funktion aktuell in einem Betriebssystem enthalten ist und ich ich erwarte dies auch nicht. QUIC ist ja kein neues Protokolll neben UDP und TCP sondern setzt höher auf UDP auf. Daher sind eher Webserver und Browser entsprechende Komponenten, in denen QUIC implementiert werden muss und mit HTTP/3 arbeiten. Die meisten Browser unterstützen dies aber schon einige Zeit:
Quelle
https://caniuse.com/http3 (Sep 2023)
Es kann sein, dass Sie QUIC vielleicht noch einschalten müssen oder es vielleicht sogar ausschalten wollen.
Client | QUIC Support |
---|---|
Chrome |
Ja
|
Firefox |
Ja ab Version 88
|
Edge (Chromium) |
Ja
|
MSEdgeWebView2 |
Ja |
PowerShell "Invoke-WebRequest |
Da der Abruf immer nur genau eine URL und eine Datei überträgt, macht QUIC erst einmal keinen Sinn. Erst wenn Sie viele URLs abrufen und der Unterbau ein Connection-Pooling macht, wäre hier QUIC ein Thema. |
Windows WinHTTP |
? |
CURL |
Ja
|
Leider habe ich noch keine im Browser eingebaute Funktion gesehen, die die Nutzung on QUIC als Icon o.ä. darstellt. Es gibt aber wohl Addons
Weitere Links
- QUIC Working group: Implementations
https://github.com/quicwg/base-drafts/wiki/Implementations - Comparison of Different QUIC Implementations
https://www.net.in.tum.de/fileadmin/TUM/NET/NET-2022-07-1/NET-2022-07-1_10.pdf