HTTP/3 może działać nad UDP i nadal zapewniać niezawodne przesyłanie danych
UDP często przedstawia się jako protokół „bez gwarancji”, a TCP jako ten „niezawodny”, więc HTTP działające nad UDP brzmi jak krok wstecz. HTTP/3 wykorzystuje jednak QUIC: protokół transportowy działający nad UDP, który sam implementuje niezawodne dostarczanie, kontrolę przeciążenia, retransmisje i bezpieczne połączenie. RFC 9114 definiuje HTTP/3 jako mapowanie semantyki HTTP na QUIC. UDP jest tu przede wszystkim prostą warstwą pozwalającą QUIC działać w przestrzeni użytkownika i przechodzić przez istniejącą infrastrukturę; brak gwarancji UDP nie oznacza braku gwarancji całego stosu.
UDP daje datagram, nie gotową niezawodność
UDP nie tworzy uporządkowanego strumienia bajtów, nie retransmituje automatycznie zgubionych datagramów i nie prowadzi klasycznego mechanizmu kontroli przeciążenia dla aplikacji. To jednak opis tego, czego UDP samo nie robi, a nie zakaz budowania takich funkcji wyżej. Aplikacja lub protokół działający nad UDP może dodawać własne numery pakietów, potwierdzenia, timery i algorytmy sterujące.
QUIC buduje transport nad UDP
RFC 9000 definiuje QUIC jako bezpieczny, multipleksowany protokół transportowy oparty na UDP. QUIC ma własną przestrzeń numerów pakietów, potwierdzenia, wykrywanie strat i retransmisję informacji w nowych pakietach. Zapewnia też uporządkowane strumienie bajtów wewnątrz pojedynczych strumieni, więc aplikacja HTTP nie musi samodzielnie odtwarzać wszystkich braków.
HTTP/3 nie wysyła strony jako „gołych UDP”
RFC 9114 określa, jak żądania, odpowiedzi i pola HTTP są przenoszone w strumieniach QUIC. To ważne rozróżnienie: pakiet UDP jest zewnętrznym kontenerem transportowym, a nie całym mechanizmem HTTP/3. Stwierdzenie „HTTP/3 używa UDP” jest prawdziwe, ale bez wspomnienia QUIC tworzy mylne wrażenie, że przeglądarka zrezygnowała z odzyskiwania zgubionych danych.
Dlaczego nie po prostu rozszerzyć TCP
TCP jest zwykle implementowany w jądrze systemu operacyjnego, a jego rozwój i wdrażanie nowych zachowań może zależeć od aktualizacji wielu warstw systemu. QUIC został zaprojektowany tak, by większą część logiki transportu można było aktualizować razem z aplikacją lub biblioteką, jednocześnie korzystając z UDP, które istniejące systemy sieciowe już potrafią przekazywać.
Szyfrowanie jest częścią projektu
QUIC integruje ustanawianie bezpiecznego połączenia z transportem zamiast traktować je jako całkowicie osobną warstwę nakładaną po ustanowieniu TCP. HTTP/3 korzysta z tej właściwości. Nie oznacza to, że UDP samo szyfruje dane; szyfrowanie zapewnia QUIC przy użyciu TLS 1.3. Dzięki ścisłej integracji część etapów zestawiania połączenia można połączyć.
Warstwy można zamienić miejscami
Historia HTTP/3 pokazuje ważną cechę Internetu: funkcja nie jest na zawsze przypisana jednej nazwie protokołu. TCP tradycyjnie dostarcza niezawodność HTTP, ale QUIC może zapewnić podobne i dodatkowe własności nad prostszym UDP. To, że niższa warstwa czegoś nie gwarantuje, nie oznacza, że wyższa nie może zbudować tej gwarancji samodzielnie.
UDP pomaga QUIC ominąć problem wdrażania nowego transportu
Internet pełen jest urządzeń pośrednich, firewalli i systemów NAT, które przez lata nauczyły się obsługiwać TCP i UDP. Wprowadzenie zupełnie nowego numeru protokołu IP mogłoby oznaczać, że część tych urządzeń po prostu odrzuci ruch. QUIC opakowuje swój transport w UDP, dzięki czemu korzysta z istniejącej ścieżki obsługiwanej przez powszechną infrastrukturę, a jednocześnie może rozwijać własne mechanizmy w oprogramowaniu końcówek. To przykład praktycznego kompromisu ewolucji Internetu: nowoczesny protokół nie działa na czystej kartce, lecz musi przeżyć kontakt z milionami urządzeń zaprojektowanych dla starszego świata. Użycie UDP nie wynika więc tylko z prostoty nagłówka; jest też sposobem na wdrażanie nowych zachowań transportowych bez czekania, aż cały Internet nauczy się nowego protokołu warstwy IP. Taki układ ma też konsekwencję dla tempa rozwoju. Zmiana algorytmu w implementacji QUIC może trafić do użytkowników wraz z aktualizacją przeglądarki lub biblioteki, bez oczekiwania na wymianę jądra systemu we wszystkich urządzeniach. Oczywiście zgodność z protokołem nadal musi zostać zachowana, ale przestrzeń użytkownika ułatwia eksperymentowanie i wdrażanie nowych wersji zachowania transportu.