qaware.de
Making the internet faster
HTTP/3 und QUIC
Franz Wimmer
franz.wimmer@qaware.de
@zalintyre
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
Agenda
1. Die Geschichte des WWW
2. HTTP/3 und QUIC
3. Benchmarks
4. Implementierungen
Die Geschichte des WWW
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
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)
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)
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>
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.
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
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>
HTTP/3 und QUIC
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”
QUIC - Quick UDP Internet Connections
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
Verbindungsaufbau im Vergleich
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.
Benchmarks
Bandbreite und Latenz
Handshake-Performance
Benchmark
■ YU, Alexander; BENSON, Theophilus A. Dissecting Performance of Production QUIC. In:
Proceedings of the Web Conference 2021. 2021. S. 1157-1168
Implementierungen
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
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
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

Making the internet faster HTTP/3 und QUIC

  • 1.
    qaware.de Making the internetfaster HTTP/3 und QUIC Franz Wimmer franz.wimmer@qaware.de @zalintyre
  • 2.
    Quarkus Quickstart ■ EngineeringCamp (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
  • 3.
    Agenda 1. Die Geschichtedes WWW 2. HTTP/3 und QUIC 3. Benchmarks 4. Implementierungen
  • 4.
  • 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 kannfü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 einTunnel 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 zuHTTP/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 Anwendungspricht 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>
  • 12.
  • 13.
    Probleme mit HTTP/2und 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”
  • 14.
    QUIC - QuickUDP Internet Connections
  • 15.
    QUIC 2012 bei Googleentwickelt 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
  • 16.
  • 17.
    HTTP/3 – Wasnicht 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.
  • 18.
  • 19.
  • 20.
  • 21.
    Benchmark ■ YU, Alexander;BENSON, Theophilus A. Dissecting Performance of Production QUIC. In: Proceedings of the Web Conference 2021. 2021. S. 1157-1168
  • 22.
  • 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ße32 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