Netwerken 3
00
Hoofdstuk 12

HTTP/3 & QUIC

HTTP over QUIC (UDP): sneller opzetten, geen HOL-blocking, connection migration

0%
voltooid

1HTTP/1.1, HTTP/2 en HTTP/3 vergeleken

HTTP/1.1HTTP/2HTTP/3
Jaar1991 (1.1: 1997)2015 (RFC 7540)2022 (RFC 9114)
FormaatASCII (tekst)Binair, gemultiplextBinair, gemultiplext
TransportTCPTCPQUIC over UDP
VerbindingenVeel parallelle (~6 per host), "connectiebom"1 verbinding, ~100 parallelle streams1 QUIC-verbinding met onafhankelijke streams
VersleutelingOptioneel (TLS)Praktisch altijd TLS 1.2+Altijd TLS 1.3 (ingebouwd)
HandshakeTCP (+ TLS)TCP + TLS: 2 aparte handshakes1-RTT, herhaald bezoek 0-RTT
HOL-blockingPer connectie (daarom 6)Op TCP-niveau: verloren pakket blokkeert alle streamsAlleen de getroffen stream
Header-compressieNeeHPACKQPACK
Migratie netwerkNee (IP+poort)Nee (IP+poort)Ja via Connection ID
HTTP/2 stack
  • HTTP/2
  • TLS 1.2+
  • TCP
  • IP
HTTP/3 stack
  • HTTP/3
  • QUIC (met TLS 1.3 erin)
  • UDP
  • IP
  • HTTP/1.1: elke afbeelding = aparte TCP-connectie; browsers openen ~6 per url
  • HTTP/2: multiplexing van parallelle streams over 1 connectie + header-compressie. Probleem: TCP head-of-line blocking
  • HTTP/3: zelfde HTTP-semantiek, maar over QUIC (geen afkorting, gewoon een naam; gestart in 2015 als Google QUIC)
Eén QUIC-verbinding met onafhankelijke streams over UDP.
Eén QUIC-verbinding met onafhankelijke streams over UDP.
+25 XP

2Hoe HTTP/3 HTTP/2 versnelt

Handshake: HTTP/2 vs HTTP/3
Stap 1 van 5
HTTP/2: TCP

SYN, SYN-ACK, ACK (1 RTT).

VerbeteringUitleg
Snellere handshakeGeen aparte TCP- en TLS-handshake; QUIC doet TLS 1.3 zelf (zoals TLS, maar niet als aparte verbinding). Daarna zijn sleutels vernieuwd en alles versleuteld.
0-RTTHervatting van een eerdere sessie: data meteen in de handshake. Bestaande TCP Fast Open (URL in SYN) bleek een ramp om te implementeren.
Geen HOL-blockingElke stream onafhankelijk: verliest een stream een pakket, dan wachten de andere niet.
Connection migrationConnection ID blijft gelijk bij netwerkwissel.
Loss recoveryHerverzenden en flow control per stream, in QUIC zelf.
Snellere upgradesOverstap naar QUIC v2 gebeurt binnen de encryptie; stack in user space (geen OS-update nodig).

Resultaat (Google): traagste 1 % van de verbindingen wint ~1 s; 18 % minder bufferen voor YouTube; 75 % van de connecties profiteert van 0-RTT; zoekpagina 3 % sneller.

+25 XP

3TCP head-of-line blocking en connection migration

HTTP/2 over TCP
  • TCP ziet 1 bytestroom en weet niets van streams
  • Verloren segment: TCP houdt alle later aangekomen data vast tot herverzonden
  • Rode stream blokkeert, dus groen en blauw ook
HTTP/3 over QUIC
  • Streams zijn onafhankelijk binnen 1 verbinding
  • Verlies in stream A: alleen A wacht
  • Blauw blokkeert, geel niet

Connection migration: TCP identificeert een verbinding met 4-tuple (IP + poort bron/doel). Wissel je van 5G naar WiFi, dan verandert je IP: de TCP-verbinding breekt. QUIC geeft elke verbinding een Connection ID, uniek voor de sessie. Je verandert van netwerk met dezelfde Connection ID, dus de verbinding blijft bestaan (download of videocall wordt niet onderbroken).

