
QUIC (Quick UDP Internet Connections) er en protokoll oppå UDP som støtter alle funksjonene til TCP, TLS og HTTP/2 og løser de fleste av problemene deres. Den kalles ofte en ny eller "eksperimentell" protokoll, men den har for lengst overlevd den eksperimentelle fasen: utviklingen har pågått i mer enn 7 år. I løpet av denne tiden har protokollen ennå ikke blitt en standard, men har likevel blitt utbredt. For eksempel brukes QUIC til å øke hastigheten på trafikken og redusere forsinkelser i mobilnettverk av giganter som Google og Facebook, og IETF erklærte sin forgrening av protokollen som grunnlaget for HTTP/3-standarden (selv om HTTP/2 bruker nettsteder).
Konseptet
QUIC ble utviklet som en erstatning for det utdaterte TCP-systemet, som opprinnelig var designet for kablede nettverk med lav tapsprosent. TCP leverer pakker i rekkefølge, så hvis én pakke går tapt, blir hele køen sittende fast (), noe som påvirker kvaliteten og stabiliteten til forbindelsen negativt. For å unngå massive tap tyr mobilnettverk til bruk av store buffere, noe som igjen fører til redundans og falske negative reaksjoner fra protokollen (I tillegg bruker TCP mye tid på å opprette en forbindelse: SYN/ACK- og TLS-forespørsler sendes separat, noe som krever tre rundturer i stedet for én, slik QUIC gjør.

Siden QUIC kombinerer en TCP-erstatning og en TLS 1.3-implementering, er alle tilkoblinger alltid kryptert, og det er ikke enklere å dekryptere slik trafikk enn om det var over HTTPS. I tillegg er QUIC implementert på applikasjonsnivå, ettersom en fullstendig erstatning av TCP-stakken ville ta evigheten.
Til tross for støtte for multipleksing i HTTP/2, er problemet med blokkering av linjehoder fortsatt der på grunn av behovet for å levere pakker i rekkefølge. QUIC er implementert oppå UDP, så den har ikke blokkering i prinsippet, og for å forhindre at pakker går ugjenkallelig tapt, er de nummerert og kan inneholde deler av "naboer", noe som gir redundans. I tillegg deler QUIC den monolittiske køen inn i flere strømmer for forskjellige typer forespørsler innenfor én forbindelse. Når en pakke går tapt, kan det derfor bare oppstå problemer for én kø (for eksempel for overføring av en bestemt fil):

Bruk
I utgangspunktet ble QUIC utviklet internt i Google og var i stor grad skreddersydd for bruk internt i selskapet. I 2013 ble den overført til IETF for standardisering (som fortsatt pågår), og nå kan hvem som helst delta i utviklingen av protokollen ved å tilby det de spesifikt mangler. IETF-arbeidsgruppen organiserer årlige møter der en ny standard godkjennes og innovasjoner diskuteres. Denne implementeringen av QUIC regnes som den viktigste, og det er på denne grunnlaget HTTP/3-standarden sertifiseres.
Det er ennå 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 med hell hos Uber:
Ubers kommentar om QUIC-implementering
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 av , som inneholder den originale Google-versjonen av protokollen - gQUIC. Denne implementeringen blir også stadig forbedret for å følge den nyeste IETF-spesifikasjonen.
Vi integrerte først Cronet i vår Android-applikasjoner for å legge til QUIC-støtte. Integrasjonen ble implementert for å minimere migreringskostnader. I stedet for å erstatte den gamle nettverksstakken som brukte biblioteket fullstendig , 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 ) på API-nivå.
Ligner på tilnærmingen til Android-enheter, implementerte vi Cronet i Uber iOS-apper, og fanget opp HTTP-trafikk fra nettverket ved hjelp av . 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.
tatt fra Uber-artikler
På backend fanget de opp QUIC-tilkoblinger gjennom Google Cloud lb, som siden midten av 2018.
Det er ingen overraskelse at Google Cloud fungerer utmerket med protokollen utviklet av Google, men hva er alternativene?
Nginx
For ikke lenge siden CloudFlare nginx (som ikke støtter HTTP/3 som standard) med Quiche-verktøyet sitt. Implementeringen er tilgjengelig som en enkelt .patch-fil, som leveres 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 modulene dine 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';
}
}
I vanlige nettlesere er det ennå ikke mulig å koble til via HTTP/3, men du kan ta og kjør den med flagget --enable-quic, kontakt serveren din eller for eksempel quic.rocks-nettstedet og se på tilkoblingstypen i utviklerverktøyene:

I stedet for HTTP/3 skrives det http2+quic/99, men det er i bunn og grunn det samme.
Andre teknologier
- QUIC støttes også (som koblet seg til Facebook med stor fanfare via HTTP/3) og progressiv Apache vet ikke hvordan ennå, men arbeidet pågår. .
- Oppdatert 21. januar
- Bare forleden åpnet Microsoft , som ennå ikke har alle funksjonene fra IETF-standarden tilgjengelig, men dette er allerede et stort gjennombrudd.
Konklusjon

Interessen for QUIC er ustabil, men økende, og det pågår arbeid med å standardisere den. Nye implementeringer av protokollen dukker opp nesten hver måned, og hvert år er flere og flere utviklere overbevist om at fremtiden tilhører QUIC. Det er til og med mulig å inkludere protokollen i fremtidige versjoner av TCP-stakken, noe som betyr at hele Internett før eller siden vil gå over til mer stabile og raskere forbindelser.
Du kan allerede sette opp 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.
Kilde: www.habr.com
