Ono to není úplně "blbý" nápad. Jen mám pocit, že část žhavě diskutujících ne zcela správně chápe současné fungování TCP, jak vlastně funguje dnešní web, a v neposlední řadě "trendy" = co vlastně uživatelé chtějí (rozuměj. za co mě uživatelé jak síťaře platí).
QUIC řeší určitě problém se zpožděním. Asi praxe ukáže, jak řeší problém se ztrátovostí. Plně chápu, že implementace nového protokolu trvá opravdu dekády, IPv6 budiž reálným příkladem. Zde se použije poměrně chytře legacy protokol, do něj se zapouzdří QUIC jako opět protokol, ale na aplikační vrstvě. Protože se jedná o aplikaci, tak její update je podstatně rychlejší.
QUIC je určitě výsledkem požadavku uživatele. Dnešní uživatel chce pracovat na počítači, plynule přejít se stejnou prací na mobil a dokončit jej na tabletu. Tedy, není možné data skladovat na koncovém zařízení. Máme zde jednoznačně lehký klient-server architekturu. Uživatel je netrpělivý, nechce čekat. Jsme brutálně konzumní společnost, odnaučili jsme se čekat.
Dnešní uživatel chce sledovat videa. Nejlépe v HD, ještě lépe v 4K. Jenže před mnoha a mnoha lety jsme udělali chybu, jmenuje se NAT. Jeho špatnou implementací jsme způsobili, že dneska není prakticky možné, aby server posílající data viděl přímo na klienta, server tedy nemůže posílat video stream na přímo, ale prostřednictvím navázaného spojení, obvykle TCP, i když konkrétně u videa výpadek paketu by vůbec neměl vadit. NAT je ten problém, proč dneska většina IoT zařízení nekomunikuje na přímo, ale vždy prostřednictvím nějakého serveru. Tento problém má řešit IPv6 (všimli jste si chybějícího NATu?), ale dekáda pryč a NATujeme stále jak šílení.
Nečetl jsem návrh QUIC detailně, ale nevypadá jako DDoS nástroj. Naopak, spíše optimalizuje. Jen ne na síťové úrovni, jak jsme všichni zvyklí, ale na aplikační. Ze síťového hlediska vidím jen problém v tom, že u TCP jsem na síti schopen "řídit" klienta, jak moc datového pásma využívá. Prostě mu pár paketů zahodím, TCP window se zmenší, klient používá méně pásma, než postupně zase stoupá nad hranici, kdy opět pár paketů zahodím. U QUIC je to co je neznámé v tom, že UDP je naprosto zcela jedno, kolik paketů zahodím. Žádné window, žádné potvrzování na síťové vrstvě. Vše se děje na aplikační vrstvě, kam jako síťař "nevidím". To je to riziko.
Neni, je to tak maximalne vysledek pozadavku guuglu. Uzivatel chce flash, s 0 zatezi CPU a plynulym prehravanim videi. Uzivatel rozhodne nechce MB javascriptu, GB nesmyslne velkych obrazku, a mazanice na youtube (mel sem tu pochybnu cest opakovane videt co nekdo na yt nahral, a co tam pak bylo ... strasny).
Protokolu pro prehravani videi existuje cela rada, pres NAT funguji temer vsechny a http je zni ze vsech zdaleka nejhorsi. Totez samo plati pro prenos souboru atd.
A co se myslis asi tak stane, kdyz ti na nepotvrzovanym UDP odeslu paket na server, a do SRC dam TVOJI IP. Ten server se te totiz uz ptat nebude (protoze proc by mel) a naladuje ti tam data. Na TCP tohle udelat nejde, protoze server neposle data dokud neprobehne kompletni handshake. A protoze ty (logicky) na jeho vyzvu nijak reagovat nebudes (respektive to ani neprojde pres tvuj NAT, protoze si zadny spojeni nezadal) tak zadny data nebudou ze? Na UDP ti mezi tim dorazi klidne i par stovek MB, nez si to aplikace serveru rozmysli. Takze kdyz poslu YT req tak na 10x video, tak ti sejmu linku ani se nebudu muset moc snazit (a protoze me tech par paketu nijak netrapi, muzu je tam posilat i par mesicu).
A proč by měl server chrlit data na moji IP na základě podvrženého paketu? QUIC má samozřejmě úvodní handshake klient - server. Každé QUIC spojení má svůj pak 64 bit connection ID, tím se dané spojení identifikuje, proto server začne posílat data. A pokud neznáte správný 64 bit connection ID, tak ty data nespustíte.
A co ty dutohlave nechapes na tommhle obrazku? https://i.iinfo.cz/images/607/quic.png
Tak to zkusím ještě jednou. Obrázek ukazuje situaci ("0-RTT"), kdy už někdy předtím (ne příliš dlouho) mezi klientem a serverem proběhla DH výměna a oba si ještě pamatují dohodnutý kontext. Takže není potřeba nový handshake a je možné rovnou použít ten původní (útočník to ale provést nemůže, protože nemá potřebné informace).
Pokud je to první spojení nebo už od předchozího uběhla příliš dlouhá doba, takže si aspoň jedna ze stran původní kontext nepamatuje, je potřeba provést handshake. I v tom případě ale ušetříme čas, protože stačí jeden handshake místo dvou (TCP a TLS).
V reálné praxi se (HTTP) keepalive spojení moc dlouho neudržují. Na načtení obrázků, stylů nebo skriptů v rámci stránky to stačí (pokud dotazy vůbec jsou v jednom spojení), na to, abych si přečetl stránku a vyžádal si další, obvykle ne. Stejně tak když budu procházet různé weby a načítat pořád dokola soubory ze stejného reklamního systému (ano, jistě, je to zlo, fuj, fuj, ale takhle dnes web prostě funguje).
„V reálné praxi se (HTTP) keepalive spojení moc dlouho neudržují.“
A kdyby se udržovaly, tak by to splňovalo požadované chování QUICu?
„...abych si přečetl stránku a vyžádal si další...“
Tak pozor, držení údajů o předchozím spojení jsem si představoval v řádech sekund, nanejvýš desítek sekund, aby se nasypala stránka. Jestli budu další stránku načítat za 10 minut, až si přečtu tu předchozí, pak je mi úplně u pr-dele, že to bude trvat o 200 ms déle!!! Prodlužování platnosti údajů o spojení snižuje bezpečnost (i když zde nechci rozebírat, jak moc).
A kdyby se udržovaly, tak by to splňovalo požadované chování QUICu?
Jen částečně. Nebude sice potřeba nový handshake (přesněji dva) v rámci téhož spojení, ale nacpat všechno do jednoho spojení není prakticé ani efektivní. Navíc udržovat navázané TCP spojení a nechat si položku v cache security kontextů je docela rozdíl.
Jestli budu další stránku načítat za 10 minut, až si přečtu tu předchozí, pak je mi úplně u pr-dele, že to bude trvat o 200 ms déle!!!
Vám možná ano, ale to neznamená, že to nebude vadit nikomu. Tím spíš, že z těch 200 ms může snadno vznknout třeba sekunda, kvůli návazným dotazům, z nichž některé mohou vést na další servery.
Prodlužování platnosti údajů o spojení snižuje bezpečnost (i když zde nechci rozebírat, jak moc).
Klidně rozebírejte. Podle mých zkušeností je lifetime dojednaných klíčů v řádu hodiny nebo dvou naprosto běžný i v aplikacích, kde jde o výrazně víc než u typického HTTPS spojení.
SB: Řekl bych, že není povinností každého obrázku zobrazovat kompletně celý vesmír. Myslím, že je oprávněn existovat i obrázek ukazující navázání QUIC spojení v jednom ze tří možných stavů komunikace. Vedle něj pak mohou existovat obrázky, které ukazují ty další dva případy – když kontext nezná klient a když ho nezná server. Pokud chcete vidět všechny tři případy vedle sebe, také na to existuje obrázek, najdete ho třeba zde: https://blog.acolyer.org/2017/10/26/the-quic-transport-protocol-design-and-internet-scale-deployment/