HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

QUIC (Quick UDP Internet Connections) ir protokols papildus UDP, kas atbalsta visas TCP, TLS un HTTP/2 funkcijas un atrisina lielāko daļu to problēmu. To bieži sauc par jaunu vai ā€œeksperimentāluā€ protokolu, taču tas jau sen ir pārdzÄ«vojis eksperimentālo posmu: izstrāde notiek vairāk nekā 7 gadus. Å ajā laikā protokols nepaguva kļūt par standartu, bet tomēr kļuva plaÅ”i izplatÄ«ts. Piemēram, QUIC izmanto tādi giganti kā Google un Facebook, lai paātrinātu trafiku un samazinātu aizkavÄ“Å”anos mobilajos tÄ«klos, un IETF paziņoja, ka protokola dakÅ”a ir HTTP/3 standarta pamatā (kaut arÄ« HTTP/2 izmanto tikai 44.8% vietnes).

Jēdziens

QUIC tika izstrādāts kā mantotā TCP aizstājējs, kas sākotnēji bija paredzēts zemu zudumu vadu tÄ«kliem. TCP piegādā paketes kārtÄ«bā, tāpēc, ja viena pakete tiek pazaudēta, visa rinda tiek apturēta (lÄ«nijas galvas bloÄ·Ä“Å”ana), kas negatÄ«vi ietekmē savienojuma kvalitāti un stabilitāti. Lai izvairÄ«tos no lieliem zaudējumiem, mobilie tÄ«kli izmanto lielus buferus, kas savukārt izraisa protokola dublÄ“Å”anu un viltus negatÄ«vu atbildi (buferuzpÅ«Å”anās). Turklāt TCP pavada daudz laika, lai izveidotu savienojumu: SYN/ACK un TLS pieprasÄ«jumi tiek apstrādāti atseviŔķi, un ir nepiecieÅ”ami trÄ«s braucieni turp un atpakaļ, nevis viens, kā to dara QUIC.

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

Tā kā QUIC apvieno TCP nomaiņu un TLS 1.3 ievieÅ”anu, visi savienojumi vienmēr tiek Å”ifrēti, un Ŕādas trafika atÅ”ifrÄ“Å”ana nav vienkārŔāka nekā tad, ja tā notiktu, izmantojot HTTPS. Turklāt QUIC tiek ieviests lietojumprogrammu lÄ«menÄ«, jo bÅ«tu nepiecieÅ”ama pilnÄ«ga TCP steka nomaiņa mūžība.

Neskatoties uz atbalstu multipleksÄ“Å”anai HTTP/2, galvenās lÄ«nijas bloÄ·Ä“Å”anas problēma saglabājās, jo bija nepiecieÅ”ams piegādāt paketes kārtÄ«bā. QUIC ir ieviests virs UDP, tāpēc tam principā nav bloÄ·Ä“Å”anas, un, lai paketes netiktu zaudētas uz visiem laikiem, tās ir numurētas un var saturēt ā€œkaimiņuā€ daļas, nodroÅ”inot dublÄ“Å”anu. Turklāt QUIC sadala monolÄ«to rindu vairākos pavedienos dažāda veida pieprasÄ«jumiem vienā savienojumā. Tādējādi, ja pakete tiek pazaudēta, problēmas var rasties tikai vienai rindai (piemēram, pārsÅ«tot konkrētu failu):

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

Izmantot

Sākotnēji QUIC tika izstrādāts Google ietvaros un lielā mērā tika pielāgots lietoÅ”anai uzņēmumā. 2013. gadā tas tika nodots IETF standartizācijai (kas joprojām turpinās), un tagad ikviens var piedalÄ«ties protokola izstrādē, piedāvājot to, kas viņam trÅ«kst. IETF darba grupa organizē ikgadējas sanāksmes, kuru laikā tiek apstiprināts jauns standarts un apspriesti jauninājumi. Å Ä« QUIC ievieÅ”ana tiek uzskatÄ«ta par galveno, un uz tās pamata tiek sertificēts HTTP/3 standarts.

Pagaidām nav runas par HTTP/3 iekļauÅ”anu kā galveno protokolu, jo tas vēl nav pabeigts un gandrÄ«z netiek atbalstÄ«ts:

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

Bet QUIC var ieviest kā transportu starp lietojumprogrammu un serveri, kas veiksmīgi tika paveikts Uber:

Uber komentārs par QUIC ievieŔanu

Lai veiksmÄ«gi iegultu QUIC un uzlabotu lietojumprogrammu veiktspēju vājās savienojamÄ«bas vidēs, mēs nomainÄ«jām veco steku (HTTP/2, izmantojot TLS/TCP) ar QUIC protokolu. Mēs izmantojām tÄ«kla bibliotēku Kronets no Chromium projekti, kurā ir oriÄ£inālā, Google protokola versija - gQUIC. Å Ä« ievieÅ”ana arÄ« tiek pastāvÄ«gi uzlabota, lai atbilstu jaunākajai IETF specifikācijai.

Vispirms mēs integrējām Cronet savās Android lietotnēs, lai pievienotu QUIC atbalstu. Integrācija tika veikta tā, lai pēc iespējas samazinātu migrācijas izmaksas. Tā vietā, lai pilnÄ«bā aizstātu veco tÄ«kla steku, kas izmantoja bibliotēku OkHttp, esam integrējuÅ”i Cronet UZ OkHttp API ietvaru. Veicot integrāciju Ŕādā veidā, mēs izvairÄ«jāmies no izmaiņām mÅ«su tÄ«kla zvanos (kurus izmanto PārbÅ«vēt) API lÄ«menÄ«.

LÄ«dzÄ«gi kā Android ierÄ«cēm, mēs ieviesām Cronet Uber lietotnēs operētājsistēmā iOS, pārtverot HTTP trafiku no tÄ«kla. APIizmantojot NSURL protokols. Å Ä« abstrakcija, ko nodroÅ”ina iOS fonds, apstrādā protokolam specifiskus URL datus un nodroÅ”ina, ka mēs varam integrēt Cronet mÅ«su iOS lietojumprogrammās bez ievērojamām migrācijas izmaksām.

paņemts no Å”is tulkojums Uber raksti

Aizmugurē viņi nozvejoja QUIC savienojumus, izmantojot Google Cloud lb, kas atbalsta protokolu kopÅ” 2018. gada vidus.

Nav pārsteigums, ka Google Cloud lieliski darbojas ar Google izstrādāto protokolu, taču kādas ir alternatīvas?

Nginx

Pirms neilga laika CloudFlare Es mēģināju Ŕķērsot nginx (kas pēc noklusējuma neatbalsta HTTP/3) ar savu Quiche rÄ«ku. IevieÅ”ana ir pieejama kā viens .patch fails, kam ir pievienota instalÄ“Å”anas apmācÄ«ba:

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

Šeit jūs varat savienot savus moduļus, ja nepiecieŔams

./configure                          	
   	--prefix=$PWD                       	
   	--with-http_ssl_module              	
   	--with-http_v2_module               	
   	--with-http_v3_module               	
   	--with-openssl=../quiche/deps/boringssl 
   	--with-quiche=../quiche
 make

Atliek tikai iespējot HTTP/3 atbalstu

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';
    }
}

Parastās pārlūkprogrammās vēl nav iespējams izveidot savienojumu, izmantojot HTTP/3, bet var izmantot Chrome Canary un palaist to ar karogu --enable-quic, dodieties uz savu serveri vai, piemēram, vietni quic.rocks un skatiet savienojuma veidu izstrādātāja rīkos:
HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana
HTTP/3 vietā ir rakstīts http2+quic/99, bet būtībā tas ir viens un tas pats.

Citas tehnoloģijas

Secinājums

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

Interese par QUIC ir nestabila, taču pieaug, un tiek strādāts pie tās standartizācijas. Jaunas protokola ievieÅ”anas parādās gandrÄ«z katru mēnesi, un katru gadu arvien vairāk izstrādātāju pārliecinās, ka QUIC ir nākotne. Protokolu pat iespējams iekļaut nākamajās TCP steka versijās, kas nozÄ«mē, ka agri vai vēlu viss internets pāries uz stabilākiem un ātrākiem savienojumiem.

Jau tagad jūs varat konfigurēt QUIC mijiedarbību savai infrastruktūrai vai pat dot to pārlūkprogrammām - viņi visi plāno pievienot protokola atbalstu, un bēdīgā statistika ar caniuse kļūs jautrāka.

HTTP, izmantojot UDP ā€” lietderÄ«ga QUIC protokola izmantoÅ”ana

Avots: www.habr.com

Pievieno komentāru