HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

QUIC (Quick UDP Internet Connections) — Ă«shtĂ« njĂ« protokoll mbi UDP, i cili mbĂ«shtet tĂ« gjitha mundĂ«sitĂ« e TCP, TLS dhe HTTP/2 dhe zgjidh shumicĂ«n e problemeve tĂ« tyre. Shpesh quhet njĂ« protokoll i ri ose "eksperimental", por ai ka kaluar prej kohĂ«sh fazĂ«n eksperimentale: zhvillimi i tij ka vazhduar pĂ«r mĂ« shumĂ« se 7 vjet. GjatĂ« kĂ«saj kohe, protokolli nuk arriti tĂ« bĂ«hej standard, por gjithsesi ka marrĂ« njĂ« shpĂ«rndarje tĂ« gjerĂ«. PĂ«r shembull, QUIC pĂ«rdoret pĂ«r tĂ« pĂ«rshpejtuar trafikun dhe pĂ«r tĂ« ulur vonesat nĂ« rrjetet celulare nga gjigantĂ« si Google dhe Facebook, ndĂ«rsa IETF shpalli fork-un e tij si bazĂ« pĂ«r standardin HTTP/3 (duke pasur parasysh se HTTP/2 pĂ«rdor vetĂ«m 44.8% tĂ« faqeve).

Koncepci

QUIC u zhvillua si një zëvendësim për TCP-në e vjetëruar, e cila fillimisht ishte e dizajnuar për rrjetet me tela me një përqindje të ulët humbjesh. TCP dërgon paketat në rend kronologjik, kështu që në rastin e humbjes së një pakete, e gjithë radha ndalon (bllokimi i kokës së linjës), gjë që ndikon negativisht në cilësinë dhe stabilitetin e lidhjes. Për të shmangur humbjet masive, rrjetet celulare përdorin memória të mëdha, çka nga ana tjetër çon në tepërsi dhe reagimin false negative të protokollit (bufferbloat). Për më tepër, TCP kalon shumë kohë për të vendosur një lidhje: kërkesat SYN/ACK dhe TLS shkojnë veçmas, duke kërkuar tri rrethime në vend të një, siç bën QUIC.

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

Duke qenë se QUIC kombinon zëvendësimin e TCP-së dhe implementimin e TLS 1.3, të gjitha lidhjet gjithmonë janë të enkriptuara, duke e bërë të vështirë dekodimin e këtij trafiku, ashtu siç do të ishte për HTTPS. Për më tepër, QUIC është implementuar në nivelin e aplikacionit, pasi një zëvendësim i plotë i grupit të TCP do të kërkonte përjetësi.

Megjithëse mbështet shumëfishimin në HTTP/2, problemi i bllokimit të kokës së linjës mbetet për shkak të nevojës për të dërguar paketat në rend kronologjik. QUIC është realizuar mbi UDP, kështu që nuk ka bllokime në parim, dhe për të siguruar që paketat nuk humbasin pa kthim, ato numërohen dhe mund të përmbajnë pjesë "fqinji", duke ofruar tepërsi. Për më tepër, QUIC ndan radhën monolitike në disa rrjedha për lloje të ndryshme kërkesash brenda një lidhjeje. Kështu, në rastin e humbjes së një pakete, problemet mund të shfaqen vetëm në një radhë (për shembull, në dërgimin e një skedari të caktuar):

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

Përdorimi

Originally, QUIC was developed within Google, primarily for internal use. In 2013, it was handed over to the IETF for standardization (which is still ongoing), and now anyone can participate in the development of the protocol by suggesting what they feel is lacking. The IETF working group organizes annual meetings to ratify new standards and discuss innovations. This implementation of QUIC is considered the main one, and it is on this basis that the HTTP/3 standard is certified.

As of now, there is no talk of incorporating HTTP/3 as the main protocol because it is still incomplete and has minimal support:

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

However, QUIC can be implemented as a transport between an application and a server, as successfully done by Uber:

Uber's comment on the implementation of QUIC

