Fir méi wéi 20 Joer hu mir WebsÀite gekuckt mat dem HTTP Protokoll. Déi meescht Benotzer denken net emol un wat et ass a wéi et funktionnéiert. Anerer wëssen datt iergendwou ënner HTTP TLS gëtt, an ënner deem TCP ass, ënner deem IP ass, a sou weider. An nach anerer - Heretics - gleewen datt TCP eng Saach vun der Vergaangenheet ass, si wëllen eppes méi séier, méi zouverléisseg a sécher. Awer an hire Versuche fir en neien ideale Protokoll ze erfannen, si si zréck an d'Technologie vun den 80er Joren a probéieren hir brave nei Welt drop ze bauen.

Eng kleng Geschicht: HTTP/1.1
Am Joer 1997 huet den Textinformatiounsaustauschprotokoll HTTP Versioun 1.1 sĂ€in eegene RFC kritt. Deemools gouf de Protokoll vu Browser fir e puer Joer benotzt, an den neie Standard huet weider fofzĂ©ng gedauert. De Protokoll huet nĂ«mmen um Ufro-Ăntwert Prinzip geschafft a war virun allem fir d'Transmissioun vun Textinformatioun geduecht.
HTTP gouf entwéckelt fir uewen um TCP Protokoll ze lafen, fir sécherzestellen datt PÀck zouverlÀsseg op hir Destinatioun geliwwert ginn. TCP funktionnéiert andeems se eng zouverlÀsseg Verbindung tëscht Endpunkte etabléiert an ënnerhalen an de Traffic a Segmenter briechen. Segmenter hunn hir eege Seriennummer a Kontrollsumme. Wann op eemol ee vun de Segmenter net ukomm ass oder mat enger falscher Kontrollsumm kënnt, da stoppt d'Transmissioun bis de verluerene Segment restauréiert ass.
An HTTP/1.0 gouf d'TCP Verbindung no all Ufro zougemaach. Dëst war extrem verschwendend, well ... eng TCP Verbindung (3-Way-Handshake) opzebauen ass e luesen Prozess. HTTP/1.1 huet den Keep-alive Mechanismus agefouert, deen Iech erlaabt eng Verbindung fir verschidde Ufroen ze benotzen. Wéi och ëmmer, well et einfach e Flaschenhals ka ginn, erlaaben verschidde Implementatioune vun HTTP/1.1 datt verschidde TCP Verbindunge mam selwechte Host opgemaach ginn. Zum Beispill, Chrome a rezent Versioune vu Firefox erlaben bis zu sechs Verbindungen.

D'VerschlĂ«sselung sollt och un aner Protokoller iwwerlooss ginn, a fir dĂ«st gouf den TLS-Protokoll iwwer TCP benotzt, wat d'DonnĂ©eĂ«n zouverlĂ€sseg geschĂŒtzt huet, awer d'ZĂ€it erfuerderlech fir eng Verbindung ze grĂ«nnen. Als Resultat huet de Handshakeprozess ugefaang esou ausgesinn:

Cloudflare Illustratioun
Also hat HTTP/1.1 eng Rei Probleemer:
- Lues Verbindung Setup.
- Daten ginn an Textform iwwerdroen, dat heescht datt d'Transmissioun vu Biller, Videoen an aner net-Textinformatioun net effikass ass.
- Eng TCP Verbindung gëtt fir eng Ufro benotzt, dat heescht datt aner Ufroe mussen entweder eng aner Verbindung fannen oder waarden bis déi aktuell Ufro se verëffentlecht.
- Nëmmen de Pullmodell gëtt ënnerstëtzt. Et gëtt nÀischt am Standard iwwer Server-Push.
- Rubriken ginn am Text iwwerdroen.
Wann Server-Push op d'mannst mam WebSocket Protokoll implementéiert gëtt, da missten déi verbleiwen Probleemer méi radikal behandelt ginn.
E bësse Modernitéit: HTTP/2
Am 2012 huet Google ugefaang um SPDY (ausgeschwat "speedy") Protokoll ze schaffen. De Protokoll gouf entwĂ©ckelt fir d'Haaptproblemer vun HTTP / 1.1 ze lĂ©isen a glĂ€ichzĂ€iteg sollt d'RĂ©ckkompatibilitĂ©it erhalen. Am 2015 huet den IETF Aarbechtsgrupp d'HTTP/2 SpezifizĂ©ierung op Basis vum SPDY Protokoll agefouert. Hei sinn d'Ănnerscheeder am HTTP/2:
- BinÀr Serialiséierung.
- Multiplexing multiple HTTP-Ufroen an eng eenzeg TCP Verbindung.
- Server-Push aus der Këscht (ouni WebSocket).
De Protokoll war e grousse Schrëtt no vir. Hien staark a erfuerdert net d'Schafung vu multiple TCP Verbindungen: all Ufroe fir een Host ginn an een multiplexéiert. Dat ass, an enger Verbindung ginn et e puer sougenannte Streamen, jidderee vun deenen seng eegen ID huet. De Bonus ass e Boxed Server-Push.
WĂ©i och Ă«mmer, Multiplexing fĂ©iert zu engem anere SchlĂ«sselproblem. Stellt Iech vir datt mir asynchron 5 Ufroen op ee Server ausfĂ©ieren. Wann Dir HTTP/2 benotzt, ginn all dĂ«s Ufroe bannent der selwechter TCP Verbindung duerchgefouert, dat heescht datt wann ee vun de Segmenter vun enger Ufro verluer ass oder falsch empfĂ€nkt, d'Transmissioun vun all Ufroen an Ăntwerte stoppt bis de verluerene Segment ass. restaurĂ©iert. Natierlech, wat mĂ©i schlecht d'VerbindungsqualitĂ©it ass, dest mĂ©i lues funktionnĂ©iert HTTP/2. , a BedĂ©ngungen, wou verluere Pakete fir 2% vun alle Paketen ausmaachen, funktionnĂ©iert HTTP/1.1 am Browser besser wĂ©i HTTP/2 wĂ©inst der Tatsaach, datt et 6 Verbindungen opmaacht anstatt eng.
Dëse Problem gëtt "Head-of-Line Blocking" genannt an et ass leider net méiglech et ze léisen wann Dir TCP benotzt.

Illustratioun vum Daniel Steinberg
Als Resultat hunn d'Entwéckler vum HTTP / 2 Standard eng super Aarbecht gemaach an hunn bal alles gemaach wat an der Applikatiounsschicht vum OSI Modell gemaach ka ginn. Et ass ZÀit op d'Transportschicht erof ze goen an en neien Transportprotokoll ze erfannen.
Mir brauchen en neie Protokoll: UDP vs TCP
Zimlech sĂ©ier gouf et kloer datt d'Ămsetzung vun engem komplett neien Transportschichtprotokoll eng onmĂ©iglech Aufgab an der heiteger RealitĂ©it ass. D'Tatsaach ass datt d'Hardware oder d'MĂ«ttelboxen (Router, Firewalls, NAT Serveren ...) iwwer d'Transportschicht wĂ«ssen, an hinnen eppes Neies ze lĂ©ieren ass eng extrem schwiereg Aufgab. ZousĂ€tzlech ass d'ĂnnerstĂ«tzung fir Transportprotokoller an de Kernel vun de Betribssystemer agebaut, an d'KĂ€ren sinn och net ganz gewĂ«llt ze Ă€nneren.
An hei kéint een d'HÀnn an d'Hand werfen a soen "Mir erfannen natierlech en neien HTTP/3 mat Preferenz a Courtesane, awer et dauert 10-15 Joer fir ëmgesat ze ginn (no ongeféier dës ZÀit wÀert de gréissten Deel vun der Hardware sinn ersat)", awer et gëtt eng méi net sou Déi offensichtlech Optioun ass den UDP Protokoll ze benotzen. Jo, jo, dee selwechte Protokoll dee mir benotzt hunn fir Dateien iwwer LAN an de spéiden XNUMXer an fréien XNUMXer ze werfen. Bal all haut d'Hardware kann mat et schaffen.
Wat sinn d'Virdeeler vun UDP iwwer TCP? Als éischt hu mir keng Transportschichtsessioun déi d'Hardware weess. Dëst erlaabt eis d'Sessioun op den Endpunkte selwer ze bestëmmen a Konflikter do ze léisen. Dat ass, mir sinn net limitéiert op eng oder e puer Sessiounen (wéi am TCP), mee kënne sou vill vun hinnen erstellen wéi mir brauchen. Zweetens, Dateniwwerdroung iwwer UDP ass méi séier wéi iwwer TCP. Also, an der Theorie, kënne mir déi aktuell Geschwindegkeet Plafong duerchbriechen, déi am HTTP/2 erreecht gëtt.
Wéi och ëmmer, UDP garantéiert keng zouverlÀsseg Dateniwwerdroung. TatsÀchlech schécken mir einfach PÀckchen, an der Hoffnung datt deen aneren Enn se kritt. Hutt net kritt? Gutt, kee Gléck ... Dëst war genuch fir Videoe fir Erwuessener ze iwwerdroen, awer fir méi sérieux Saache brauch Dir ZouverlÀssegkeet, dat heescht datt Dir eppes anescht op UDP wéckelt.
Wéi mat HTTP/2, hunn d'Aarbechten un der Schafung vun engem neie Protokoll bei Google am Joer 2012 ugefaang, dat heescht ongeféier d'selwescht ZÀit wéi d'Aarbechten um SPDY ugefaang hunn. Am Joer 2013 huet Jim Roskind dem allgemenge Public presentéiert , a schonn 2015 gouf den Internet Draft fir Standardiséierung am IETF agefouert. Schonn zu dÀr ZÀit war de Protokoll deen Roskind bei Google entwéckelt huet ganz anescht wéi de Standard, sou datt d'Google Versioun ugefaang huet gQUIC ze ginn.
Wat ass QUIC
Als éischt, wéi scho gesot, ass dëst e Wrapper iwwer UDP. Eng QUIC Verbindung klëmmt uewen op UDP, an deem, Analogie mat HTTP/2, verschidde Streame kënne existéieren. Dës Stréimunge existéieren nëmmen op den Endpunkten a ginn onofhÀngeg zerwéiert. Wann e Paketverloscht an engem Stroum geschitt, wÀert et anerer net beaflossen.

Illustratioun vum Daniel Steinberg
Zweetens gëtt d'Verschlësselung net méi op engem getrennten Niveau ëmgesat, mee ass am Protokoll abegraff. Dëst erlaabt Iech eng Verbindung ze etabléieren an ëffentlech Schlësselen an engem eenzegen Handshake auszetauschen, an erlaabt Iech och de cleveren 0-RTT Handshakemechanismus ze benotzen an Handshake Verspéidungen ganz ze vermeiden. ZousÀtzlech ass et elo méiglech individuell DatepÀck ze verschlësselen. Dëst erlaabt Iech net op d'FÀerdegstellung vun der Erhaalung vun Daten aus dem Stream ze waarden, awer fir déi empfangene Pakete onofhÀngeg ze entschlësselen. Dëse Modus vun Operatioun war am TCP allgemeng onméiglech, well TLS an TCP hunn onofhÀngeg vuneneen geschafft, an TLS konnt net wëssen a wéi eng Stécker TCP-Date gehackt ginn. An dofir konnt hien seng Segmenter net virbereeden, sou datt se an TCP-Segmenter een op een passen an onofhÀngeg decryptéiert kënne ginn. All dës Verbesserungen erlaben QUIC d'Latenz ze reduzéieren am Verglach zum TCP.

Drëttens, d'Konzept vum Liichtstreaming erlaabt Iech d'Verbindung vun der IP Adress vum Client ofzekoppelen. Dëst ass wichteg, zum Beispill, wann e Client vun engem Wi-Fi Zougangspunkt op en aneren wiesselt, seng IP Ànnert. An dësem Fall, wann Dir TCP benotzt, geschitt e laange Prozess wÀhrend deem existéierend TCP Verbindunge Timeout an nei Verbindunge vun enger neier IP erstallt ginn. Am Fall vu QUIC setzt de Client einfach weider PÀckchen op de Server vun enger neier IP mat der aler Stream ID ze schécken. Well D'Stream-ID ass elo eenzegaarteg a gëtt net weiderbenotzt, de Server versteet datt de Client IP geÀnnert huet, verluere Pakete schéckt a weider Kommunikatioun op der neier Adress.
VĂ©ierten, QUIC gĂ«tt um Applikatiounsniveau implementĂ©iert, net um Betribssystemniveau. DĂ«st, engersĂ€its, erlaabt Iech sĂ©ier Ănnerungen am Protokoll ze maachen, well Fir en Update ze krĂ©ien, musst Dir just d'BibliothĂ©ik aktualisĂ©ieren, anstatt op eng nei OS Versioun ze waarden. Op der anerer SĂ€it fĂ©iert dĂ«st zu enger staarker ErhĂ©ijung vum Prozessorverbrauch.
An endlech d'Schlagzeilen. Header Kompressioun ass eng vun de Saachen déi tëscht QUIC an gQUIC ënnerscheeden. Ech gesinn net de Punkt fir vill ZÀit fir dëst ze widmen, ech wÀert just soen datt an der Versioun, déi fir Standardiséierung presentéiert gouf, Header Kompressioun sou Àhnlech wéi méiglech gemaach gouf wéi Header Kompressioun an HTTP / 2. Dir kënnt méi liesen .
Wéi vill méi séier ass et?
Et ass eng schwéier Fro. De Fakt ass datt bis mir e Standard hunn, gëtt et nÀischt Besonnesches ze moossen. VlÀicht déi eenzeg Statistike déi mir hunn sinn Statistike vu Google, déi gQUIC zënter 2013 an 2016 benotzt datt ongeféier 90% vum Traffic, deen op hir Servere vum Chrome Browser geet, elo QUIC benotzt. An der selwechter Presentatioun mellen se datt SÀiten ongeféier 5% méi séier duerch gQUIC lueden an et gi 30% manner Stotteren am Video Streaming am Verglach zum TCP.
Am 2017 huet eng Grupp vu Fuerscher gefouert vum Arash Molavi Kakhki publizéiert d'Leeschtung vun gQUIC am Verglach zu TCP ze studéieren.
D'Studie huet verschidde SchwÀchen vu gQUIC opgedeckt, sou wéi Onstabilitéit fir d'Vermëschung vun Netzpakete, Gierlechkeet (Ongerechtegkeet) fir d'Bandbreedung ze kanaliséieren a méi lues Transfer vu klenge (bis zu 10 kb) Objeten. Déi lescht kann awer kompenséiert ginn andeems Dir 0-RTT benotzt. An all anere FÀll studéiert, huet gQUIC eng Erhéijung vun der Geschwindegkeet am Verglach zum TCP gewisen. Et ass schwéier iwwer spezifesch Zuelen hei ze schwÀtzen. Besser liesen oder .
Hei muss gesot ginn datt dĂ«s DonnĂ©eĂ«n speziell iwwer gQUIC handelen, an et ass net relevant fir de Standard deen entwĂ©ckelt gĂ«tt. Wat geschitt fir QUIC: et ass nach Ă«mmer e Geheimnis, awer et gĂ«tt Hoffnung datt d'SchwĂ€chten, dĂ©i am gQUIC identifizĂ©iert goufen, berĂŒcksichtegt a korrigĂ©iert ginn.
E bësse vun der Zukunft: wat iwwer HTTP/3?
Awer hei ass alles glaskloer: d'API wÀert op kee Fall Ànneren. Alles bleift genau d'selwecht wéi et an HTTP/2 war. Gutt, wann d'API d'selwecht bleift, muss den Iwwergank op HTTP / 3 geléist ginn andeems Dir eng frësch Versioun vun der Bibliothéik um Backend benotzt, deen QUIC Transport ënnerstëtzt. Richteg, Dir musst de Réckfall op al Versioune vun HTTP fir eng laang ZÀit halen, well Den Internet ass momentan net prett fir e kompletten Iwwergang op UDP.
Wien schonn ënnerstëtzt
hei bestehend QUIC Implementatiounen. Trotz dem Mangel un engem Standard ass d'Lëscht net schlecht.
Kee Browser Ă«nnerstĂ«tzt de Moment QUIC an enger Produktiounsrelease. Viru kuerzem gouf et Informatioun datt ĂnnerstĂ«tzung fir HTTP / 3 am Chrome abegraff ass, awer bis elo nĂ«mmen op Kanaresch.
Vun de Backends Ă«nnerstĂ«tzt HTTP/3 nĂ«mmen Đž , awer nach Ă«mmer experimentell. NGINX um Enn vum FrĂ©ijoer 2019 , datt se ugefaang hunn un HTTP/3 ĂnnerstĂ«tzung ze schaffen, awer nach net fĂ€erdeg sinn.
Wat sinn d'Problemer?
Dir an ech liewen an der realer Welt, wou keng grouss Technologie d'Massen erreechen kann ouni Resistenz ze treffen, a QUIC ass keng Ausnahm.
DĂ©i wichtegst Saach ass datt Dir iergendwĂ©i dem Browser erklĂ€re musst datt "https://" net mĂ©i e Fakt ass datt et op den TCP Hafen 443 fĂ©iert. Et kann guer net TCP ginn. Den Alt-Svc Header gĂ«tt dofir benotzt. Et erlaabt Iech de Browser ze soen datt dĂ«s WebsĂ€it och op esou an esou engem Protokoll op esou an esou enger Adress verfĂŒgbar ass. An der Theorie soll dĂ«st wĂ©i e Charme funktionnĂ©ieren, awer an der Praxis komme mir op d'Tatsaach datt UDP zum Beispill op enger Firewall verbuede ka ginn fir DDoS Attacken ze vermeiden.
Awer och wann UDP net verbueden ass, kann de Client hannert engem NAT Router sinn deen konfiguréiert ass fir eng TCP Sessioun duerch IP Adress ze halen, an zënter mir benotzen UDP, déi keng Hardware Sëtzung huet, NAT wÀert d'Verbindung net halen, an eng QUIC Sëtzung .
All dĂ«s Probleemer si wĂ©inst der Tatsaach datt UDP net virdru benotzt gouf fir den Internetinhalt ze vermĂ«ttelen, an d'Hardwarehersteller konnten net viraussoen datt dĂ«st jee gĂ©if geschĂ©ien. Am selwechte Wee verstinn d'Administrateuren nach net wierklech wĂ©i se hir Netzwierker richteg konfigurĂ©ieren fir datt QUIC funktionnĂ©iert. DĂ«s Situatioun wĂ€ert sech no an no Ă€nneren, an op alle Fall wĂ€erten esou Ănnerungen manner ZĂ€it daueren wĂ©i d'Ămsetzung vun engem neien Transportschichtprotokoll.
ZousÀtzlech, wéi scho beschriwwen, erhéicht QUIC d'CPU Benotzung staark. Daniel Stenberg Prozessor Wuesstem bis zu drÀimol.
Wéini kënnt HTTP/3?
Standard bis Mee 2020, awer well d'Dokumenter, déi fir Juli 2019 geplangt sinn, am Moment ongeschloss bleiwen, kënne mir soen datt den Datum héchstwahrscheinlech zréckgedréckt gëtt.
Gutt, Google huet seng gQUIC Implementatioun zënter 2013 benotzt. Wann Dir d'HTTP-Ufro kuckt, déi op d'Google Sichmotor geschéckt gëtt, gesitt Dir dëst:

Conclusiounen
QUIC gesÀit elo aus wéi eng zimlech rau, awer ganz villverspriechend Technologie. Bedenkt datt iwwer déi lescht 20 Joer all Optimisatiounen vun Transportschichtprotokollen haaptsÀchlech TCP betraff hunn, QUIC, déi meeschtens déi bescht Leeschtung huet, gesÀit schonn extrem gutt aus.
Et sinn awer nach ongeléiste Problemer, déi an den nÀchste Jore musse gehandhabt ginn. De Prozess kann verspéit ginn wéinst der Tatsaach, datt et Hardware involvéiert ass, déi kee gÀr aktualiséieren, awer trotzdem gesinn all d'Problemer zimlech léisbar aus, a fréier oder spéider wÀerte mir all HTTP/3 hunn.
D'Zukunft ass just ronderëm den Eck!
Source: will.com
