HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

QUIC (Quick UDP Internet Connections) is 'n protokol oor UDP wat al die kenmerke van TCP, TLS en HTTP/2 ondersteun en die meeste van hul probleme oplos. Dit word dikwels 'n nuwe of "eksperimentele" protokol genoem, maar dit het die eksperimentele stadium lank oorleef: ontwikkeling is al meer as 7 jaar aan die gang. Gedurende hierdie tyd het die protokol nie tyd gehad om 'n standaard te word nie, maar het steeds wydverspreid geraak. QUIC word byvoorbeeld deur reuse soos Google en Facebook gebruik om verkeer te bespoedig en latensie in mobiele netwerke te verminder, en die IETF het sy protokolvurk die basis vir die HTTP/3-standaard verklaar (ten spyte daarvan dat HTTP/2 gebruik slegs 44.8% webwerwe).

konsep

QUIC is ontwikkel as 'n plaasvervanger vir die verouderde TCP, wat oorspronklik ontwerp is vir bedrade netwerke met 'n lae persentasie verliese. TCP lewer pakkies in volgorde af, so wanneer een pakkie verlore gaan, word die hele tou bygevoeg (kop-van-lyn blokkering), wat die kwaliteit en stabiliteit van die verbinding negatief beïnvloed. Om groot verliese te vermy, wend sellulêre netwerke tot die gebruik van groot buffers, wat weer lei tot oortolligheid en vals negatiewe protokolrespons (bufferbloat). Daarbenewens spandeer TCP baie tyd om 'n verbinding te vestig: SYN / ACK en TLS-versoeke gaan afsonderlik, wat drie heen- en terugreise vereis in plaas van een, soos QUIC doen.

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

Aangesien QUIC die vervanging van TCP en die implementering van TLS 1.3 kombineer, is alle verbindings altyd geïnkripteer, om sulke verkeer te dekripteer is nie makliker as wanneer dit oor HTTPS gegaan het nie. Daarbenewens word QUIC op die toepassingsvlak geïmplementeer, soos hoe 'n volledige vervanging van die TCP-stapel sal neem ewigheid.

Ten spyte van die ondersteuning vir multipleksing in HTTP/2, het die probleem van kop-van-lyn-blokkering daar gebly as gevolg van die behoefte om pakkies in volgorde af te lewer. QUIC word bo-op UDP geïmplementeer, dus het dit nie in beginsel blokkering nie, en sodat pakkies nie vir ewig verlore gaan nie, is hulle genommer en kan dele van hul "bure" bevat, wat oortolligheid verskaf. Daarbenewens verdeel QUIC 'n monolitiese tou in verskeie drade vir verskillende soorte versoeke binne 'n enkele verbinding. Dus, as 'n pakkie verlore gaan, kan slegs een tou probleme hê (byvoorbeeld om 'n spesifieke lêer oor te dra):

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

Gebruik

QUIC is aanvanklik binne Google ontwikkel en was grootliks aangepas vir gebruik binne die maatskappy. In 2013 is dit aan die IETF voorgelê vir standaardisering (wat steeds aan die gang is), en nou kan almal deelneem aan die ontwikkeling van die protokol deur te bied wat dit kort. Die IETF-werkgroep reël jaarlikse vergaderings waar 'n nuwe standaard goedgekeur word en innovasies bespreek word. Hierdie implementering van QUIC word as die belangrikste een beskou en dit is op grond daarvan dat die HTTP / 3-standaard gesertifiseer is.

Tot dusver is die insluiting van HTTP / 3 as die hoofprotokol nie ter sprake nie, want dit is nog nie klaar nie en word amper nie ondersteun nie:

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

Maar QUIC kan geïmplementeer word as 'n vervoer tussen die toepassing en die bediener, wat suksesvol in Uber gedoen is:

Uber lewer kommentaar op QUIC implementering

Om QUIC suksesvol in te sluit en toepassingsprestasie te verbeter in swak konneksie, het ons die ou stapel (HTTP/2 oor TLS/TCP) met die QUIC-protokol vervang. Ons het die netwerkbiblioteek gebruik Cronet van Chromium-projekte, wat die oorspronklike Google-weergawe van die protokol bevat - gQUIC. Hierdie implementering word ook voortdurend verbeter om die nuutste IETF-spesifikasie te volg.

Ons het Cronet eers in ons Android-toepassings geïntegreer om QUIC-ondersteuning by te voeg. Die integrasie is op so 'n manier uitgevoer dat die koste van migrasie tot die minimum beperk is. In plaas daarvan om die ou netwerkstapel wat die biblioteek gebruik het, heeltemal te vervang OkHttp, Ons het Cronet ONDER die OkHttp API-raamwerk geïntegreer. Deur op hierdie manier te integreer, het ons veranderinge aan ons netwerkoproepe (wat gebruik Skakels) op die API-vlak.

Soortgelyk aan die Android-benadering, het ons Cronet in Uber iOS-toepassings geïmplementeer deur HTTP-verkeer vanaf die netwerk te onderskep APIgebruik NSURL Protokol. Hierdie abstraksie, verskaf deur die iOS-stigting, hanteer protokol-spesifieke URL-data en verseker dat ons Cronet in ons iOS-toepassings kan integreer sonder aansienlike migrasiekoste.

geneem vanaf hierdie vertaling Uber artikels

Op die agterkant het hulle QUIC-verbindings opgevang deur Google Cloud lb, wat ondersteun die protokol sedert middel 2018.

Dit is geen verrassing dat Google Cloud uitstekend werk met die protokol wat deur Google ontwikkel is nie, maar wat is die alternatiewe?

Nginx

Nie so lank gelede nie CloudFlare probeer oorsteek nginx (wat nie HTTP/3 by verstek ken nie) met sy Quiche-instrument. Die implementering is beskikbaar as 'n enkele .patch-lêer, wat saam met 'n installasie-tutoriaal kom:

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

Hier kan jy jou modules koppel indien nodig.

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

Dit bly net om HTTP / 3-ondersteuning te aktiveer

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';
    }
}

In gewone blaaiers sal verbinding via HTTP / 3 nog nie werk nie, maar jy kan dit neem Chrome-Kanarie en hardloop dit met vlag --enable-quic, gaan na jou bediener of, byvoorbeeld, die quic.rocks-werf en sien die tipe verbinding in Ontwikkelaarnutsgoed:
HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik
In plaas van HTTP/3 word dit geskryf http2+quic/99, maar dit is in wese dieselfde ding.

Ander tegnologieë

  • QUIC ondersteun ook Lite Speed (wat met groot fanfare aan Facebook gekoppel is oor HTTP/3) en progressief joggie. Apache weet nog nie hoe nie, maar werk is aan die gang vol swang.
  • 21 Januarie opgedateer konsepstandaard vir WebRTC
  • Net die ander dag het Microsoft geopen msquic implementeringskode, waarin nog nie al die funksies van die IETF-standaard beskikbaar is nie, maar dit is reeds 'n groot deurbraak.

Gevolgtrekking

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

Belangstelling in QUIC is onstabiel, maar groeiende, werk is aan die gang aan die standaardisering daarvan. Nuwe implementerings van die protokol verskyn byna elke maand, en elke jaar is meer en meer ontwikkelaars oortuig dat die toekoms aan QUIC behoort. Selfs die insluiting van die protokol in toekomstige weergawes van die TCP-stapel word toegelaat, wat beteken dat vroeër of later die hele internet na meer stabiele en vinniger verbindings sal beweeg.

Jy kan nou reeds QUIC interaksie vir jou infrastruktuur opstel of dit selfs aan blaaiers gee - hulle beplan almal om protokolondersteuning by te voeg, en hartseer statistieke met caniuse sal meer pret word.

HTTP oor UDP - gebruik die QUIC-protokol tot goeie gebruik

Bron: will.com

Voeg 'n opmerking