HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

QUIC (Quick UDP Internet Connections) is in protokol boppe op UDP dat alle funksjes fan TCP, TLS en HTTP/2 stipet en de measte fan har problemen oplost. It wurdt faaks in nij as "eksperiminteel" protokol neamd, mar it hat it eksperimintele poadium lang oerlibbe: ûntwikkeling is al mear as 7 jier oanhâldend. Yn dy tiid slagge it protokol net om in standert te wurden, mar waard dochs wiidferspraat. QUIC wurdt bygelyks brûkt troch giganten lykas Google en Facebook om ferkear te fersnellen en fertragingen yn mobile netwurken te ferminderjen, en de IETF ferklearre har gabel fan it protokol de basis foar de HTTP/3-standert (ek al brûkt HTTP/2 mar 44.8% siden).

Konsept

QUIC waard ûntwikkele as ferfanging foar de legacy TCP, dy't oarspronklik waard ûntworpen foar bedrade netwurken mei leech ferlies. TCP leveret pakketten yn oarder, dus as ien pakket ferlern is, wurdt de hiele wachtrige stoppe (head-of-line blocking), dy't de kwaliteit en stabiliteit fan 'e ferbining negatyf beynfloedet. Om massive ferliezen te foarkommen, nimme sellulêre netwurken gebrûk fan grutte buffers, wat op syn beurt liedt ta oerstalligens en falsk negative reaksje fan it protokol (bufferbloat). Derneist besteget TCP in protte tiid oan it oprjochtsjen fan in ferbining: SYN / ACK- en TLS-oanfragen geane apart, wêrby't trije roundtrips nedich binne ynstee fan ien, lykas QUIC docht.

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

Sûnt QUIC kombinearret in TCP-ferfanging en in ymplemintaasje fan TLS 1.3, binne alle ferbiningen altyd fersifere, en it ûntsiferjen fan sa'n ferkear is net makliker dan as it oer HTTPS gie. Derneist wurdt QUIC ymplementearre op it tapassingsnivo, lykas in folsleine ferfanging fan 'e TCP-stapel soe nimme ivichheid.

Nettsjinsteande stipe foar multiplexing yn HTTP / 2, bleau it probleem fan head-of-line blocking dêr troch de needsaak om pakketten yn oarder te leverjen. QUIC wurdt ymplementearre boppe op UDP, sadat it yn prinsipe gjin blokkearjen hat, en om foar te kommen dat pakketten foar altyd ferlern gean, wurde se nûmere en kinne dielen fan "buorlju" befetsje, it leverjen fan oerstalligens. Derneist splitst QUIC de monolityske wachtrige yn meardere triedden foar ferskate soarten oanfragen binnen ien ferbining. Dus, as in pakket ferlern is, kinne problemen allinich foar ien wachtrige ûntstean (bygelyks foar it oerdragen fan in spesifyk bestân):

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

Gebrûk

Yn it earstoan waard QUIC ûntwikkele binnen Google en waard foar in grut part oanpast foar gebrûk binnen it bedriuw. Yn 2013 waard it oerdroegen oan de IETF foar standerdisearring (dy't noch oanhâldt), en no kin elkenien meidwaan oan 'e ûntwikkeling fan it protokol troch foar te stellen wat se misse. De IETF-wurkgroep organisearret jiergearkomsten wêrby't in nije standert goedkard wurdt en ynnovaasjes besprutsen wurde. Dizze ymplemintaasje fan QUIC wurdt beskôge as de wichtichste en it is op basis dat de HTTP/3-standert sertifisearre is.

Oant no is der gjin sprake oer it opnimmen fan HTTP/3 as it haadprotokol, om't it noch net klear is en hast net stipe:

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

Mar QUIC kin wurde ymplementearre as in ferfier tusken de applikaasje en de tsjinner, dat waard mei súkses dien by Uber:

Uber's kommentaar oer de ynfiering fan QUIC

Om QUIC mei súkses te ynbêden en applikaasjeprestaasjes te ferbetterjen yn minne ferbiningsomjouwings, hawwe wy de âlde stapel (HTTP / 2 oer TLS / TCP) ferfongen troch it QUIC-protokol. Wy brûkten de netwurkbibleteek Cronet fan Chromium projekten, dy't de orizjinele Google-ferzje fan it protokol befettet - gQUIC. Dizze ymplemintaasje wurdt ek konstant ferbettere om de lêste IETF-spesifikaasje te folgjen.

Wy yntegrearre Cronet earst yn ús Android-apps om stipe ta te foegjen foar QUIC. Yntegraasje waard útfierd op sa'n wize dat de migraasjekosten safolle mooglik ferminderje. Ynstee fan it folslein ferfangen fan de âlde netwurkstapel dy't de bibleteek brûkte OkHttp, wy hawwe Cronet UNDER it OkHttp API-ramt yntegrearre. Troch de yntegraasje op dizze manier te dwaan, hawwe wy wizigingen foarkommen oan ús netwurkoproppen (dy't wurde brûkt troch Neigean) op it API-nivo.

Fergelykber mei de oanpak foar Android-apparaten, implementeare wy Cronet yn Uber-apps op iOS, ûnderskeppe HTTP-ferkear fan netwurk APImei help fan NSURL Protocol. Dizze abstraksje, levere troch de iOS Foundation, behannelet protokol-spesifike URL-gegevens en soarget derfoar dat wy Cronet kinne yntegrearje yn ús iOS-applikaasjes sûnder signifikante migraasjekosten.

nommen fan dizze oersetting Uber artikels

Op 'e efterkant fongen se QUIC-ferbiningen fia Google Cloud lb, dy't stipet protokol sûnt healwei 2018.

It is gjin ferrassing dat Google Cloud geweldig wurket mei it troch Google ûntwikkele protokol, mar wat binne de alternativen?

Nginx

Net lang lyn CloudFlare Ik besocht oer te stekken nginx (dy't standert HTTP/3 net stipet) mei syn Quiche-ark. De ymplemintaasje is beskikber as ien .patch-bestân, dat komt mei in ynstallaasje-tutorial:

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

Hjir kinne jo as nedich jo modules ferbine

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

Alles wat oerbliuwt is HTTP/3-stipe ynskeakelje

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Request buffering in not currently supported for HTTP/3.
        proxy_request_buffering off;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

It is noch net mooglik om te ferbinen fia HTTP/3 yn gewoane browsers, mar jo kinne brûke Chrome Kanaryske en rinne it mei de flagge --enable-quic, gean nei jo server of bygelyks de quic.rocks-side en sjoch nei it ferbiningstype yn Untwikkeldersark:
HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol
Ynstee fan HTTP/3 wurdt it skreaun http2+quic/99, mar it is yn wêzen itselde ding.

Oare technologyen

konklúzje

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

De belangstelling foar QUIC is ynstabyl, mar groeit, en der wurdt wurke om it te standerdisearjen. Nije ymplemintaasjes fan it protokol ferskine hast elke moanne, en elk jier binne mear en mear ûntwikkelders oertsjûge dat QUIC de takomst is. It is sels mooglik om it protokol op te nimmen yn 'e takomstige ferzjes fan' e TCP-stapel, wat betsjut dat ier of letter it heule ynternet ferpleatst nei stabiler en rapper ferbiningen.

No al kinne jo QUIC-ynteraksje foar jo ynfrastruktuer konfigurearje of sels oan browsers jaan - se binne allegear fan plan om stipe foar it protokol ta te foegjen, en de tryste statistiken mei caniuse sille fleuriger wurde.

HTTP oer UDP - goed gebrûk meitsje fan it QUIC-protokol

Boarne: www.habr.com

Add a comment