VairÄk nekÄ 20 gadus mÄs skatÄmies tÄ«mekļa lapas, izmantojot HTTP protokolu. LielÄkÄ daļa lietotÄju pat nedomÄ par to, kas tas ir un kÄ tas darbojas. Citi zina, ka kaut kur zem HTTP ir TLS, un zem tÄ ir TCP, zem kura ir IP utt. Un vÄl citi - Ä·eceri - uzskata, ka TCP ir pagÄtne, viÅi vÄlas kaut ko ÄtrÄku, uzticamÄku un droÅ”Äku. TaÄu savos mÄÄ£inÄjumos izgudrot jaunu ideÄlu protokolu viÅi ir atgriezuÅ”ies pie 80. gadu tehnoloÄ£ijÄm un mÄÄ£ina uz tÄs veidot savu drosmÄ«go jauno pasauli.
Nedaudz vÄstures: HTTP/1.1
1997. gadÄ teksta informÄcijas apmaiÅas protokols HTTP versija 1.1 ieguva savu RFC. Tolaik protokolu pÄrlÅ«kprogrammas izmantoja vairÄkus gadus, un jaunais standarts ilga vÄl piecpadsmit. Protokols darbojÄs tikai pÄc pieprasÄ«juma-atbildes principa un bija paredzÄts galvenokÄrt teksta informÄcijas pÄrraidei.
HTTP tika izstrÄdÄts, lai darbotos papildus TCP protokolam, nodroÅ”inot, ka paketes tiek uzticami piegÄdÄtas galamÄrÄ·im. TCP darbojas, izveidojot un uzturot uzticamu savienojumu starp galapunktiem un sadalot trafiku segmentos. Segmentiem ir savs sÄrijas numurs un kontrolsumma. Ja pÄkÅ”Åi kÄds no segmentiem neierodas vai ierodas ar nepareizu kontrolsummu, pÄrraide apstÄsies, lÄ«dz tiks atjaunots zaudÄtais segments.
HTTP/1.0 TCP savienojums tika aizvÄrts pÄc katra pieprasÄ«juma. Tas bija ÄrkÄrtÄ«gi izŔķÄrdÄ«gi, jo... TCP savienojuma izveide (3-Way-Handshake) ir lÄns process. HTTP/1.1 ieviesa saglabÄÅ”anas mehÄnismu, kas ļauj atkÄrtoti izmantot vienu savienojumu vairÄkiem pieprasÄ«jumiem. TomÄr, tÄ kÄ tas var viegli kļūt par vÄjo vietu, dažÄdas HTTP/1.1 ievieÅ”anas ļauj vienam un tam paÅ”am resursdatoram atvÄrt vairÄkus TCP savienojumus. PiemÄram, pÄrlÅ«kprogramma Chrome un jaunÄkÄs Firefox versijas ļauj izveidot lÄ«dz seÅ”iem savienojumiem.
Å ifrÄÅ”ana bija jÄatstÄj arÄ« citiem protokoliem, un Å”im nolÅ«kam tika izmantots TLS protokols, izmantojot TCP, kas droÅ”i aizsargÄja datus, bet vÄl vairÄk palielinÄja savienojuma izveidoÅ”anai nepiecieÅ”amo laiku. RezultÄtÄ rokasspiediena process sÄka izskatÄ«ties Å”Ädi:
Cloudflare ilustrÄcija
TÄdÄjÄdi HTTP/1.1 bija vairÄkas problÄmas:
- LÄna savienojuma iestatÄ«Å”ana.
- Dati tiek pÄrsÅ«tÄ«ti teksta formÄ, kas nozÄ«mÄ, ka attÄlu, video un citas informÄcijas, kas nav teksts, pÄrraide ir neefektÄ«va.
- Vienam pieprasÄ«jumam tiek izmantots viens TCP savienojums, kas nozÄ«mÄ, ka citiem pieprasÄ«jumiem ir jÄatrod cits savienojums vai jÄgaida, lÄ«dz paÅ”reizÄjais pieprasÄ«jums to atbrÄ«vo.
- Tiek atbalstÄ«ts tikai vilkÅ”anas modelis. StandartÄ nekas nav minÄts par servera nosÅ«tÄ«Å”anu.
- Virsraksti tiek pÄrsÅ«tÄ«ti tekstÄ.
Ja server-push ir vismaz ieviests, izmantojot WebSocket protokolu, tad atlikuÅ”Äs problÄmas bija jÄrisina radikÄlÄk.
Nedaudz modernitÄtes: HTTP/2
2012. gadÄ Google sÄka strÄdÄt pie SPDY (izrunÄ "Ätrais") protokola. Protokols tika izstrÄdÄts, lai atrisinÄtu galvenÄs HTTP/1.1 problÄmas, un tajÄ paÅ”Ä laikÄ tam bija jÄsaglabÄ atpakaļejoÅ”a savietojamÄ«ba. 2015. gadÄ IETF darba grupa ieviesa HTTP/2 specifikÄciju, kuras pamatÄ ir SPDY protokols. Å eit ir atŔķirÄ«bas HTTP/2:
- BinÄrÄ serializÄcija.
- VairÄku HTTP pieprasÄ«jumu multipleksÄÅ”ana vienÄ TCP savienojumÄ.
- Servera izstumŔana no kastes (bez WebSocket).
Protokols bija liels solis uz priekÅ”u. ViÅÅ” spÄcÄ«gi
TomÄr multipleksÄÅ”ana rada vÄl vienu bÅ«tisku problÄmu. IedomÄjieties, ka mÄs asinhroni izpildÄm 5 pieprasÄ«jumus vienam serverim. Izmantojot HTTP/2, visi Å”ie pieprasÄ«jumi tiks izpildÄ«ti viena un tÄ paÅ”a TCP savienojuma ietvaros, kas nozÄ«mÄ, ka, ja kÄds no jebkura pieprasÄ«juma segmentiem tiek pazaudÄts vai saÅemts nepareizi, visu pieprasÄ«jumu un atbilžu pÄrraide tiks pÄrtraukta, lÄ«dz tiek zaudÄts segments. atjaunota. AcÄ«mredzot, jo sliktÄka savienojuma kvalitÄte, jo lÄnÄk darbojas HTTP/2.
Å o problÄmu sauc par āgalvas bloÄ·ÄÅ”anuā, un diemžÄl to nav iespÄjams atrisinÄt, izmantojot TCP.
Daniela Å teinberga ilustrÄcija
RezultÄtÄ HTTP/2 standarta izstrÄdÄtÄji paveica lielisku darbu un izdarÄ«ja gandrÄ«z visu, ko varÄja paveikt OSI modeļa lietojumprogrammu slÄnÄ«. Ir pienÄcis laiks doties uz transporta slÄni un izgudrot jaunu transporta protokolu.
Mums ir nepiecieŔams jauns protokols: UDP vs TCP
Diezgan Ätri kļuva skaidrs, ka pilnÄ«gi jauna transporta slÄÅa protokola ievieÅ”ana mÅ«sdienu realitÄtÄ ir neiespÄjams uzdevums. Fakts ir tÄds, ka aparatÅ«ra vai vidÄjÄs kastes (marÅ”rutÄtÄji, ugunsmÅ«ri, NAT serveri...) zina par transporta slÄni, un iemÄcÄ«t viÅiem kaut ko jaunu ir ÄrkÄrtÄ«gi sarežģīts uzdevums. TurklÄt transportÄÅ”anas protokolu atbalsts ir iebÅ«vÄts operÄtÄjsistÄmu kodolÄ, un arÄ« kodoli nav Ä«paÅ”i gatavi mainÄ«ties.
Un te varÄtu atmest rokas un teikt āMÄs, protams, izgudrosim jaunu HTTP/3 ar priekÅ”roka un kurtizÄnÄm, bet tÄ ievieÅ”ana prasÄ«s 10-15 gadus (apmÄram pÄc Ŕī laika lielÄkÄ daļa aparatÅ«ras bÅ«s aizstÄts), bet ir vÄl viens ne tik AcÄ«mredzama iespÄja ir izmantot UDP protokolu. JÄ, jÄ, tas pats protokols, ar kuru mÄs deviÅdesmito gadu beigÄs un XNUMX. gadu sÄkumÄ izmantojÄm failu pÄrsÅ«tÄ«Å”anai pa LAN. Ar to var strÄdÄt gandrÄ«z visa mÅ«sdienu aparatÅ«ra.
KÄdas ir UDP priekÅ”rocÄ«bas salÄ«dzinÄjumÄ ar TCP? PirmkÄrt, mums nav transporta slÄÅa sesijas, par kuru aparatÅ«ra zinÄtu. Tas ļauj mums paÅ”iem noteikt sesiju galapunktos un atrisinÄt konfliktus. Tas ir, mÄs neaprobežojamies ar vienu vai vairÄkÄm sesijÄm (kÄ TCP), bet varam izveidot tik daudz no tÄm, cik mums nepiecieÅ”ams. OtrkÄrt, datu pÄrraide caur UDP ir ÄtrÄka nekÄ caur TCP. TÄdÄjÄdi teorÄtiski mÄs varam pÄrvarÄt paÅ”reizÄjos HTTP/2 Ätruma griestus.
TomÄr UDP negarantÄ uzticamu datu pÄrraidi. PatiesÄ«bÄ mÄs vienkÄrÅ”i sÅ«tÄm paciÅas, cerot, ka otrs gals tÄs saÅems. Vai neesat saÅÄmis? Nu, neveicÄs... Ar to pietika, lai pÄrraidÄ«tu video pieauguÅ”ajiem, bet nopietnÄkÄm lietÄm ir nepiecieÅ”ama uzticamÄ«ba, kas nozÄ«mÄ, ka UDP ir jÄietina kaut kas cits.
TÄpat kÄ ar HTTP/2, darbs pie jauna protokola izveides uzÅÄmumÄ Google sÄkÄs 2012. gadÄ, tas ir, aptuveni tajÄ paÅ”Ä laikÄ, kad sÄkÄs darbs pie SPDY. 2013. gadÄ Džims Roskinds iepazÄ«stinÄja plaÅ”Äku sabiedrÄ«bu
Kas ir QUIC
PirmkÄrt, kÄ jau minÄts, tas ir UDP iesaiÅojums. QUIC savienojums tiek izveidots virs UDP, kurÄ, pÄc analoÄ£ijas ar HTTP/2, var pastÄvÄt vairÄkas straumes. Å Ä«s straumes pastÄv tikai galapunktos un tiek apkalpotas neatkarÄ«gi. Ja pakeÅ”u zudums notiek vienÄ straumÄ, tas neietekmÄs citus.
Daniela Å teinberga ilustrÄcija
OtrkÄrt, Å”ifrÄÅ”ana vairs netiek ieviesta atseviÅ”Ä·Ä lÄ«menÄ«, bet ir iekļauta protokolÄ. Tas ļauj izveidot savienojumu un apmainÄ«ties ar publiskajÄm atslÄgÄm vienÄ rokasspiedienÄ, kÄ arÄ« ļauj izmantot gudro 0-RTT rokasspiediena mehÄnismu un izvairÄ«ties no rokasspiediena aizkaves. TurklÄt tagad ir iespÄjams Å”ifrÄt atseviŔķas datu paketes. Tas ļauj negaidÄ«t datu saÅemÅ”anas no straumes pabeigÅ”anu, bet gan patstÄvÄ«gi atÅ”ifrÄt saÅemtÄs paketes. Å is darbÄ«bas režīms TCP parasti nebija iespÄjams, jo TLS un TCP darbojÄs neatkarÄ«gi viens no otra, un TLS nevarÄja zinÄt, kÄdos gabalos TCP dati tiks sasmalcinÄti. Un tÄpÄc viÅÅ” nevarÄja sagatavot savus segmentus tÄ, lai tie ietilptu TCP segmentos viens pret vienu un varÄtu tikt atÅ”ifrÄti neatkarÄ«gi. Visi Å”ie uzlabojumi ļauj QUIC samazinÄt latentumu salÄ«dzinÄjumÄ ar TCP.
TreÅ”kÄrt, gaismas straumÄÅ”anas koncepcija ļauj atsaistÄ«t savienojumu no klienta IP adreses. Tas ir svarÄ«gi, piemÄram, kad klients pÄrslÄdzas no viena Wi-Fi piekļuves punkta uz citu, mainot savu IP. Å ajÄ gadÄ«jumÄ, izmantojot TCP, notiek ilgstoÅ”s process, kura laikÄ esoÅ”ajiem TCP savienojumiem tiek veikta taimauts un tiek izveidoti jauni savienojumi no jauna IP. QUIC gadÄ«jumÄ klients vienkÄrÅ”i turpina sÅ«tÄ«t paketes uz serveri no jauna IP ar veco straumes ID. Jo Straumes ID tagad ir unikÄls un netiek izmantots atkÄrtoti; serveris saprot, ka klients ir mainÄ«jis IP, atkÄrtoti nosÅ«ta pazaudÄtÄs paketes un turpina saziÅu uz jauno adresi.
CeturtkÄrt, QUIC tiek ieviests lietojumprogrammas, nevis operÄtÄjsistÄmas lÄ«menÄ«. Tas, no vienas puses, ļauj Ätri veikt izmaiÅas protokolÄ, jo Lai saÅemtu atjauninÄjumu, jums vienkÄrÅ”i jÄatjaunina bibliotÄka, nevis jÄgaida jauna OS versija. No otras puses, tas izraisa ievÄrojamu procesora patÄriÅa pieaugumu.
Un visbeidzot virsraksti. Galvenes saspieÅ”ana ir viena no lietÄm, kas atŔķiras starp QUIC un gQUIC. Es neredzu jÄgu tam veltÄ«t daudz laika, teikÅ”u tikai to, ka standartizÄcijai iesniegtajÄ versijÄ galvenes saspieÅ”ana tika padarÄ«ta pÄc iespÄjas lÄ«dzÄ«ga galvenes saspieÅ”anai HTTP/2. JÅ«s varat lasÄ«t vairÄk
Cik tas ir ÄtrÄk?
Tas ir grÅ«ts jautÄjums. Fakts ir tÄds, ka, kamÄr mums nav standarta, nekas Ä«paÅ”s nav jÄmÄra. VarbÅ«t vienÄ«gÄ statistika, kas mums ir pieejama, ir Google statistika, kas gQUIC izmanto kopÅ” 2013. gada un 2016. gada.
2017. gadÄ publicÄja pÄtnieku grupa Arash Molavi Kakhki vadÄ«bÄ
PÄtÄ«jums atklÄja vairÄkus gQUIC trÅ«kumus, piemÄram, nestabilitÄti tÄ«kla pakeÅ”u sajaukÅ”anÄ, kanÄla joslas platuma alkatÄ«bu (netaisnÄ«gumu) un lÄnÄku mazu (lÄ«dz 10 kb) objektu pÄrsÅ«tÄ«Å”anu. TomÄr pÄdÄjo var kompensÄt, izmantojot 0-RTT. Visos citos pÄtÄ«tajos gadÄ«jumos gQUIC uzrÄdÄ«ja Ätruma palielinÄÅ”anos salÄ«dzinÄjumÄ ar TCP. Å eit ir grÅ«ti runÄt par konkrÄtiem skaitļiem. LabÄk lasi
Te gan jÄsaka, ka Å”ie dati ir tieÅ”i par gQUIC, un tie nav aktuÄli izstrÄdÄtajam standartam. Kas notiks ar QUIC: tas joprojÄm ir noslÄpums, taÄu ir cerÄ«ba, ka gQUIC konstatÄtÄs nepilnÄ«bas tiks Åemtas vÄrÄ un novÄrstas.
Mazliet par nÄkotni: kÄ ar HTTP/3?
Bet Å”eit viss ir pilnÄ«gi skaidrs: API nekÄdÄ veidÄ nemainÄ«sies. Viss paliks tieÅ”i tÄds pats kÄ HTTP/2. Ja API paliek nemainÄ«ga, pÄreja uz HTTP/3 bÅ«s jÄatrisina, izmantojot jaunu bibliotÄkas versiju aizmugursistÄmÄ, kas atbalsta QUIC transportu. Tiesa, jums bÅ«s jÄsaglabÄ atkÄpÅ”anÄs uz vecajÄm HTTP versijÄm diezgan ilgu laiku, jo Internets paÅ”laik nav gatavs pilnÄ«gai pÄrejai uz UDP.
Kas jau atbalsta
Ŕeit ir
PaÅ”laik neviena pÄrlÅ«kprogramma neatbalsta QUIC ražoÅ”anas laidienÄ. Nesen parÄdÄ«jÄs informÄcija, ka HTTP/3 atbalsts ir iekļauts pÄrlÅ«kÄ Chrome, bet lÄ«dz Å”im tikai KanÄriju salÄs.
No aizmugursistÄmÄm atbalsta tikai HTTP/3
KÄdas ir problÄmas?
JÅ«s un es dzÄ«vojam reÄlajÄ pasaulÄ, kur neviena liela tehnoloÄ£ija nevar sasniegt masu, nesastopoties ar pretestÄ«bu, un QUIC nav izÅÄmums.
VissvarÄ«gÄkais ir tas, ka jums kaut kÄ jÄpaskaidro pÄrlÅ«kprogrammai, ka āhttps://ā vairs nav fakts, ka tas ved uz TCP portu 443. TCP var nebÅ«t vispÄr. Å im nolÅ«kam tiek izmantota Alt-Svc galvene. Tas ļauj jums pateikt pÄrlÅ«kprogrammai, ka Ŕī vietne ir pieejama arÄ« ar tÄdu un tÄdu protokolu tÄdÄ un tÄdÄ adresÄ. TeorÄtiski tam vajadzÄtu darboties kÄ Å”armam, taÄu praksÄ mÄs saskarsimies ar faktu, ka UDP var, piemÄram, aizliegt ugunsmÅ«rÄ«, lai izvairÄ«tos no DDoS uzbrukumiem.
Bet pat tad, ja UDP nav aizliegts, klients var atrasties aiz NAT marÅ”rutÄtÄja, kas ir konfigurÄts TCP sesijas uzturÄÅ”anai pÄc IP adreses, un tÄ kÄ mÄs izmantojam UDP, kam nav aparatÅ«ras sesijas, NAT neuzturÄs savienojumu un QUIC sesiju
Visas Ŕīs problÄmas ir saistÄ«tas ar to, ka UDP iepriekÅ” netika izmantots interneta satura pÄrsÅ«tÄ«Å”anai, un aparatÅ«ras ražotÄji nevarÄja paredzÄt, ka tas kÄdreiz notiks. TÄdÄ paÅ”Ä veidÄ administratori vÄl Ä«sti nesaprot, kÄ pareizi konfigurÄt savus tÄ«klus, lai QUIC darbotos. Å Ä« situÄcija pakÄpeniski mainÄ«sies, un jebkurÄ gadÄ«jumÄ Å”Ädas izmaiÅas prasÄ«s mazÄk laika nekÄ jauna transporta slÄÅa protokola ievieÅ”ana.
TurklÄt, kÄ jau aprakstÄ«ts, QUIC ievÄrojami palielina CPU izmantoÅ”anu. Daniels Stenbergs
Kad ieradīsies HTTP/3?
Standarts
Google ir izmantojis savu gQUIC ievieÅ”anu kopÅ” 2013. gada. Ja skatÄties uz HTTP pieprasÄ«jumu, kas tiek nosÅ«tÄ«ts Google meklÄtÄjprogrammai, jÅ«s redzÄsit Å”o:
Atzinumi
QUIC tagad izskatÄs pÄc diezgan neapstrÄdÄtas, bet ļoti daudzsoloÅ”as tehnoloÄ£ijas. Å emot vÄrÄ, ka pÄdÄjo 20 gadu laikÄ visas transporta slÄÅa protokolu optimizÄcijas galvenokÄrt ir saistÄ«tas ar TCP, QUIC, kam vairumÄ gadÄ«jumu ir vislabÄkÄ veiktspÄja, jau izskatÄs ÄrkÄrtÄ«gi labi.
TomÄr joprojÄm ir neatrisinÄtas problÄmas, kas bÅ«s jÄrisina tuvÄko gadu laikÄ. Process var aizkavÄties tÄpÄc, ka ir iesaistÄ«ta aparatÅ«ra, kuru nevienam nepatÄ«k atjauninÄt, taÄu, neskatoties uz to, visas problÄmas izskatÄs diezgan atrisinÄmas, un agri vai vÄlu mums visiem bÅ«s HTTP/3.
NÄkotne ir tepat aiz stÅ«ra!
Avots: www.habr.com