HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga

Kwemakore anopfuura makumi maviri tanga tichiona mapeji ewebhu tichishandisa HTTP protocol. Vazhinji vashandisi havatombofungi nezve kuti chii uye kuti chinoshanda sei. Vamwe vanoziva kuti pane imwe nzvimbo pasi peHTTP pane TLS, uye pasi payo pane TCP, pasi peiyo IP, zvichingodaro. Uye zvakadaro vamwe - vanyengeri - vanotenda kuti TCP chinhu chekare; ivo vanoda chimwe chinhu nekukurumidza, chakavimbika uye chakachengeteka. Asi mukuedza kwavo kugadzira protocol itsva yakanaka, vadzokera kune tekinoroji ye20s uye vari kuyedza kuvaka nyika yavo itsva yakashinga pairi.
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga

Nhoroondo shoma: HTTP/1.1

Muna 1997, iyo text information exchange protocol HTTP vhezheni 1.1 yakawana yayo RFC. Panguva iyoyo, iyo protocol yakanga yashandiswa nevashanduri kwemakore akati wandei, uye chiyero chitsva chakatora mamwe gumi nemashanu. Iyo protocol yakashanda chete pane yekukumbira-mhinduro musimboti uye yainyanya kuitirwa kuendesa ruzivo rwechinyorwa.

HTTP yakagadzirwa kuti imhanye pamusoro peTCP protocol, ichiva nechokwadi chekuti mapaketi anounzwa zvakavimbika kwaanosvika. TCP inoshanda nekumisikidza nekuchengetedza hukama hwakavimbika pakati pemagumo uye kutyora traffic kuita zvikamu. Zvikamu zvine yavo serial nhamba uye checksum. Kana kamwe kamwe chimwe chezvikamu zvisingasviki kana kusvika necheki isina kururama, ipapo kutapurirana kunomira kusvikira chikamu chakarasika chadzorerwa.

MuHTTP/1.0, kubatana kweTCP kwakavharwa mushure mekukumbira kwega kwega. Uku kwaive kutambisa zvakanyanya, nekuti... kumisikidza kubatana kweTCP (3-Way-Handshake) inzira inononoka. HTTP/1.1 yakaunza iyo inochengetedza-hupenyu, iyo inokutendera kuti ushandise zvakare kubatana kumwe kune akawanda zvikumbiro. Nekudaro, sezvo ichigona kuve bhodhoro nyore, kushandiswa kwakasiyana-siyana kweHTTP/1.1 kunobvumira akawanda TCP kubatana kuti avhurwe kune imwecheteyo host. Semuenzaniso, Chrome uye ichangoburwa vhezheni yeFirefox inobvumira anosvika matanhatu kubatana.
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga
Encryption yaifanirwawo kusiiwa kune mamwe maprotocol, uye nekuda kweizvi, iyo TLS protocol yakashandiswa pamusoro peTCP, iyo yakavimbika yaidzivirira iyo data, asi yakawedzera nguva yaidiwa kumisikidza kubatana. Nekuda kweizvozvo, maitiro ekubata maoko akatanga kutaridzika seizvi:
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga
Cloudflare mufananidzo

Saka HTTP/1.1 yaive nematambudziko akati wandei:

  • Slow connection setup.
  • Dhata inofambiswa muchimiro chemavara, zvinoreva kuti kufambisa kwemifananidzo, mavhidhiyo uye mamwe asiri ezvinyorwa ruzivo haashande.
  • Imwe TCP yekubatanidza inoshandiswa kune imwe chikumbiro, zvinoreva kuti zvimwe zvikumbiro zvinofanirwa kuwana imwe yekubatanidza kana kumirira kusvika chikumbiro chazvino chachiburitsa.
  • Iyo chete yekudhonza modhi inotsigirwa. Iko hakuna chinhu muyero nezve server-push.
  • Misoro inofambiswa muzvinyorwa.

Kana server-push ikangoitwa uchishandisa WebSocket protocol, saka matambudziko akasara aifanira kubatwa zvakanyanya.

Zvidiki zvemazuva ano: HTTP/2

Muna 2012, Google yakatanga kushanda paSPDY (inonzi "speedy") protocol. Iyo protocol yakagadzirirwa kugadzirisa matambudziko makuru eHTTP/1.1 uye panguva imwechete yaifanirwa kuchengetedza kumashure kuenderana. Muna 2015, boka rekushanda reIETF rakaunza iyo HTTP/2 yakatarwa zvichienderana neSPDY protocol. Heino misiyano muHTTP/2:

  • Binary serialization.
  • Multiplexing akawanda HTTP zvikumbiro kuita imwechete TCP yekubatanidza.
  • Server-sundira kunze kwebhokisi (pasina WebSocket).

Iyo protocol yaive nhanho huru yekuenda mberi. Iye zvakasimba inokunda yekutanga shanduro mukumhanya uye hazvidi kusikwa kweakawanda TCP yekubatanidza: zvese zvikumbiro kune mumwe muenzi zvinowedzerwa mune imwe. Ndiko kuti, mune imwe kubatanidza kune akati wandei anonzi hova, imwe neimwe ine ID yayo. Iyo bhonasi ibhokisi server-push.

Nekudaro, kuwanda kwekuwedzera kunotungamira kune rimwe dambudziko rakakosha. Fungidzira kuti tiri kuita asynchronously kuita zvikumbiro zvishanu kune imwe sevha. Paunenge uchishandisa HTTP/5, zvikumbiro izvi zvese zvichaitwa mukati meiyo TCP yekubatanidza, zvinoreva kuti kana chimwe chezvikamu zvechero chikumbiro chakarasika kana kugamuchirwa zvisirizvo, kutumira kwezvikumbiro zvese nemhinduro kuchamira kusvika chikamu chakarasika chave. kudzorerwa. Zviripachena, iyo yakanyanya kunaka yekubatanidza mhando, iyo inononoka HTTP/2 inoshanda. Maererano naDaniel Stenberg, mumamiriro ezvinhu apo mapepa akarasika anotora 2% yemapakiti ose, HTTP/1.1 mubrowser inoita zviri nani kupfuura HTTP/2 nekuda kwekuti inovhura 6 kubatana pane imwe chete.

Dambudziko iri rinonzi "head-of-line blocking" uye, zvinosuruvarisa, hazvibviri kurigadzirisa paunenge uchishandisa TCP.
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga
Mufananidzo naDaniel Steinberg

Nekuda kweizvozvo, vagadziri veiyo HTTP/2 chiyero vakaita basa rakakura uye vakaita zvinenge zvese zvaigona kuitwa pachikamu chekushandisa chemuenzaniso weOSI. Yave nguva yekudzika pasi kune yekutakura layer uye kugadzira itsva yekufambisa protocol.

Tinoda protocol itsva: UDP vs TCP

Nekukurumidza zvakava pachena kuti kuita nyowani nyowani yekutakura layer protocol ibasa risingagone kuitika mune zvanhasi. Ichokwadi ndechokuti hardware kana mabhokisi epakati (router, firewalls, NAT servers ...) vanoziva nezvekutakura kwekutakura, uye kuvadzidzisa chimwe chinhu chitsva ibasa rakaoma zvikuru. Uye zvakare, rutsigiro rwemaprotocol ekufambisa anovakwa mukernel yeanoshanda masisitimu, uye kernels zvakare haadi zvakanyanya kuchinja.

Uye pano munhu anogona kukanda mawoko oti β€œIsu, chokwadi, tichagadzira HTTP/3 nyowani ine zvido uye macourtesans, asi zvinotora makore gumi kusvika gumi nemashanu kuti zviitwe (mushure menguva ino yakawanda yehardware ichave. yakatsiviwa)," asi pane imwezve isiri iyo Sarudzo iri pachena ndeye kushandisa UDP protocol. Ehe, hongu, iyo yakafanana protocol yataishandisa kukanda mafaera pamusoro peLAN mukupera kwamakumi mapfumbamwe uye kutanga kwa10s. Anenge ese mahardware anhasi anogona kushanda nawo.

Ndezvipi zvakanakira UDP pamusoro peTCP? Chekutanga pane zvese, isu hatina chekufambisa chikamu chikamu icho hardware inoziva nezvayo. Izvi zvinotitendera kuti titarise chikamu pamagumo pachedu uye kugadzirisa kusawirirana ikoko. Ndiko kuti, isu hatigumiri kune imwechete kana akati wandei masesheni (semuTCP), asi tinogona kugadzira akawanda acho sezvatinoda. Chechipiri, kuendesa data kuburikidza neUDP kunokurumidza kupfuura kuburikidza neTCP. Saka, muchirevo, tinogona kupaza nepakati pekumhanyisa sirin'i yazvino inowanikwa muHTTP/2.

Nekudaro, UDP haivimbisi yakavimbika data kutapurirana. Chokwadi, tiri kungotumira mapaketi, tichitarisira kuti mumwe mugumo uchaagamuchira. Hauna kugamuchira? Zvakanaka, hapana rombo rakanaka ... Izvi zvaive zvakakwana zvekutumira mavhidhiyo kuvanhu vakuru, asi kune zvimwe zvinhu zvakakomba unoda kuvimbika, izvo zvinoreva kuti unofanira kuputira chimwe chinhu pamusoro peUDP.

Sezvakaita HTTP/2, basa rekugadzira puroti nyowani rakatanga paGoogle muna 2012, kureva kuti, panguva imwechete sebasa reSPDY rakatanga. Muna 2013, Jim Roskind akapa kune veruzhinji QUIC (Kurumidza UDP Internet Connections) protocol, uye kare muna 2015 iyo Internet Draft yakaunzwa kuti igadziriswe muIETF. Kunyange panguva iyoyo, iyo protocol yakagadzirwa naRoskind kuGoogle yakanga yakasiyana zvikuru neyakajairwa, saka Google version yakatanga kunzi gQUIC.

Chii chinonzi QUIC

Chekutanga, sezvatotaurwa, ichi chiputiriso pamusoro peUDP. Kubatana kweQUIC kunokwira pamusoro peUDP, umo, nekuenzanisa neHTTP/2, hova dzinoverengeka dzinogona kuvapo. Idzi hova dziripo chete pamagumo uye dzinoshumirwa dzakazvimirira. Kana kurasikirwa kwepaketi kukaitika murukova rumwe, hazvizokanganisa vamwe.
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga
Mufananidzo naDaniel Steinberg

Chechipiri, encryption haichaitwa padanho rakasiyana, asi inosanganisirwa muprotocol. Izvi zvinokutendera kuti umise chinongedzo uye kuchinjana makiyi eruzhinji mukubata ruoko kamwe chete, uye zvakare inobvumidza iwe kushandisa yakangwara 0-RTT yekubata ruoko meshini uye kudzivirira kunonoka kubata maoko zvachose. Mukuwedzera, ikozvino zvinogoneka encrypt yega data packet. Izvi zvinokutendera kuti usamirire kupedzwa kwekugamuchira data kubva murukova, asi kuti udzikise mapaketi akagamuchirwa wakazvimirira. Iyi nzira yekushanda yakanga isingagoneki muTCP, nokuti TLS neTCP dzakashanda dzakazvimirira kubva kune mumwe nemumwe, uye TLS haina kukwanisa kuziva kuti ndeapi zvidimbu zveTCP data raizochekwa. Uye saka, haana kukwanisa kugadzirira zvikamu zvake kuti zvikwane muzvikamu zveTCP chimwe kune chimwe uye zvinogona kudhindwa zvakazvimirira. Zvese izvi kuvandudzwa zvinobvumira QUIC kudzikisa latency kana ichienzaniswa neTCP.
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga
Chechitatu, iyo pfungwa yekuyerera kwechiedza inokubvumira kuti utore kubatana kubva kukero yeIP yemutengi. Izvi zvakakosha, semuenzaniso, kana mutengi achichinja kubva kune imwe nzvimbo yeWi-Fi kuenda kune imwe, achichinja IP yayo. Muchiitiko ichi, kana uchishandisa TCP, chirongwa chakareba chinoitika panguva iyo iripo TCP yekubatanidza nguva yekubuda uye mitsva yekubatanidza inogadzirwa kubva kune itsva IP. Panyaya yeQUIC, mutengi anongoenderera mberi nekutumira mapaketi kuseva kubva kuIP itsva neiyo yekare rwizi ID. Nokuti Iyo ID yerukova yave yakasarudzika uye haisati yashandiswa zvakare; sevha inonzwisisa kuti mutengi achinja IP, anotumirazve mapaketi akarasika uye anoenderera mberi nekutaurirana pakero nyowani.

Chechina, QUIC inoshandiswa padanho rekushandisa, kwete iro rekushandisa system level. Izvi, kune rumwe rutivi, zvinokubvumira kukurumidza kuita shanduko kune protocol, nokuti Kuti uwane update, unongoda kugadzirisa raibhurari, pane kumirira itsva OS vhezheni. Kune rumwe rutivi, izvi zvinotungamirira kukuwedzera kwakasimba mukushandiswa kwe processor.

Uye pakupedzisira, misoro. Kutsikirira musoro ndechimwe chezvinhu zvinosiyana pakati peQUIC negQUIC. Ini handisi kuona chikonzero chekushandisa nguva yakawanda kune izvi, ndinongotaura kuti mushanduro yakatumirwa kuti igadzirwe, kudzvanywa kwemusoro kwakaitwa kwakafanana sezvinobvira kudzvinyirira musoro muHTTP/2. Unogona kuverenga zvakawanda pano.

Inokurumidza sei?

Mubvunzo wakaoma. Chokwadi ndechekuti kusvika tave nechiyero, hapana chakakosha chekuyera. Pamwe chete nhamba dzatinadzo ihuwandu kubva kuGoogle, yanga ichishandisa gQUIC kubva 2013 uye muna 2016. yakaziviswa kuIETFkuti inenge 90% yetraffic inoenda kumaseva avo kubva kuChrome browser ikozvino inoshandisa QUIC. Mumharidzo imwe cheteyo, vanoshuma kuti mapeji anoremedza anenge 5% nekukurumidza kuburikidza negQUIC uye kune 30% mashoma matuta mukutenderera kwevhidhiyo zvichienzaniswa neTCP.

Muna 2017, boka revatsvagiri rinotungamirwa naArash Molavi Kakhki rakaburitswa basa rakanaka kudzidza mashandiro egQUIC zvichienzaniswa neTCP.
Chidzidzo chacho chakaratidza kusasimba kwakawanda kwegQUIC, sekusagadzikana kune kusanganiswa kwemapakiti etiweki, kukara (kusaruramisira) kuendesa bandwidth uye kunonoka kuendesa zvinhu zvidiki (kusvika ku10 kb). Iyo yekupedzisira, zvisinei, inogona kubhadharwa nekushandisa 0-RTT. Mune zvimwe zviitiko zvose zvakadzidzwa, gQUIC yakaratidza kuwedzera kwekukurumidza kuenzaniswa neTCP. Zvakaoma kutaura nezve nhamba chaidzo pano. Zvirinani kuverenga tsvakurudzo pachayo kana post pfupi.

Pano panofanira kutaurwa kuti iyi data yakanangana negQUIC, uye haina basa kune mwero urikudziridzwa. Chii chichaitika kuQUIC: ichiri chakavanzika, asi pane tariro yekuti kusasimba kwakaonekwa mugQUIC kuchaverengerwa nekugadziriswa.

Zvishoma zveramangwana: ko HTTP/3?

Asi pano zvese zvakajeka: iyo API haizoshanduke chero nzira. Zvese zvicharamba zvakangofanana sezvazvaive muHTTP/2. Zvakanaka, kana iyo API ikaramba yakafanana, shanduko kuenda kuHTTP/3 ichafanirwa kugadziriswa nekushandisa vhezheni nyowani yeraibhurari kubackend inotsigira QUIC kutakura. Ichokwadi, iwe uchafanirwa kuchengetedza iyo yekudzokera kumashure kune ekare mavhezheni eHTTP kwenguva yakati rebei, nekuti IInternet parizvino haina kugadzirira shanduko yakakwana kuUDP.

Ndiani anototsigira

pano Pamazita iripo QUIC mashandisirwo. Pasinei nekushaikwa kwechiyero, rondedzero haina kuipa.

Hapana browser parizvino inotsigira QUIC mukuburitswa kwekugadzira. Munguva pfupi yapfuura pakanga paine ruzivo rwekuti tsigiro yeHTTP/3 yakaiswa muChrome, asi kusvika parizvino muCanary chete.

Zvekumashure, HTTP/3 inotsigira chete Caddy ΠΈ Cloudflare, asi ndichiri kuedza. NGINX pakupera kwechirimo 2019 yakaziviswa, kuti vakatanga kushanda paHTTP/3 rutsigiro, asi havasati vapedza.

Zvinetso ndezvipi?

Iwe neni tinogara munyika chaiyo, uko pasina tekinoroji yakakura inogona kusvika kune vanhu vazhinji pasina kusangana nekupokana, uye QUIC haina mutsauko.

Chinonyanya kukosha ndechekuti iwe unofanirwa kutsanangura kune browser kuti "https://" haisisiri chokwadi chekuti inotungamira kuTCP port 443. Panogona kunge pasina TCP zvachose. Iyo Alt-Svc musoro unoshandiswa kune izvi. Zvinokutendera kuti uudze bhurawuza kuti iyi webhusaiti inowanikwawo pane yakadaro uye yakadaro protocol pane yakadai uye kero. Mukutaura, izvi zvinofanirwa kushanda senge runako, asi mukuita tichasangana nenyaya yekuti UDP inogona, semuenzaniso, kurambidzwa pane firewall kudzivirira DDoS kurwiswa.

Asi kunyangwe UDP isingarambidzwe, mutengi anogona kunge ari kuseri kweNAT router iyo yakagadzirirwa kubata TCP musangano ne IP kero, uye kubvira. isu tinoshandisa UDP, iyo isina hardware chikamu, NAT haizobata iyo yekubatanidza, uye chikamu cheQUIC inogara ichivhunika.

Matambudziko ese aya anokonzerwa nekuti UDP yakanga isati yamboshandiswa kutumira zvemukati zveInternet, uye vagadziri vehardware vaisagona kufanoona kuti izvi zvaizoitika. Nenzira imwecheteyo, vatariri havasati vanyatsonzwisisa maitiro ekugadzirisa zvakanaka network yavo kuti QUIC ishande. Mamiriro ezvinhu aya achachinja zvishoma nezvishoma, uye, chero zvipi zvazvo, shanduko dzakadaro dzichatora nguva shoma pane kushandiswa kweprotocol itsva yekutakura.

Pamusoro pezvo, sezvatotsanangurwa, QUIC inowedzera zvakanyanya CPU kushandiswa. Daniel Stenberg kuongwa processor kukura kusvika katatu.

HTTP/3 ichasvika riini?

Standard kuda kugamuchira panosvika Chivabvu 2020, asi tichifunga kuti magwaro akarongerwa Chikunguru 2019 anoramba asina kupera panguva ino, tinogona kutaura kuti zuva racho rinogona kudzoserwa kumashure.

Zvakanaka, Google yanga ichishandisa yayo gQUIC kuita kubvira 2013. Kana iwe ukatarisa kuchikumbiro cheHTTP chinotumirwa kuGoogle yekutsvaga injini, uchaona izvi:
HTTP/3: Kuputsa Pasi uye Nyika Itsva Yakashinga

zvakawanikwa

QUIC ikozvino inoita seyakapusa, asi inovimbisa tekinoroji. Tichifunga kuti pamusoro pemakore makumi maviri apfuura, zvese optimizations yekutakura layer mapuroteni ane chekuita zvakanyanya neTCP, QUIC, iyo kazhinji ine mashandiro epamusoro, inototaridzika zvakanyanya kunaka.

Zvakadaro, pachine matambudziko asina kugadziriswa achafanirwa kugadziriswa mumakore mashoma anotevera. Maitiro acho anogona kunonoka nekuda kwekuti kune hardware inobatanidzwa, iyo isina munhu anofarira kugadzirisa, asi zvisinei, matambudziko ese anotaridzika solvable, uye nekukurumidza kana gare gare isu tese tichava neHTTP/3.

Ramangwana rava pedyo!

Source: www.habr.com

Voeg