HTTP sopra UDP - facennu bon usu di u protocolu QUIC

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

QUIC (Quick UDP Internet Connections) hè un protokollu nantu à UDP chì sustene tutte e funziunalità di TCP, TLS è HTTP/2 è risolve a maiò parte di i so prublemi. Hè spessu chjamatu un protokollu novu o "sperimentale", ma hà longu sopra à u stadiu sperimentale: u sviluppu hè in corso per più di 7 anni. Duranti stu tempu, u protokollu ùn hà micca riesciutu à diventà un standard, ma hè ancu diventatu. Per esempiu, QUIC hè utilizatu da tali giganti cum'è Google è Facebook per accelerà u trafficu è riduce i ritardi in e rete mobili, è l'IETF hà dichjaratu a so furchetta di u protocolu a basa per u standard HTTP / 3 (ancu s'ellu HTTP / 2 usa. solu 44.8% siti).

Concepto

QUIC hè statu sviluppatu cum'è un sustitutu di u TCP legatu, chì era urigginariamente pensatu per e rete cablate à bassa perdita. TCP furnisce i pacchetti in ordine, cusì se un pacchettu hè persu, tutta a fila hè fermata (bloccu di capu di linea), chì affetta negativamente a qualità è a stabilità di a cunnessione. Per evità pèrdite massive, e rete cellulare recurrenu à l'usu di buffer grandi, chì à u turnu porta à a redundanza è a risposta falsa negativa di u protocolu (bufferbloat). Inoltre, TCP passa assai tempu per stabilisce una cunnessione: e richieste SYN / ACK è TLS sò trattate separatamente, chì necessitanu trè andata e ritorno invece di una, cum'è QUIC.

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

Siccomu QUIC combina una sustituzione TCP è una implementazione di TLS 1.3, tutte e cunnessione sò sempre criptate, è decifrare tali trafficu ùn hè micca più faciule ch'è s'ellu passava per HTTPS. Inoltre, QUIC hè implementatu à u livellu di l'applicazione, cum'è una sustituzione cumpleta di a pila TCP piglià eternità.

Malgradu u supportu per u multiplexing in HTTP/2, u prublema di u bloccu di u capu di linea ferma quì per via di a necessità di furnisce i pacchetti in ordine. QUIC hè implementatu nantu à l'UDP, per quessa ùn hà micca bluccatu in principiu, è per impediscenu i pacchetti da esse persu per sempre, sò numerati è ponu cuntene parti di "vicini", chì furnisce redundancy. Inoltre, QUIC divide a fila monolitica in parechje fili per diversi tipi di richieste in una sola cunnessione. Cusì, se un pacchettu hè persu, i prublemi ponu esse solu per una fila (per esempiu, per trasferisce un schedariu specificu):

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

Usu

Inizialmente, QUIC hè statu sviluppatu in Google è hè statu largamente adattatu per l'usu in a cumpagnia. In 2013, hè stata trasferita à l'IETF per a standardizazione (chì hè sempre in corso), è avà ognunu pò participà à u sviluppu di u protokollu prupunendu ciò chì mancanu. U gruppu di travagliu IETF urganizeghja riunioni annuali durante i quali un novu standard hè appruvatu è l'innuvazioni sò discututi. Questa implementazione di QUIC hè cunsiderata u principale è hè nantu à a so basa chì u standard HTTP / 3 hè certificatu.

Finu a ora, ùn si parla micca di include HTTP/3 cum'è u protocolu principale, perchè ùn hè micca finitu ancu è ùn hè quasi micca supportatu:

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

Ma QUIC pò esse implementatu cum'è un trasportu trà l'applicazione è u servitore, chì hè stata fatta cù successu in Uber:

U cumentu di Uber nantu à l'intruduzioni di QUIC

Per incrustà cù successu QUIC è migliurà u rendiment di l'applicazioni in ambienti di cunnessione poveri, avemu rimpiazzatu a vechja pila (HTTP/2 sopra TLS/TCP) cù u protocolu QUIC. Avemu usatu a biblioteca di a rete Cronet из Prughjetti Chromium, chì cuntene l'uriginale, versione Google di u protocolu - gQUIC. Questa implementazione hè ancu constantemente migliurata per seguità l'ultime specificazioni IETF.

Prima avemu integratu Cronet in e nostre app Android per aghjunghje supportu per QUIC. L'integrazione hè stata realizata in modu di riduce u costu di migrazione quantu pussibule. Invece di rimpiazzà cumplettamente l'antica pila di rete chì usava a biblioteca Ok Http, avemu integratu Cronet SOTTU u framework API OkHttp. Facendu l'integrazione in questu modu, avemu evitatu cambiamenti à e nostre chjama di rete (chì sò aduprate da Retrofit) à u livellu API.

Simile à l'approcciu per i dispositi Android, avemu implementatu Cronet in app Uber in iOS, interceptendu u trafficu HTTP da a rete. APIaduprendu Prutoculu NSURL. Questa astrazione, furnita da a Fundazione iOS, gestisce i dati URL specifichi di u protokollu è assicura chì pudemu integrà Cronet in e nostre applicazioni iOS senza costi di migrazione significativu.

pigliatu da sta traduzzione Articuli Uber

In u backend anu pigliatu cunnessione QUIC via Google Cloud lb, chì sustene u protocolu da a mità di u 2018.

Ùn hè micca surprisa chì Google Cloud funziona bè cù u protocolu sviluppatu da Google, ma chì sò l'alternative?

Nginx

Pocu tempu fà CloudFlare Aghju pruvatu à attraversà nginx (chì ùn sustene micca HTTP/3 per difettu) cù u so strumentu Quiche. L'implementazione hè dispunibule cum'è un schedariu .patch unicu, chì vene cun un tutoriale di installazione:

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

Quì pudete cunnette i vostri moduli se ne necessariu

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

Tuttu ciò chì resta hè di attivà u supportu HTTP / 3

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

Ùn hè ancu pussibule di cunnette via HTTP/3 in i navigatori regulari, ma pudete aduprà Chrome Canary è curriri cù a bandiera --enable-quic, andate à u vostru servitore o, per esempiu, u situ quic.rocks è fighjate u tipu di cunnessione in Strumenti di Sviluppatore:
HTTP sopra UDP - facennu bon usu di u protocolu QUIC
Invece di HTTP/3 hè scrittu http2+quic/99, ma hè essenzialmente a stessa cosa.

Altre tecnulugia

cunchiusioni

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

L'interessu in QUIC hè inestabile, ma cresce, è u travagliu hè in corso per standardizà. Novi implementazioni di u protokollu appariscenu quasi ogni mese, è ogni annu più è più sviluppatori sò cunvinti chì QUIC hè u futuru. Hè ancu pussibule include u protokollu in e versioni future di a pila TCP, chì significa chì prima o dopu l'Internet sanu si moverà in cunnessione più stabile è più veloce.

Dighjà avà pudete cunfigurà l'interazzione QUIC per a vostra infrastruttura o ancu dà à i navigatori - tutti sò prughjetti di aghjunghje supportu per u protocolu, è e statistiche tristi cù caniuse diventeranu più allegri.

HTTP sopra UDP - facennu bon usu di u protocolu QUIC

Source: www.habr.com

Add a comment