Për të integruar me sukses QUIC dhe për të përmirësuar performancën e aplikacionit në kushte të këqija lidhjeje, ne zëvendësuam stekun e vjeter (HTTP/2 mbi TLS/TCP) me protokollin QUIC. Ne përfshiu bibliotekën e rrjetit Cronet nga Projektet Chromium, e cila përmban versionin origjinal të protokollit të Google, gQUIC. Kjo implementim gjithashtu përmirësohet vazhdimisht për t'u përputhur me specifikimin më të fundit të IETF.

SĂ« pari, ne integuam Cronet nĂ« aplikacionet tona Android pĂ«r tĂ« shtuar mbĂ«shtetje pĂ«r QUIC. Integrimi u realizua nĂ« njĂ« mĂ«nyrĂ« qĂ« reduktonte sa mĂ« shumĂ« shpenzimet e migrimit. NĂ« vend qĂ« tĂ« zĂ«vendĂ«sonim tĂ«rĂ«sisht stekĂ«n e vjetĂ«r tĂ« rrjetit qĂ« pĂ«rdorte bibliotekĂ«n OkHttp, ne integuam Cronet NË kuadĂ«r tĂ« API-sĂ« sĂ« OkHttp. Duke e realizuar integrimin nĂ« kĂ«tĂ« mĂ«nyrĂ«, ne shmanguam ndryshime nĂ« thirrjet tona rrjetore (tĂ« cilat pĂ«rdorin Retrofit) nĂ« nivelin e API-sĂ«.

Në mënyrë të ngjashme me qasjen tonë për pajisjet Android, ne implementuam Cronet në aplikacionet Uber për iOS, duke kapur trafik HTTP nga API, duke përdorur NSURLProtocol. Kjo abstraksion, e ofruar nga iOS Foundation, trajton të dhënat e URL-ve specifike për protokollin dhe garanton që mund të integrojmë Cronet në aplikacionet tona për iOS pa shpenzime të mëdha migrimi.

taken from this translation of the Uber article

On the backend, they were capturing QUIC connections through Google Cloud lb, which supports the protocol since mid-2018.

It's no surprise that Google Cloud works perfectly with a protocol developed by Google, but what are the alternatives?

Nginx

Recently, CloudFlare attempted to combine nginx (which by default does not support HTTP/3) with its tool Quiche. The implementation is available as a single .patch file, along with an installation 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

Here, you can include your own modules if needed

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

All that remains is to enable HTTP/3 support

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 is 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 standard browsers, connecting via HTTP/3 is not currently possible, but you can take Chrome Canary and run it with the flag --enable-quic, access your server or, for example, the site quic.rocks and check the connection type in Developer Tools:
HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC
Instead of HTTP/3, it shows http2+quic/99, but essentially, it's the same thing.

Other technologies

Përfundim

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

Interesi pĂ«r QUIC Ă«shtĂ« i ndryshueshĂ«m, por po rritet, po punohet mbi standardizimin e tij. Realisht tĂ« reja tĂ« protokollit po shfaqen çdo muaj, dhe çdo vit gjithnjĂ« e mĂ« shumĂ« zhvillues po binden se e ardhmja Ă«shtĂ« tek QUIC. ËshtĂ« e mundur qĂ« protokolli tĂ« pĂ«rfshihet nĂ« versionet e ardhshme tĂ« stakut TCP, dhe kjo do tĂ« thotĂ« se herĂ«t a vonĂ« i gjithĂ« interneti do tĂ« kalojĂ« nĂ« lidhje mĂ« tĂ« qĂ«ndrueshme dhe mĂ« tĂ« shpejta.

Tani tashmĂ« mund tĂ« konfigurosh ndĂ«rveprimin QUIC pĂ«r infrastrukturĂ«n tĂ«nde ose madje ta ofrosh atĂ« pĂ«r shfletuesit — tĂ« gjithĂ« planifikojnĂ« tĂ« shtojnĂ« mbĂ«shtetje pĂ«r protokollin, dhe statistikat e zymta nga caniuse do tĂ« bĂ«hen mĂ« optimiste.

HTTP mbi UDP - përdorimi i dobishëm i protokollit QUIC

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster