HTTP UDP-en — használjuk ki a QUIC protokollt

HTTP UDP-en — használjuk ki a QUIC protokollt

A QUIC (Quick UDP Internet Connections) egy UDP-alapú protokoll, amely támogatja a TCP, TLS és HTTP/2 összes lehetőségét, és megoldja legnagyobb problémáikat. Gyakran nevezik új vagy „kísérleti” protokollnak, de már régóta túllépett a kísérleti fázison: a fejlesztés több mint 7 éve zajlik. Ez idő alatt a protokoll nem vált hivatalos sztenderddé, de ennek ellenére széles körben elterjedt. Például a QUIC-et forgalom gyorsítására és a késések csökkentésére használja olyan óriásvállalatok, mint a Google és a Facebook, és az IETF a protokoll forkját az HTTP/3 szabvány alapjának nyilvánította (miközben az HTTP/2-t használja csak 44,8% weboldal).

Koncepció

A QUIC-ot a megöregedett TCP helyettesítésére fejlesztették ki, amely eredetileg vezetéknélküli, alacsony veszteségű hálózatokhoz lett tervezve. A TCP a csomagokat sorrendben szállítja, így ha egy csomag elveszik, az egész sor leáll (head-of-line blocking), ami negatívan befolyásolja a kapcsolat minőségét és stabilitását. A tömeges veszteségek elkerülése érdekében a mobilhálózatok nagy pufferek használatához folyamodnak, ami a protokoll fölöslegességéhez és hamis negatív reakciókhoz (bufferbloat) vezet. Ezen kívül a TCP nagyon sok időt tölt a kapcsolat létrehozásával: a SYN/ACK és TLS kérések külön mennek, három roundtrip-et igényelve egy helyett, ahogy azt a QUIC teszi.

HTTP UDP-en — használjuk ki a QUIC protokollt

Mivel a QUIC ötvözi a TCP helyettesítését és a TLS 1.3 implementálását, minden kapcsolat mindig titkosítva van, és egy ilyen forgalom dekódolása nem könnyebb, mint ha HTTPS-en haladna. Ezenkívül a QUIC alkalmazási szinten valósul meg, mivel a TCP-stack teljes helyettesítése örökkévalóságba telne. Örökkévalóság.

A HTTP/2 multiplexálásának támogatása ellenére a head-of-line blocking problémája a csomagok sorrendbeli kézbesítése miatt megmaradt. A QUIC UDP fölött valósul meg, így alapvetően nincsenek blokkolások, és hogy a csomagok ne vesszenek el véglegesen, számozva vannak és tartalmazhatják szomszédok részeit is, biztosítva a redundanciát. Ezenkívül a QUIC a monolitikus sort több szálra bontja, különböző típusú kérések számára egyetlen kapcsolat belsejében. Így csomagvesztés esetén problémák csak egy sorban merülhetnek fel (például egy adott fájl átvitelénél):

HTTP UDP-en — használjuk ki a QUIC protokollt

Használat

A QUIC-ot eredetileg a Google-n belül lett kifejlesztve, és nagyrészt a cégen belüli használatra lett optimalizálva. 2013-ban az IETF-nek adták át standardizálásra (ami még mindig folyamatban van), és most már bárki részt vehet a protokoll fejlesztésében, javasolva azt, ami számára hiányzik. Az IETF munkacsoport évente találkozókat szervez, ahol új szabványokat hagynak jóvá és megvitatják az újdonságokat. Ez a QUIC-implementáció számít a főnek, és ennek alapján tanúsítják az HTTP/3 szabványt.

Jelenleg még nem merül fel az HTTP/3 mint fő protokoll bevezetése, mert még nem fejeződött be, és szinte nem támogatott:

HTTP UDP-en — használjuk ki a QUIC protokollt

De a QUIC-ot a kliens és a szerver közötti szállítási rétegként lehet megvalósítani, amit a Uber sikeresen végrehajtott:

A Uber megjegyzése a QUIC bevezetéséről

