Linux-Stammtisch, Making the internet faster HTTP/3 und QUIC, 27. Juli 2021, online: Vortrag von Franz Wimmer, (@zalintyre, Senior Software Engineer bei QAware)
== Bitte Folien herunterladen, falls sie unscharf sein sollten! =
Abstract:
Mit QUIC und HTTP/3 das Internet beschleunigen. Erfahre mehr über die Entwicklung des WWW, Benchmarks und die Implementierung von HTTP/3.
2. Quarkus Quickstart
■ Engineering Camp (internal), 2021
Pentests für Einsteiger – das Metasploit Framework und andere Tools
■ Linux-Stammtisch München, 2020
A deep dive into CockroachDB
■ Cloud Native Night Munich, 2020
Private meets Enterprise: Auswertung von Tinder-Daten
mit Apache Ignite
■ MRMCD Darmstadt, 2018
Leveraging the power of SolrCloud and Spark
with OpenShift
■ Munich Kubernetes/Cloud-Native Meetup 2018
Ransomware vs. Antivirus
■ MRMCD Darmstadt, 2017
5. Google IETF
3
Google IETF
2
Autor: Tim Berners-Lee IETF
Version 1
Die Geschichte des WWW
Zeitleiste
5
HTTP 0.9 HTTP 1.0 HTTP 1.1 SPDY HTTP/2 HTTP/3
1991 1996 1997 2012 2015 2013 2019
QUIC
6. HTTP/0.9: Erster Entwurf
Autor: Tim Berners-Lee, 1991
Anfrage besteht nur aus einer
einzigen Zeile
Der Server antwortet mit einem
Dokument (HTML)
$> telnet google.com 80
Connected to 74.125.xxx.xxx
GET /about/
(hypertext response)
(connection closed)
7. HTTP/1.0
Ein Response-Status wird
eingeführt (200 / 404 / etc).
Request und Response können
jetzt Header enthalten.
$> telnet website.org 80
Connected to xxx.xxx.xxx.xxx
GET /rfc/rfc1945.txt HTTP/1.0
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Accept: */*
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 01 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 1 May 1996 12:45:26 GMT
Server: Apache 0.84
(plain-text response)
(connection closed)
8. HTTP/1.1
Eine TCP-Verbindung kann für
mehrere HTTP-Requests
genutzt werden (Connection:
Keep-Alive).
Die Requests erfolgen aber
seriell.
Aushandlung von Content,
Encoding, Sprache, etc.
$> telnet website.org 80
Connected to xxx.xxx.xxx.xxx
GET /index.html HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=0, no-cache
Transfer-Encoding: chunked
<!DOCTYPE html>
9. SPDY
SPDY ist ein Tunnel um HTTP/HTTPS.
Requests werden modifiziert.
■ Keine Anpassung der Anwendung nötig.
Features:
■ Kompression
■ HTTP-Header werden nicht mehrfach gesendet
SPDY erfordert die TLS-Extension“Next Protocol Negotiation” (NPN) im Server und im Browser.
SPDY ist deprecated.
10. HTTP/2
Voll abwärtskompatibel zu HTTP/1.1.
Der Server kann ungefragt Resourcen zum Client pushen.
Der Standard umfasst HTTP und HTTPS.
■ Setzt die TLS-Extension “Application-Layer Protocol Negotiation” (ALPN) voraus.
■ Alle Browser unterstützen mit HTTP/2 nur noch mit TLS.
Kein Head of Line Blocking (HOL) mehr *
Clients fragen immer mit HTTP/1.1 an. HTTP/2 wird deshalb ausgehandelt.
* Im Application Layer
11. Hilfe, meine Anwendung spricht kein HTTP/2!
Ich will HTTP/2 Server Push
einsetzen, aber mein Appserver
kann das nicht!?
Kein Problem! Nginx als
Frontend-Webserver kann das.
Der Appserver muss nur einen
Link-Header mitsenden:
GET / HTTP/1.1
Host: rosencrime24.de
HTTP/1.1 200 OK
content-type: text/html; charset=UTF-8
Link: </style.css>; as=style; rel=preload
<content>
13. Probleme mit HTTP/2 und TCP
HTTP/2 löst nicht das Problem des “TCP Head of
Line Blocking”.
Über eine TCP-Verbindung werden viele
Dokumente übertragen.
Wenn auf dem Weg ein TCP-Paket verloren geht,
wird die ganze Verbindung angehalten.
■ “TCP Retransmission”
15. QUIC
2012 bei Google entwickelt
Protokoll: UDP, Port 443
Übernimmt Funktionen von TCP und TLS
■ Verbindung wird in Streams aufgeteilt
■ Non-Blocking
■ Es werden weiter korrekte Daten zugestellt, auch wenn ein Stream gerade repariert werden muss
Jedes Paket ist einzeln verschlüsselt
Auf Anwendungsebene implementiert
■ Nicht im Kernel, wie z.B. TCP
Ziel: Overhead beim initialen Handshake reduzieren
17. HTTP/3 – Was nicht mehr geht
Load Balancing / Network Management mit TCP war einfach.
■ Pakete einer TCP-Verbindung landen immer beim richtigen Server (sticky sessions).
Überwachung wird eingeschränkt (mandatory encryption).
Bei UDP gibt es keine Sequenznummer im Header.
■ Die Infrastruktur muss jetzt die Connection ID im QUIC-header beachten.
21. Benchmark
■ YU, Alexander; BENSON, Theophilus A. Dissecting Performance of Production QUIC. In:
Proceedings of the Web Conference 2021. 2021. S. 1157-1168
23. Implementierungen von HTTP/3
Browser:
■ Chrome (> 87), Firefox (> 88), Edge (> 87) und Opera (> 74) unterstützen HTTP/3
Webserver:
■ nginx: Entwickungsbranch mit QUIC vorhanden
■ Apache: Kein Kommentar zu HTTP/3
■ HAproxy: Implementierung geplant (Mailingliste)
Tools:
■ curl unterstützt HTTP/3 seit Version 7.66.0.
■ wget: Kein Kommentar zu HTTP/3
24. Quellen
Grafiken:
■ https://ably.com/topic/http3
■ https://kinsta.com/de/blog/http3/
■ https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/129618/QUIC-authors-
copy.pdf
Paper:
■ YU, Alexander; BENSON, Theophilus A. Dissecting Performance of Production QUIC. In:
Proceedings of the Web Conference 2021. 2021. S. 1157-1168.
■ https://cs.brown.edu/~tab/papers/QUIC_WWW21.pdf
25. qaware.de
QAware GmbH
Aschauer Straße 32
81549 München
Tel. +49 89 232315-0
info@qaware.de
twitter.com/qaware
linkedin.com/company/qaware-gmbh
xing.com/companies/qawaregmbh
slideshare.net/qaware
github.com/qaware
Q & A