
QUIC (Quick UDP Internet Connections) Àr ett protokoll ovanpÄ UDP som stödjer alla funktioner hos TCP, TLS och HTTP/2 och löser de flesta av deras problem. Det kallas ofta det nya eller "experimentella" protokollet, men det har lÀnge överlevt experimentfasen: utvecklingen har pÄgÄtt i över 7 Är. Under denna tid har protokollet inte blivit en standard, men har ÀndÄ fÄtt bred spridning. Till exempel anvÀnder företag som Google och Facebook QUIC för att öka hastigheten pÄ trafik och minska fördröjningar i mobila nÀtverk, och IETF har deklarerat sin fork-version av protokollet som grunden för standarden HTTP/3 (Àven om HTTP/2 bara anvÀnds av av webbplatser).
Konceptet
QUIC utvecklades som en ersÀttning för det förÄldrade TCP, som ursprungligen var anpassat för trÄdbundna nÀt med lÄg förlust. TCP levererar paket i ordning, sÄ nÀr ett paket gÄr förlorat stannar hela kön (), vilket negativt pÄverkar kvaliteten och stabiliteten i anslutningen. För att undvika massförluster anvÀnder mobila nÀt stora buffertar, vilket i sin tur leder till överflödighet och falska negativa reaktioner frÄn protokollet (). Dessutom tar TCP vÀldigt lÄng tid pÄ sig att etablera en anslutning: SYN/ACK och TLS-förfrÄgningar skickas separat, vilket krÀver tre roundtrip istÀllet för en, som QUIC gör.

Eftersom QUIC kombinerar ersÀttningen för TCP och implementeringen av TLS 1.3, Àr alla anslutningar alltid krypterade, och att dekryptera sÄdan trafik Àr inte enklare Àn om den skulle gÄ över HTTPS. Dessutom har QUIC implementerats pÄ applikationsnivÄ, eftersom en fullstÀndig ersÀttning av TCP-stacken skulle ta evigheter.
Trots att HTTP/2 stödjer multiplexering kvarstÄr problemet med head-of-line blocking dÀr pÄ grund av behovet av att leverera paket i ordning. QUIC implementeras ovanpÄ UDP, vilket i princip eliminerar blockeringsproblemet, och för att sÀkerstÀlla att paket inte gÄr förlorade för alltid numreras de och kan innehÄlla delar av "grannar" för att sÀkerstÀlla överflödighet. Dessutom delar QUIC upp den monolitiska kön i flera strömmar för olika typer av förfrÄgningar inom en anslutning. SÄledes kan problem vid paketförlust endast uppstÄ i en kö (till exempel vid överföring av en specifik fil):

AnvÀndning
QUIC utvecklades ursprungligen inom Google och var till stor del anpassad för interna behov. à r 2013 överfördes det till IETF för standardisering (som fortfarande pÄgÄr), och nu kan alla delta i utvecklingen av protokollet genom att föreslÄ det som saknas för dem. IETF:s arbetsgrupp anordnar Ärliga möten dÀr nya standarder godkÀnns och nya idéer diskuteras. Denna implementation av QUIC anses vara den grundlÀggande och det Àr pÄ denna som standarden HTTP/3 certifieras.
För tillfÀllet talas det inte om att inkludera HTTP/3 som huvudprotokoll, eftersom det fortfarande Àr ofullstÀndigt och nÀstan inte stöds:

Men QUIC kan implementeras som transport mellan applikationen och servern, vilket har gjorts framgÄngsrikt av Uber:
Ubers kommentar om implementeringen av QUIC
För att framgĂ„ngsrikt integrera QUIC och förbĂ€ttra applikationens prestanda under dĂ„liga anslutningar, bytte vi ut den gamla stacken (HTTP/2 över TLS/TCP) mot protokollet QUIC. Vi anvĂ€nde det nĂ€tverksbiblioteket frĂ„n , som innehĂ„ller den ursprungliga Google-versionen av protokollet â gQUIC. Denna implementation förbĂ€ttras ocksĂ„ stĂ€ndigt för att följa den senaste IETF-specifikationen.
Först integrerade vi Cronet i vÄra Android-appar för att lÀgga till stöd för QUIC. Integrationen genomfördes pÄ ett sÀtt som minimerade migrationskostnaderna. IstÀllet för att helt ersÀtta den gamla nÀtverksstacken, som anvÀnde biblioteket , integrerade vi Cronet UNDER OkHttp API-ramverket. Genom att utföra integrationen pÄ detta sÀtt undvek vi förÀndringar i vÄra nÀtverksanrop (som anvÀnder ) pÄ API-nivÄ.
PÄ liknande sÀtt som för Android-enheter implementerade vi Cronet i Uber-apparna pÄ iOS, genom att avlyssna HTTP-trafiken frÄn nÀtverks , med hjÀlp av . Denna abstraktion, som tillhandahÄlls av iOS Foundation, hanterar protokollspecifika URL-data och sÀkerstÀller att vi kan integrera Cronet i vÄra iOS-appar utan betydande migrationskostnader.
tagit frÄn artikel frÄn Uber
PÄ backend fÄngade de QUIC-anslutningar via Google Cloud lb, som sedan mitten av 2018.
Det Àr inte förvÄnande att Google Cloud fungerar utmÀrkt med protokollet som Google utvecklade, men vilka alternativ finns?
Nginx
Nyligen försökte CloudFlare nginx (som som standard inte stödjer HTTP/3) med sitt verktyg Quiche. Implementeringen finns tillgÀnglig som en enda .patch-fil, som har en installationshandledning bifogad:
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.patchHĂ€r kan man ansluta sina egna moduler vid behov
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
makeDet ÄterstÄr bara att aktivera stöd för HTTP/3
events {
worker_connections 1024;
}
http {
server {
# Aktivera QUIC och HTTP/3.
listen 443 quic reuseport;
# Aktivera HTTP/2 (valfritt).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Aktivera alla TLS-versioner (TLSv1.3 krÀvs för QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# BegÀrningsbuffring stöds för nÀrvarande inte för HTTP/3.
proxy_request_buffering off;
# LÀgg till Alt-Svc-header för att förhandla HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
} I vanliga webblÀsare gÄr det fortfarande inte att ansluta via HTTP/3, men man kan ta och köra det med flaggan --enable-quic, besöka sin server eller till exempel sidan quic.rocks och se vilken typ av anslutning som anvÀnds i Developer Tools:

IstÀllet för HTTP/3 stÄr det http2+quic/99, men det Àr i stort sett samma sak.
Andra teknologier
- QUIC stöder ocksÄ (som i stor stil kopplades till Facebook via HTTP/3) och progressiv . Apache kan Àn sÄ lÀnge inte, men arbetet pÄgÄr .
- Den 21 januari uppdaterades
- Bokstavligen för nÄgra dagar sedan slÀppte Microsoft , dÀr alla funktioner i IETF-standarden Ànnu inte Àr tillgÀngliga, men det Àr redan ett stort framsteg.
Slutsats

Intresset för QUIC Àr ostadigt men vÀxer, arbetet med dess standardisering pÄgÄr. Nya implementationer av protokollet dyker upp nÀstan varje mÄnad, och allt fler utvecklare övertygar sig om att framtiden ligger i QUIC. Det Àr till och med möjligt att inkludera protokollet i framtida versioner av TCP-stacken, vilket innebÀr att hela internet förr eller senare kommer att övergÄ till mer stabila och snabba anslutningar.
Redan nu kan du konfigurera QUIC-interaktioner för din infrastruktur eller till och med erbjuda dem till webblÀsare - de planerar alla att lÀgga till stöd för protokollet, och den sorgliga statistiken frÄn caniuse kommer att bli roligare.
KĂ€lla: habr.com