Ahhoz, hogy a QUIC-ot sikeresen beépíthessük és javíthassuk az alkalmazás teljesítményét gyenge kapcsolat esetén, a régi stack-et (HTTP/2 TLS/TCP felett) a QUIC protokollra cseréltük. Felhasználtuk a hálózati könyvtárat Cronet a Chromium Projects, amely tartalmazza a protokoll eredeti, Google-os verzióját – gQUIC. Ez a megvalósítás folyamatosan fejlesztve van, hogy kövesse az IETF legfrissebb specifikációját.

Először integráltuk a Cronet-et Android-alkalmazásainkba, hogy támogassuk a QUIC-ot. Az integrációs folyamatot úgy hajtottuk végre, hogy minimalizáljuk a migrációs költségeket. Ahelyett, hogy teljes mértékben kicseréltük volna a régi hálózati stack-et, amely az OkHttpkönyvtárat használta, a Cronet-et az OkHttp API keretrendszer ALATT integráltuk. Ezzel az integrációval elkerültük a hálózati hívásaink (amelyeket a Retrofit) szintjén végzett változtatásokat.

Hasonlóan az Android-eszközökhöz, a Cronet-et az Uber iOS alkalmazásaiban is beépítettük, megfigyelve a HTTP forgalmat a hálózati API, használva a NSURLProtocol. Ez az iOS Foundation által biztosított absztrakció kezeli a protokollspecifikus URL-adatokat, és biztosítja, hogy a Cronet-et jelentős migrációs költségek nélkül tudjuk integrálni iOS-alkalmazásainkba.

forrás: ez a fordítás Uber cikkéből

A háttérben a QUIC kapcsolatokat a Google Cloud lb-n keresztül fogták el, amely támogatja a protokollt 2018 közepétől.

Nem meglepő, hogy a Google Cloud jól működik a Google által fejlesztett protokollal, de mik az alternatívák?

Nginx

Nemrég a CloudFlare megpróbálta keresztezi nginx (amely alapértelmezés szerint nem támogatja a HTTP/3-at) a Quiche eszközével. A megvalósítás egyetlen .patch fájlként elérhető, amelyhez telepítési útmutató tartozik:

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

Itt szükség szerint csatlakoztathatók a saját moduljai.

./configure                          	
   	--prefix=$PWD                       	
   	--with-http_ssl_module              	
   	--with-http_v2_module               	
   	--with-http_v3_module               	
   	--with-openssl=../quiche/deps/boringssl 
   	--with-quiche=../quiche
 make

Csak a HTTP/3 támogatását kell engedélyezni.

events {
    worker_connections  1024;
}

http {
    server {
        # Engedélyezze a QUIC-et és a HTTP/3-at.
        listen 443 quic reuseport;

        # Engedélyezze a HTTP/2-t (opcionális).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Engedélyezze az összes TLS verziót (a TLSv1.3 szükséges a QUIC-hez).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # A kérés pufferelése jelenleg nem támogatott a HTTP/3 esetében.
        proxy_request_buffering off;

        # Adjon hozzá Alt-Svc fejlécet a HTTP/3 tárgyalásához.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Normál böngészőkön még nem lehet csatlakozni a HTTP/3-hoz, de van lehetőség arra, Chrome Canary és indítsa el a következő kapcsolóval: --enable-quic, lépjen kapcsolatba saját szerverével vagy például a quic.rocks webhellyel, és nézze meg a kapcsolat típusát a Fejlesztői Eszközökben:
HTTP UDP-en — használjuk ki a QUIC protokollt
A HTTP/3 helyett http2+quic/99, de lényegében ugyanaz.

Egyéb technológiák

Zárás

HTTP UDP-en — használjuk ki a QUIC protokollt

Már most beállíthatja a QUIC-kapcsolatot az infrastruktúrája számára, vagy akár átadhatja azt a böngészőknek — mindegyik tervez támogatni a protokollt, és a caniuse.com szomorú statisztikái vidámabbá válnak.

Az Android Chrome böngészőben elérhetővé válik az új sötét mód.

HTTP UDP-en — használjuk ki a QUIC protokollt

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster