HTTP fuq UDP - tagħmel użu tajjeb mill-protokoll QUIC
QUIC (Quick UDP Internet Connections) huwa protokoll fuq UDP li jappoġġja l-karatteristiċi kollha ta 'TCP, TLS u HTTP/2 u jsolvi ħafna mill-problemi tagħhom. Spiss tissejjaħ protokoll ġdid jew "sperimentali", iżda ilu għadda mill-istadju sperimentali: l-iżvilupp ilu għaddej għal aktar minn 7 snin. Matul dan iż-żmien, il-protokoll ma rnexxilux isir standard, iżda xorta sar mifrux. Pereżempju, QUIC jintuża minn ġganti bħal Google u Facebook biex iħaffef it-traffiku u jnaqqas id-dewmien fin-netwerks mobbli, u l-IETF iddikjara l-furketta tiegħu tal-protokoll bħala l-bażi għall-istandard HTTP/3 (anke jekk HTTP/2 juża 44.8% biss siti).
Kunċett
QUIC ġie żviluppat bħala sostitut għall-legat TCP, li oriġinarjament kien iddisinjat għal netwerks bil-fili b'telf baxx. TCP iwassal pakketti fl-ordni, għalhekk jekk jintilef pakkett wieħed, il-kju kollu jitwaqqaf (imblukkar tal-head-of-line), li taffettwa b'mod negattiv il-kwalità u l-istabbiltà tal-konnessjoni. Biex jiġi evitat telf kbir, in-netwerks ċellulari jirrikorru għall-użu ta' buffers kbar, li mbagħad iwassal għal redundancy u rispons negattiv falz tal-protokoll (bufferbloat). Barra minn hekk, TCP iqatta 'ħafna ħin jistabbilixxi konnessjoni: talbiet SYN/ACK u TLS huma pproċessati separatament, li jeħtieġu tliet roundtrips minflok wieħed, kif jagħmel QUIC.
Peress li QUIC jgħaqqad sostituzzjoni ta 'TCP u implimentazzjoni ta' TLS 1.3, il-konnessjonijiet kollha huma dejjem ikkodifikati, u d-deċifrar ta 'tali traffiku mhuwiex aktar faċli milli kieku kien għaddej minn HTTPS. Barra minn hekk, QUIC hija implimentata fil-livell tal-applikazzjoni, peress li jkun hemm sostituzzjoni sħiħa tal-munzell TCP eternità.
Minkejja l-appoġġ għall-multiplexing f'HTTP/2, il-problema tal-imblukkar tal-head-of-line baqgħet hemm minħabba l-ħtieġa li jitwasslu l-pakketti fl-ordni. QUIC huwa implimentat fuq UDP, għalhekk ma għandu l-ebda imblukkar fil-prinċipju, u biex jipprevjeni li l-pakketti jintilfu għal dejjem, huma nnumerati u jista 'jkun fihom partijiet ta' "ġirien", li jipprovdu redundancy. Barra minn hekk, QUIC jaqsam il-kju monolitiku f'ħjut multipli għal tipi differenti ta 'talbiet f'konnessjoni waħda. Għalhekk, jekk jintilef pakkett, jistgħu jinqalgħu problemi għal kju wieħed biss (pereżempju, għat-trasferiment ta' fajl speċifiku):
Użu
Inizjalment, QUIC ġie żviluppat fi ħdan Google u kien imfassal fil-biċċa l-kbira għall-użu fi ħdan il-kumpanija. Fl-2013, ġie trasferit lill-IETF għall-istandardizzazzjoni (li għadu għaddej), u issa kulħadd jista 'jipparteċipa fl-iżvilupp tal-protokoll billi jipproponi dak li jkun nieqes. Il-grupp ta' ħidma tal-IETF jorganizza laqgħat annwali li matulhom jiġi approvat standard ġdid u jiġu diskussi l-innovazzjonijiet. Din l-implimentazzjoni ta 'QUIC hija meqjusa bħala waħda ewlenija u hija fuq il-bażi tagħha li l-istandard HTTP/3 huwa ċċertifikat.
S'issa, m'hemm l-ebda diskors dwar l-inklużjoni ta 'HTTP/3 bħala l-protokoll ewlieni, minħabba li għadu mhux lest u kważi mhux appoġġjat:
Iżda QUIC jista 'jiġi implimentat bħala trasport bejn l-applikazzjoni u s-server, li sar b'suċċess f'Uber:
Il-kumment ta’ Uber dwar l-introduzzjoni ta’ QUIC
Biex inkorporaw b'suċċess QUIC u ntejbu l-prestazzjoni tal-applikazzjoni f'ambjenti ta 'konnettività fqira, biddel il-munzell l-antik (HTTP/2 fuq TLS/TCP) bil-protokoll QUIC. Aħna użajna l-librerija tan-netwerk Cronet ta ' Proġetti tal-Kromju, li fiha l-verżjoni oriġinali, Google tal-protokoll - gQUIC. Din l-implimentazzjoni qed titjieb ukoll kontinwament biex issegwi l-aħħar speċifikazzjoni tal-IETF.
L-ewwel integrajna Cronet fl-apps Android tagħna biex inżidu l-appoġġ għal QUIC. L-integrazzjoni twettqet b'tali mod li jitnaqqsu kemm jista' jkun l-ispejjeż tal-migrazzjoni. Minflok tissostitwixxi kompletament il-munzell antik tan-netwerking li uża l-librerija OkHttp, integrajna Cronet TAĦT il-qafas OkHttp API. Billi għamilna l-integrazzjoni b'dan il-mod, evitajna bidliet fis-sejħiet tan-netwerk tagħna (li jintużaw minn Retrofit) fil-livell tal-API.
Simili għall-approċċ għal apparati Android, implimentajna Cronet f'apps Uber fuq iOS, interċettajna t-traffiku HTTP min-netwerk APIbl-użu NSURLProtocol. Din l-estrazzjoni, ipprovduta mill-Fondazzjoni tal-iOS, tieħu ħsieb id-dejta tal-URL speċifika għall-protokoll u tiżgura li nistgħu nintegraw Cronet fl-applikazzjonijiet tal-iOS tagħna mingħajr spejjeż sinifikanti ta’ migrazzjoni.
Fuq il-backend huma qabdu konnessjonijiet QUIC permezz Google Cloud lb, li jappoġġja protokoll minn nofs l-2018.
Mhix sorpriża li Google Cloud jaħdem tajjeb mal-protokoll żviluppat minn Google, imma x'inhuma l-alternattivi?
Nginx
Ftit ilu CloudFlare Ippruvajt naqsam nginx (li ma jappoġġjax HTTP/3 awtomatikament) bl-għodda Quiche tiegħu. L-implimentazzjoni hija disponibbli bħala fajl .patch wieħed, li jiġi ma 'tutorja ta' installazzjoni:
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
Hawnhekk tista 'tqabbad il-moduli tiegħek jekk meħtieġ
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
Li jibqa 'huwa li tippermetti l-appoġġ HTTP/3
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';
}
}
Għadu mhux possibbli li tikkonnettja permezz ta 'HTTP/3 f'browsers regolari, iżda tista' tuża Kanarji tal-Kromju u mexxiha mal-bandiera --enable-quic, mur fis-server tiegħek jew, pereżempju, is-sit quic.rocks u ħares lejn it-tip ta' konnessjoni f'Għodod tal-Iżviluppaturi:
Minflok HTTP/3 huwa miktub http2+quic/99, iżda huwa essenzjalment l-istess ħaġa.
Teknoloġiji oħra
QUIC jappoġġja wkoll LiteSpeed (li konnessi ma 'Facebook permezz ta' HTTP/3 b'fanfara kbira) u progressiva Caddy. Apache għadha ma tistax tagħmel dan, iżda x-xogħol għaddej swing sħiħ.
Proprju l-ġurnata l-oħra fetħet Microsoft kodiċi ta' implimentazzjoni msquic, li fiha mhux il-funzjonijiet kollha mill-istandard IETF għadhom disponibbli, iżda dan diġà huwa avvanz kbir.
Konklużjoni
L-interess fil-QUIC huwa instabbli, iżda qed jikber, u għaddejja ħidma biex jiġi standardizzat. Implimentazzjonijiet ġodda tal-protokoll jidhru kważi kull xahar, u kull sena aktar u aktar żviluppaturi huma konvinti li QUIC huwa l-futur. Huwa saħansitra possibbli li jiġi inkluż il-protokoll f'verżjonijiet futuri tal-munzell TCP, li jfisser li llum jew għada l-Internet kollu jimxi għal konnessjonijiet aktar stabbli u aktar mgħaġġla.
Diġà issa tista 'tikkonfigura l-interazzjoni QUIC għall-infrastruttura tiegħek jew saħansitra tagħtiha lill-browsers - kollha qed jippjanaw li jżidu l-appoġġ għall-protokoll, u l-istatistika diqa ma' caniuse se ssir aktar ferrieħa.