QUIC (Quick UDP Internet Connections) to nowoczesny protokół transportowy zbudowany na UDP, który łączy w sobie funkcje, jakie do tej pory ogarniały osobno TCP i TLS. To na nim stoi HTTP/3. Mówiąc wprost: kiedy otwierasz dziś stronę przez HTTP/3, pod spodem zamiast klasycznego TCP gada właśnie QUIC. Protokół został ustandaryzowany przez IETF w maju 2021 roku jako RFC 9000, a zaczął się jako eksperyment Google jeszcze około 2012-2013 roku.
Jak to działa i po co to komu
Klasyczny stos to TCP + TLS, gdzie najpierw nawiązujesz połączenie TCP (handshake), a potem osobno dogadujesz szyfrowanie TLS. To dwie rundy w tę i z powrotem, zanim w ogóle poleci pierwszy bajt danych. QUIC scala to w jedno: szyfrowanie (oparte na TLS 1.3) jest wbudowane w sam protokół, więc połączenie wstaje w jednym handshake’u (1-RTT), a przy ponownym połączeniu z tym samym serwerem nawet w trybie 0-RTT. Mniej rund, niższe opóźnienie.
Druga duża rzecz to multipleksowanie strumieni bez head-of-line blocking. W HTTP/2 po TCP jeden zgubiony pakiet blokował wszystkie strumienie naraz, bo TCP gwarantuje kolejność dla całego połączenia. QUIC trzyma strumienie niezależnie, więc strata pakietu w jednym nie zatrzymuje pozostałych. Bonusem jest connection migration: połączenie identyfikuje connection ID, a nie para IP:port, więc przy przełączeniu z Wi-Fi na LTE sesja się nie zrywa.
Przykład z praktyki
Chcesz sprawdzić, czy serwer faktycznie serwuje HTTP/3 po QUIC? Nowsze curl (zbudowane z obsługą HTTP/3) zrobi to jedną flagą:
curl --http3 -I https://www.cloudflare.com
W odpowiedzi zobaczysz status i nagłówki przesłane już po QUIC. Możesz też podejrzeć nagłówek alt-svc: h3=":443" na zwykłym żądaniu HTTPS, bo przeglądarka właśnie z niego dowiaduje się, że warto spróbować HTTP/3. W Wiresharku filtruj po quic, żeby zobaczyć ruch.
Na co uważać
Najczęstszy mit: QUIC to po prostu szybszy TCP. Nie, to osobny protokół na UDP i ma własną logikę kontroli przeciążenia oraz retransmisji. Drugi problem: niektóre firmowe firewalle i NAT-y domyślnie blokują albo dławią UDP na porcie 443, więc QUIC nie wstaje i wszystko po cichu spada z powrotem na TCP. Jeśli debugujesz dziwne spadki wydajności, sprawdź właśnie to. Pamiętaj też, że QUIC jest zaszyfrowany niemal w całości, łącznie z większością metadanych transportu, więc stare narzędzia do podglądu ruchu pokażą ci niewiele.
Pojęcia powiązane
HTTP/3, HTTP/2, TCP, UDP, TLS 1.3, head-of-line blocking, RTT, connection migration, alt-svc.