QUIC (Quick UDP Internet Connections) on UDP peal olev protokoll, mis toetab kõiki TCP, TLS ja HTTP/2 funktsioone ning lahendab enamiku nende probleemidest. Seda nimetatakse sageli uueks või "eksperimentaalseks" protokolliks, kuid see on eksperimentaalse etapi kaua elanud: arendus on kestnud rohkem kui 7 aastat. Selle aja jooksul ei saanud protokoll standardiks, kuid sai siiski laialt levinud. Näiteks kasutavad QUIC-i sellised hiiglased nagu Google ja Facebook liikluse kiirendamiseks ja viivituste vähendamiseks mobiilsidevõrkudes ning IETF kuulutas oma protokolli hargi HTTP/3 standardi aluseks (kuigi HTTP/2 kasutab ainult 44.8% saidid).
Mõiste
QUIC töötati välja pärand-TCP asendamiseks, mis oli algselt mõeldud väikese kadudega traadiga võrkudele. TCP tarnib paketid järjekorras, nii et kui üks pakett kaob, peatatakse kogu järjekord (reapea blokeerimine), mis mõjutab negatiivselt ühenduse kvaliteeti ja stabiilsust. Massiivsete kadude vältimiseks kasutavad mobiilsidevõrgud suuri puhvreid, mis omakorda toob kaasa protokolli liiasuse ja vale negatiivse vastuse (bufferbloat). Lisaks kulutab TCP ühenduse loomisele palju aega: SYN/ACK-i ja TLS-i päringuid töödeldakse eraldi, nõudes ühe edasi-tagasi reisi asemel kolme, nagu QUIC teeb.
Kuna QUIC ühendab TCP asendamise ja TLS 1.3 juurutamise, on kõik ühendused alati krüptitud ja sellise liikluse dekrüpteerimine pole lihtsam kui HTTPS-i kaudu. Lisaks rakendatakse QUIC-i rakenduse tasemel, kuna TCP-pinu täielik asendamine nõuab igavesti.
Vaatamata HTTP/2 multipleksimise toele, püsis reapea blokeerimise probleem, kuna paketid oli vaja edastada järjekorras. QUIC on rakendatud UDP peal, seega pole sellel põhimõtteliselt blokeerimist ning pakettide igaveseks kadumise vältimiseks on need nummerdatud ja võivad sisaldada "naabrite" osi, pakkudes koondamist. Lisaks jagab QUIC monoliitse järjekorra mitmeks lõimeks erinevat tüüpi päringute jaoks ühes ühenduses. Seega, kui pakett läheb kaduma, võivad probleemid tekkida ainult ühe järjekorra puhul (näiteks konkreetse faili edastamisel):
Kasutama
Algselt töötati QUIC välja Google'is ja see oli suures osas kohandatud ettevõttesiseseks kasutamiseks. 2013. aastal anti see standardiseerimiseks üle IETF-ile (mis on veel pooleli) ja nüüd saavad kõik protokolli väljatöötamises osaleda, pakkudes välja, mis tal puudu on. IETF töörühm korraldab iga-aastaseid koosolekuid, mille käigus kinnitatakse uus standard ja arutatakse uuendusi. Seda QUIC-i rakendamist peetakse peamiseks ja selle alusel on HTTP/3 standard sertifitseeritud.
Siiani pole juttu HTTP/3 lisamisest põhiprotokollina, sest see pole veel valmis ja seda peaaegu ei toetata:
Kuid QUIC-i saab rakendada transpordina rakenduse ja serveri vahel, mis Uberis õnnestus:
Uberi kommentaar QUICi kasutuselevõtu kohta
QUICi edukaks manustamiseks ja rakenduse jõudluse parandamiseks kehvas ühenduvusega keskkondades asendasime vana pinu (HTTP/2 üle TLS/TCP) QUIC-protokolliga. Kasutasime võrguteeki Kronet kohta Chromiumi projektid, mis sisaldab protokolli algset Google'i versiooni - gQUIC. Seda teostust täiustatakse pidevalt, et järgida uusimat IETF-i spetsifikatsiooni.
Esmalt integreerisime Croneti oma Androidi rakendustesse, et lisada QUIC-i tugi. Lõimumine viidi läbi nii, et migratsioonikulud oleksid võimalikult palju väiksemad. Selle asemel, et täielikult välja vahetada vana võrgupakk, mis kasutas raamatukogu OkHttp, oleme integreerinud Croneti OkHttp API raamistikku. Sel viisil integreerimisega vältisime muudatusi oma võrgukõnedes (mida kasutavad Moderniseerimine) API tasemel.
Sarnaselt Android-seadmetele mõeldud lähenemisviisiga rakendasime Croneti iOS-i Uberi rakendustesse, peatades võrgu HTTP-liikluse. APIkasutades NSURLprotokoll. See iOS-i sihtasutuse pakutav abstraktsioon käsitleb protokollispetsiifilisi URL-i andmeid ja tagab, et saame Croneti oma iOS-i rakendustesse integreerida ilma oluliste migratsioonikuludeta.
Tagaprogrammis püüdsid nad kinni QUIC-ühendused Google Cloud lb kaudu, mis toetab protokolli alates 2018. aasta keskpaigast.
Pole üllatav, et Google Cloud töötab Google'i väljatöötatud protokolliga suurepäraselt, kuid millised on alternatiivid?
nginx
Mitte kaua aega tagasi CloudFlare Üritasin ületada nginx (mis vaikimisi ei toeta HTTP/3) oma Quiche tööriistaga. Rakendus on saadaval ühe .patch-failina, mis on varustatud installiõpetusega:
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
Siin saate vajadusel oma moodulid ühendada
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
Jääb vaid lubada HTTP/3 tugi
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';
}
}
Tavalistes brauserites ei saa veel HTTP/3 kaudu ühendust luua, aga kasutada saab Chrome Canary ja ajage seda lipuga --enable-quic, minge oma serverisse või näiteks saidile quic.rocks ja vaadake ühenduse tüüpi arendaja tööriistades:
HTTP/3 asemel on see kirjutatud http2+quic/99, kuid see on sisuliselt sama asi.
Muud tehnoloogiad
QUIC toetab ka LiteSpeed (mis ühendas Facebookiga HTTP/3 kaudu suure käraga) ja progressiivne Golfipoiss. Apache seda veel teha ei saa, aga töö käib täies hoos.
Just teisel päeval avati Microsoft msquic rakenduskood, milles kõik IETF-i standardi funktsioonid pole veel saadaval, kuid see on juba suur läbimurre.
Järeldus
Huvi QUIC-i vastu on ebastabiilne, kuid kasvab ja selle standardimise nimel tehakse tööd. Protokolli uusi rakendusi ilmub peaaegu iga kuu ja igal aastal on üha rohkem arendajaid veendunud, et QUIC on tulevik. Protokolli on võimalik lisada isegi tulevastesse TCP-pinu versioonidesse, mis tähendab, et varem või hiljem liigub kogu Internet stabiilsematele ja kiirematele ühendustele.
Juba praegu saate seadistada oma infrastruktuuri jaoks QUIC-i interaktsiooni või anda selle isegi brauseritele - nad kõik plaanivad protokolli toe lisada ja kurb statistika caniuse'iga muutub rõõmsamaks.