
QUIC (Quick UDP Internet Connections) er en protokol over UDP, der understøtter alle funktioner fra TCP, TLS og HTTP/2 og løser de fleste af deres problemer. Den kaldes ofte for en ny eller "eksperimentel" protokol, men den har længe oversteg eksperimentfasen: udviklingen har været i gang i over 7 år. I løbet af denne tid er protokollen ikke blevet en standard, men har alligevel opnået bred udbredelse. For eksempel bruger giganter som Google og Facebook QUIC til at accelerere trafik og reducere forsinkelser i mobilnetværk, mens IETF har erklæret sin fork af protokollen som grundlaget for standarden HTTP/3 (hvorimod HTTP/2 kun bruger af webstederne).
Koncept
QUIC blev udviklet som en erstatning for den forældede TCP, som oprindeligt var designet til kablede netværk med lavt tab. TCP leverer pakker i rækkefølge, så når en pakke går tabt, stopper hele køen (), hvilket har en negativ indvirkning på kvaliteten og stabiliteten af forbindelsen. For at undgå massetab bruger mobilnetværk store buffere, hvilket igen fører til overflødighed og falske negative reaktioner i protokollen (). Desuden bruger TCP meget tid på at etablere forbindelsen: SYN/ACK og TLS-anmodninger sendes separat, hvilket kræver tre roundtrips i stedet for én, som QUIC gør.

Da QUIC kombinerer en erstatning for TCP og implementeringen af TLS 1.3, er alle forbindelser altid krypterede; det er ikke lettere at dekryptere denne trafik end hvis den blev sendt over HTTPS. Desuden er QUIC implementeret på applikationsniveau, da en fuldstændig erstatning af TCP-stakken ville tage evigheder..
På trods af understøttelsen af multiplexing i HTTP/2, forbliver problemet med head-of-line blocking der, på grund af nødvendigheden af at levere pakker i rækkefølge. QUIC er implementeret over UDP, så der er i princippet ingen blokeringer, og for at undgå, at pakker går tabt permanent, nummereres de og kan indeholde dele af "naboer" for at sikre overflødighed. Derudover opdeler QUIC den monolitiske kø i flere strømme til forskellige typer forespørgsler inden for en enkelt forbindelse. Således kan problemer kun opstå i én kø (for eksempel ved overførslen af en bestemt fil) ved pakke tab:

Brugen af
Oprindeligt blev QUIC udviklet internt i Google og var i høj grad tilpasset brug i virksomheden. I 2013 blev det overdraget til IETF for standardisering (som stadig pågår), og nu kan alle deltage i udviklingen af protokollen ved at foreslå, hvad der mangler netop for dem. IETF-arbejdsgruppen organiserer årligt møder, hvor der fastsættes en ny standard, og der diskuteres nyheder. Denne QUIC-implementering betragtes som den primære, og det er på dens grundlag, at HTTP/3-standarden certificeres.
Indtil videre er der ikke tale om at inkludere HTTP/3 som den primære protokol, fordi den stadig ikke er færdig og næsten ikke understøttes:

Men QUIC kan implementeres som transport mellem applikationen og serveren, hvilket Uber har gjort med succes:
Ubers kommentar om implementeringen af QUIC
For at integrere QUIC succesfuldt og forbedre applikationens ydeevne under dårlige forbindelser, erstattede vi den gamle stak (HTTP/2 over TLS/TCP) med QUIC-protokollen. Vi anvendte netværksbiblioteket af , som indeholder den originale, Google-version af protokollen – gQUIC. Denne implementering forbedres konstant for at følge den nyeste IETF-specifikation.
Først integrerede vi Cronet i vores Android-applikationer for at tilføje støtte til QUIC. Integrationen blev udført på en måde, der minimerede migrationsomkostningerne. I stedet for helt at erstatte den gamle netværksstak, der brugte biblioteket , integrerede vi Cronet UNDER OkHttp API-rammen. Ved at udføre integrationen på denne måde undgik vi ændringer i vores netværksanrop (som bruger ) på API-niveau.
Ligesom med tilgangen til Android-enhederne implementerede vi Cronet i Uber-applikationer på iOS ved at intercept HTTP-trafik fra netværks , ved hjælp af . Denne abstraktion, som tilbydes af iOS Foundation, håndterer protokolspecifikke URL-data og sikrer, at vi kan integrere Cronet i vores iOS-applikationer uden væsentlige migrationsomkostninger.
taget fra af artiklen fra Uber
På backend fanger de QUIC-forbindelser gennem Google Cloud lb, som siden midten af 2018.
Det er ikke overraskende, at Google Cloud fungerer godt med en protokol udviklet af Google, men hvilke alternativer er der?
Nginx
For ikke så længe siden forsøgte CloudFlare nginx (som som standard ikke understøtter HTTP/3) med deres værktøj Quiche. Implementeringen er tilgængelig som en enkelt .patch-fil, som inkluderer en installationsguide:
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.patchHer kan du tilføje dine moduler om nødvendigt
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
makeDet er kun tilbage at aktivere HTTP/3 understøttelse
events {
worker_connections 1024;
}
http {
server {
# Aktiver QUIC og HTTP/3.
listen 443 quic reuseport;
# Aktiver HTTP/2 (valgfrit).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Aktiver alle TLS-versioner (TLSv1.3 kræves for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Anmodningsbuffer ikke understøttes i øjeblikket for HTTP/3.
proxy_request_buffering off;
# Tilføj Alt-Svc-header for at forhandle HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
} I almindelige browsere er det endnu ikke muligt at oprette forbindelse via HTTP/3, men du kan tage og køre det med flaget --enable-quic, henvende dig til din server eller for eksempel site quic.rocks og se forbindelsestypen i Developer Tools:

I stedet for HTTP/3 skrives http2+quic/99, men det er i det væsentlige det samme.
Andre teknologier
- QUIC understøtter også (hvilke med stor pomp blev forbundet med Facebook via HTTP/3) og progressiv . Apache kan endnu ikke, men arbejdet skrider frem .
- Opdateret den 21. januar
- Ligesom for nylig åbnede Microsoft , hvor ikke alle funktioner fra IETF-standarden endnu er tilgængelige, men det er allerede et stort gennembrud.
Konklusion

Interessen for QUIC er ustabil, men voksende, arbejdet med at standardisere det fortsætter. Nye implementeringer af protokollen dukker allerede op næsten hver måned, og med hvert år overbeviser flere udviklere sig selv om, at fremtiden tilhører QUIC. Det er endda muligt at inkludere protokollen i fremtidige versioner af TCP-stakken, hvilket betyder, at hele internettet på et tidspunkt vil overgå til mere stabile og hurtigere forbindelser.
Allerede nu kan du konfigurere QUIC-interaktion til din infrastruktur eller endda tilbyde det til browsere — de planlægger alle at tilføje protokolunderstøttelse, og den triste statistik fra caniuse vil blive mere opløftende.
Kilde: habr.com
