QUIC (Quick UDP Internet Connections) er en protokoll på toppen av UDP som støtter alle funksjonene til TCP, TLS og HTTP/2 og løser de fleste problemene deres. Det kalles ofte en ny eller "eksperimentell" protokoll, men den har lenge overlevd det eksperimentelle stadiet: utviklingen har pågått i mer enn 7 år. I løpet av denne tiden rakk ikke protokollen å bli en standard, men ble likevel utbredt. For eksempel brukes QUIC av slike giganter som Google og Facebook for å øke hastigheten på trafikken og redusere forsinkelser i mobilnettverk, og IETF erklærte at protokollen er grunnlaget for HTTP/3-standarden (selv om HTTP/2 bruker bare 44.8% nettsteder).
Konseptet
QUIC ble utviklet som en erstatning for den eldre TCP, som opprinnelig ble designet for kablede nettverk med lite tap. TCP leverer pakker i rekkefølge, så hvis en pakke går tapt, stoppes hele køen (head-of-line blokkering), som negativt påvirker kvaliteten og stabiliteten til forbindelsen. For å unngå store tap, tyr mobilnettverk til å bruke store buffere, som igjen fører til redundans og falsk negativ respons av protokollen (bufferbloat). I tillegg bruker TCP mye tid på å etablere en forbindelse: SYN/ACK- og TLS-forespørsler behandles separat, og krever tre rundturer i stedet for én, slik QUIC gjør.
Siden QUIC kombinerer en TCP-erstatning og en implementering av TLS 1.3, er alle tilkoblinger alltid kryptert, og å dekryptere slik trafikk er ikke enklere enn om den gikk over HTTPS. I tillegg er QUIC implementert på applikasjonsnivå, som en fullstendig utskifting av TCP-stakken ville kreve evigheten.
Til tross for støtte for multipleksing i HTTP/2, forble problemet med head-of-line blokkering der på grunn av behovet for å levere pakker i rekkefølge. QUIC er implementert på toppen av UDP, så det har ingen blokkering i prinsippet, og for å forhindre at pakker går tapt for alltid, er de nummererte og kan inneholde deler av "naboer", som gir redundans. I tillegg deler QUIC den monolittiske køen i flere tråder for forskjellige typer forespørsler innenfor en enkelt tilkobling. Hvis en pakke går tapt, kan det derfor bare oppstå problemer for én kø (for eksempel for overføring av en bestemt fil):
Bruk
Opprinnelig ble QUIC utviklet innen Google og var i stor grad skreddersydd for bruk i selskapet. I 2013 ble den overført til IETF for standardisering (som fortsatt pågår), og nå kan alle delta i utviklingen av protokollen ved å foreslå det de mangler. IETF-arbeidsgruppen arrangerer årlige møter hvor en ny standard godkjennes og innovasjoner diskuteres. Denne implementeringen av QUIC regnes som den viktigste, og det er på grunnlag av den at HTTP/3-standarden er sertifisert.
Så langt er det ikke snakk om å inkludere HTTP/3 som hovedprotokoll, fordi den ikke er ferdig ennå og nesten ikke støttes:
Men QUIC kan implementeres som en transport mellom applikasjonen og serveren, noe som ble gjort vellykket hos Uber:
Ubers kommentar til introduksjonen av QUIC
For å lykkes med å bygge inn QUIC og forbedre applikasjonsytelsen i dårlige tilkoblingsmiljøer, erstattet vi den gamle stabelen (HTTP/2 over TLS/TCP) med QUIC-protokollen. Vi brukte nettverksbiblioteket Cronet av Chromium-prosjekter, som inneholder den originale Google-versjonen av protokollen - gQUIC. Denne implementeringen blir også stadig forbedret for å følge den nyeste IETF-spesifikasjonen.
Vi integrerte Cronet først i Android-appene våre for å legge til støtte for QUIC. Integrasjonen ble utført på en slik måte at migrasjonskostnadene ble redusert så mye som mulig. I stedet for å fullstendig erstatte den gamle nettverksstabelen som brukte biblioteket OkHttp, har vi integrert Cronet UNDER OkHttp API-rammeverket. Ved å gjøre integrasjonen på denne måten unngikk vi endringer i nettverksanropene våre (som brukes av retrofit) på API-nivå.
I likhet med tilnærmingen for Android-enheter, implementerte vi Cronet i Uber-apper på iOS, og fanget opp HTTP-trafikk fra nettverket APIved hjelp av NSURL-protokoll. Denne abstraksjonen, levert av iOS Foundation, håndterer protokollspesifikke URL-data og sikrer at vi kan integrere Cronet i iOS-applikasjonene våre uten betydelige migreringskostnader.
På backend fanget de QUIC-forbindelser via Google Cloud lb, som støtter protokoll siden midten av 2018.
Det er ingen overraskelse at Google Cloud fungerer bra med den Google-utviklede protokollen, men hva er alternativene?
Nginx
Ikke lenge siden CloudFlare Jeg prøvde å krysse nginx (som ikke støtter HTTP/3 som standard) med Quiche-verktøyet. Implementeringen er tilgjengelig som en enkelt .patch-fil, som kommer med en installasjonsveiledning:
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
Her kan du koble til dine moduler om nødvendig
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
Alt som gjenstår er å aktivere HTTP/3-støtte
events {
worker_connections 1024;
}
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Request buffering in not currently supported for HTTP/3.
proxy_request_buffering off;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
}
Det er ennå ikke mulig å koble til via HTTP/3 i vanlige nettlesere, men du kan bruke Chrome Canary og kjøre den med flagget --enable-quic, gå til serveren din eller for eksempel nettstedet quic.rocks og se på tilkoblingstypen i utviklerverktøy:
I stedet for HTTP/3 skrives det http2+quic/99, men det er i hovedsak det samme.
Andre teknologier
QUIC støtter også Litespeed (som koblet til Facebook via HTTP/3 med stor stas) og progressiv Caddy. Apache kan ikke gjøre det ennå, men arbeidet er i gang full sving.
Forleden åpnet Microsoft msquic implementeringskode, der ikke alle funksjoner fra IETF-standarden er tilgjengelig ennå, men dette er allerede et stort gjennombrudd.
Konklusjon
Interessen for QUIC er ustabil, men økende, og det arbeides med å standardisere den. Nye implementeringer av protokollen dukker opp nesten hver måned, og hvert år er flere og flere utviklere overbevist om at QUIC er fremtiden. Det er til og med mulig å inkludere protokollen i fremtidige versjoner av TCP-stakken, noe som betyr at før eller siden vil hele Internett gå over til mer stabile og raskere tilkoblinger.
Allerede nå kan du konfigurere QUIC-interaksjon for infrastrukturen din eller til og med gi den til nettlesere - de planlegger alle å legge til støtte for protokollen, og den triste statistikken med caniuse vil bli mer munter.