
QUIC (Kiirus UDP Interneti Ühendused) on protokoll UDP peal, mis toetab kõiki TCP, TLS ja HTTP/2 funktsioone ning lahendab enamiku nende probleeme. Seda nimetatakse sageli uueks või "eksperimentaalseks" protokolliks, kuid see on juba ammu ületanud eksperimendi etapi: arendust on tehtud üle 7 aasta. Selle aja jooksul pole protokoll veel standardiks saanud, kuid see on siiski laialdaselt levinud. Näiteks kasutavad QUIC-i liikluse kiirendamiseks ja viivituste vähendamiseks mobiilsete võrkude hiiglased nagu Google ja Facebook, ning IETF kuulutas oma protokolli haru HTTP/3 standardi aluseks. veebilehtedest).
Kontseptsioon
QUIC loodi vananenud TCP asendamiseks, mis oli algselt kohandatud juhtmega võrkude jaoks madala kadude protsendiga. TCP edastab pakette järjestikku, seega, kui üks pakk kadus, seiskub terve järjekord (), mis mõjutab negatiivselt ühenduse kvaliteeti ja stabiilsust. Massiliste kadude vältimiseks kasutavad mobiilsed võrgud suuri puhverid, mis omakorda viib liigsetele andmetele ja vale negatiivsele reaktsioonile protokollis (). Lisaks kulutab TCP ühenduse loomisele palju aega: SYN/ACK ja TLS päringud saadetakse eraldi, mis nõuab kolme roundtrip'i asemel ühte, nagu teeb QUIC.

Kuna QUIC ühendab TCP asendamise ja TLS 1.3 rakendamise, on kõik ühendused alati krüpteeritud ning sellise liikluse dekodeerimine ei ole lihtsam kui HTTPS-i puhul. Lisaks on QUIC rakendatud rakendustasandil, kuna täielik TCP staki asendamine võtaks igavesti..
Hoolimata HTTP/2 mitmepleksimise toetusest, jäi problemaatiline head-of-line blocking seal alles, kuna pakette tuleb edastada järjestikku. QUIC on rakendatud UDP peal, seega puuduvad seal põhimõtteliselt blokeeringud, ning et pakette ei kaotataks lõplikult, nummerdatakse need ja need võivad sisaldada „naabreid“, tagades liigseeandmed. Lisaks jagab QUIC monoliitse järjekorra mitmeks vooks erinevat tüüpi päringute jaoks ühe ühenduse sees. Seega, kui pakk kaob, võivad probleemid tekkida ainult ühe järjekorra puhul (näiteks konkreetse faili edastamisel):

Kasutamine
Alguses töötati QUIC välja Google'is ja see oli peamiselt kohandatud sisemiseks kasutamiseks. 2013. aastal anti see IETF-ile standardiseerimiseks (mis käib siiani) ning nüüd saab igaüks osaleda protokolli edasiarendamises, pakkudes sellele, mis just tema jaoks puudub. IETF-i töögrupp korraldab iga-aastaselt kohtumisi, kus kinnitatakse uus standard ja arutatakse uuendusi. Seda QUIC-i teostust peetakse põhiliseks ja selle alusel sertifitseeritakse HTTP/3 standard.
Praegu ei ole jutt HTTP/3-st kui põh protokollist, kuna see ei ole veel valminud ja praktiliselt ei ole toetatud:

Kuid QUIC-i saab rakendada transpordina rakenduse ja serveri vahel, nagu on edukalt teinud Uber:
Uberi kommentaar QUIC-i rakendamisest
QUIC-i edukaks integreerimiseks ja rakenduse jõudluse parandamiseks nõrkades ühendustes asendasime vana steki (HTTP/2 üle TLS/TCP) QUIC-protokolliga. Kasutasime võrgu teeki API-s , mis sisaldab originaali, Google'i versioon protokollist – gQUIC. Seda teostust täiustatakse pidevalt, et järgida viimast IETF-i spetsifikatsiooni.
Esmalt integreerisime Croneti oma Android-rakendustesse, et lisada QUIC-i tugi. Integreerimine toimus nii, et migratsioonikulusid oleks võimalikult vähe. Selle asemel, et täielikult asendada vana võrgu steki, mis kasutas teeki , integreerisime Croneti OkHttp API raames. Sellise integreerimisega vältisime muudatusi meie võrgu kutsumistes (mida kasutavad ) API tasemel.
Sarnaselt lähenemisele Android-seadmetele rakendasime Croneti Uberi rakendustes iOS-is, peatades HTTP liikluse võrgu , kasutades . See abstraktsioon, mis on saadud iOS Foundationist, haldab protokollispetsiifilisi URL-andmeid ja tagab, et saame Croneti integreerida oma iOS-rakendustes oluliste migratsioonikuludeta.
võetud Uberi artiklist
Tagaplaanil said nad QUIC-ühendusi Google Cloud lb kaudu, mis alates 2018. aasta keskpaigast.
Ei ole üllatav, et Google Cloud töötab suurepäraselt protokolliga, mille Google välja töötas, kuid millised on alternatiivid?
Nginx
Hiljuti proovis CloudFlare nginx (mille, mis vaikimisi ei toeta HTTP/3) koos oma Quiche tööriistaga. Teostus on saadaval ühe .patch faili kujul, millele on lisatud installimise õpetus:
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.patchSiin on võimalik vajadusel lisada oma mooduleid
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
makeJääb vaid lubada HTTP/3 toe
events {
worker_connections 1024;
}
http {
server {
# Lubage QUIC ja HTTP/3.
listen 443 quic reuseport;
# Lubage HTTP/2 (valikuline).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Lubage kõik TLS versioonid (TLSv1.3 on nõutav QUICi jaoks).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Taotluste puhversüsteem ei toeta praegu HTTP/3.
proxy_request_buffering off;
# Lisage Alt-Svc header HTTP/3 läbirääkimiseks.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
} Tavalistes brauserites ei saa veel HTTP/3 kaudu ühendust luua, kuid saate võtta ja käivitada seda lipuga --enable-quic, pöörduda oma serveri või näiteks saidi quic.rocks poole ja vaadata ühenduse tüüpi Developer Toolsis:

HTTP/3 asemel kuvatakse http2+quic/99, kuid sisuliselt on see sama asi.
Teised tehnoloogiad
- QUIC toetavad ka (kes uhkelt ühendasid Facebookiga HTTP/3 kaudu) ja progressiivne . Apache ei oska veel, kuid töö käib .
- 21. jaanuaril värskendati
- Hiljuti avas Microsoft , kus ei ole veel kõik funktsioonid IETF standardist olemas, kuid see on juba suur edusamm.
Kokkuvõte

Huvi QUICi vastu on ebastabiilne, kuid kasvab, standardiseerimise nimel käib töö. Uusi protokolli teostusi ilmub peaaegu iga kuu, ja iga mööduva aastaga veenduvad üha rohkem arendajaid, et tulevik kuulub QUICile. Lubatakse isegi protokolli lisamist tulevaste TCP virnade versioonidesse, mis tähendab, et varem või hiljem kolib kogu internet stabiilsemasse ja kiiremasse ühendusse.
Juba praegu saate oma infrastruktuuri jaoks seadistada QUICühendust või isegi seda brauseritele anda — kõik plaanivad protokolli toetust lisada ning kurb statistika caniuse.ee lehelt muutub rõõmsamaks.
Allikas: habr.com