+25 XP

4QUIC: UDP, user space en beveiliging

  • QUIC = nieuw transportprotocol: betrouwbaar, secure, sneller, bovenop UDP
  • UDP zelf = connectionless, geen hersturen, geen flow control. QUIC voegt dat toe: connecties, streams (meerdere logische flows), hersturen, flow control, congestion control
  • Draait in user space (niet in de OS-kernel): snel te updaten, maar CPU-intensiever
  • Altijd versleuteld: geen clear-text versie, minimaal TLS 1.3. Enkel moderne cipher suites (AES-GCM, ChaCha20-Poly1305), geen RSA-key-exchange/oude rommel
  • HTTP/3 URL is dezelfde als HTTP/2, poort 443 (UDP voor QUIC, TCP voor HTTP/2)
AspectWaarde
Stack-laag TLSTLS-encryptie binnen de transportlaag, niet op applicatielaag
Cipher suitesTLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_GCM_SHA256 (+ twee CCM-varianten)
HandshakeInitial-pakket met ClientHello, Initial-pakket van server met ServerHello (nonces + TLS 1.3-parameters), dan sleutels updaten; rest versleuteld
+25 XP

50-RTT en replay-aanvallen

0-RTT hergebruikt een vorige sessie (zelfs een dag later) zodat de client meteen data kan sturen zonder wachten op de handshake. Nadeel: replay-aanval. Een aanvaller kan het versleutelde 0-RTT-pakket opnieuw sturen en de server voert het nogmaals uit.

+25 XP

6Ossification: probleem met een nieuw transportprotocol

  • Middleboxes/firewalls/NAT: filteren en wijzigen op protocol-nummer of poort; onbekend transport = geblokkeerd of niet vertaald
  • Zelfs aanpassen van TCP is moeilijk: middleboxes verwerpen onbekende opties (bv. TCP Fast Open)
  • Kernel-updates: TCP zit in het besturingssysteem, uitrol duurt jaren. QUIC zit in user space (apps/browsers updaten snel)
  • Oplossing QUIC: bouwen bovenop UDP (gaat overal door) en alles versleutelen, zodat middleboxes het niet kunnen lezen of verknoeien. Ook de upgrade naar QUIC v2 gebeurt binnen de encryptie.
UitdagingDetail
Falende verbindingen3-7 % van QUIC-pogingen faalt (UDP geblokkeerd): fallback naar TCP nodig
CPU-gebruikQUIC is CPU-intensief; TLS en UDP-API zijn niet geoptimaliseerd voor elkaar (TLS is op TCP gemaakt)
APIsGeen standaard: ~15 verschillende QUIC-stacks, allemaal in user land
MonitoringOperators kunnen niets volgen door encryptie
+25 XP

7Spin bit: operators kunnen bijna niets zien

Omdat alles versleuteld is, kunnen netwerkoperators connecties niet analyseren. De spin bit is één bewust zichtbare bit in de header: client en server spiegelen hem om en om (0, dan 1, dan 0, ...) in beide richtingen. Een observer ziet zo dat pakketten bij dezelfde connectie/conversatie horen en kan de RTT (en dus latency/verlies) grof meten, zonder inhoud te zien.

  • Operators zien verder bijna niets, tenzij ze een eigen CA hebben en als MITM optreden (gebeurt in China)
  • Tegenhanger: Connection ID verbergt de sessie ook bij wisselend IP
+25 XP

8Hoe schakelt een browser over naar QUIC?

Overschakelen naar HTTP/3
Stap 1 van 4
Eerste bezoek via TCP

Browser maakt gewone HTTPS-verbinding (HTTP/2 over TCP/TLS) op poort 443.

http
HTTP/2 200 OK
content-type: text/html
alt-svc: h3=":443"; ma=86400
Response header die HTTP/3 aankondigt
+25 XP
Volgende stap

Nog niet klaar? Je kan altijd terugkomen.

Leer de begrippen