HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

QUIC (Quick UDP Internet Connections) ื”ื•ื ืคืจื•ื˜ื•ืงื•ืœ ืขืœ ื’ื‘ื™ UDP ื”ืชื•ืžืš ื‘ื›ืœ ื”ืชื›ื•ื ื•ืช ืฉืœ TCP, TLS ื•-HTTP/2 ื•ืคื•ืชืจ ืืช ืจื•ื‘ ื”ื‘ืขื™ื•ืช ืฉืœื”ื. ื–ื” ื ืงืจื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืคืจื•ื˜ื•ืงื•ืœ ื—ื“ืฉ ืื• "ื ื™ืกื™ื•ื ื™", ืื‘ืœ ื”ื•ื ื”ืืจื™ืš ื™ืžื™ื ืืช ืฉืœื‘ ื”ื ื™ืกื•ื™: ื”ืคื™ืชื•ื— ื ืžืฉืš ื›ื‘ืจ ื™ื•ืชืจ ืž-7 ืฉื ื™ื. ื‘ืชืงื•ืคื” ื–ื• ื”ืคืจื•ื˜ื•ืงื•ืœ ืœื ื”ืฆืœื™ื— ืœื”ืคื•ืš ืœืกื˜ื ื“ืจื˜, ืืš ืขื“ื™ื™ืŸ ื”ืคืš ืœื ืคื•ืฅ. ืœื“ื•ื’ืžื”, QUIC ืžืฉืžืฉ ืขื ืงื™ื•ืช ื›ืžื• ื’ื•ื’ืœ ื•ืคื™ื™ืกื‘ื•ืง ื›ื“ื™ ืœื”ืื™ืฅ ืืช ื”ืชืขื‘ื•ืจื” ื•ืœืฆืžืฆื ืขื™ื›ื•ื‘ื™ื ื‘ืจืฉืชื•ืช ืกืœื•ืœืจื™ื•ืช, ื•ื”-IETF ื”ื›ืจื™ื– ืขืœ ื”ืžื–ืœื’ ืฉืœื• ื‘ืคืจื•ื˜ื•ืงื•ืœ ื›ื‘ืกื™ืก ืœืชืงืŸ HTTP/3 (ืœืžืจื•ืช ืฉ-HTTP/2 ืžืฉืชืžืฉ ืจืง 44.8% ืืชืจื™ื).

ืžื•ืฉื’

QUIC ืคื•ืชื— ื›ืชื—ืœื™ืฃ ืœ-TCP ืžื“ื•ืจ ืงื•ื“ื, ืืฉืจ ืชื•ื›ื ืŸ ื‘ืžืงื•ืจ ืขื‘ื•ืจ ืจืฉืชื•ืช ืงื•ื•ื™ื•ืช ื‘ืขืœื•ืช ืื•ื‘ื“ืŸ ื ืžื•ืš. TCP ืžืกืคืง ืžื ื•ืช ืœืคื™ ื”ืกื“ืจ, ื›ืš ืฉืื ื—ื‘ื™ืœื” ืื—ืช ืื•ื‘ื“ืช, ื›ืœ ื”ืชื•ืจ ื ืขืฆืจ (ื—ืกื™ืžืช ืจืืฉ ืงื•), ืžื” ืฉืžืฉืคื™ืข ืœืจืขื” ืขืœ ืื™ื›ื•ืช ื•ื™ืฆื™ื‘ื•ืช ื”ื—ื™ื‘ื•ืจ. ื›ื“ื™ ืœืžื ื•ืข ื”ืคืกื“ื™ื ืžืกื™ื‘ื™ื™ื, ืจืฉืชื•ืช ืกืœื•ืœืจื™ื•ืช ื ื•ืงื˜ื•ืช ื‘ืฉื™ืžื•ืฉ ื‘ืžืื’ืจื™ื ื’ื“ื•ืœื™ื, ืžื” ืฉืžื•ื‘ื™ืœ ื‘ืชื•ืจื• ืœื™ื•ืชืจ ื•ืœืชื’ื•ื‘ื” ืฉืœื™ืœื™ืช ื›ื•ื–ื‘ืช ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ (ื ืคื•ื— ื—ื•ืฆืฅ). ื‘ื ื•ืกืฃ, TCP ืžื‘ืœื” ื–ืžืŸ ืจื‘ ื‘ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ: ื‘ืงืฉื•ืช SYN/ACK ื•-TLS ืžืขื•ื‘ื“ื•ืช ื‘ื ืคืจื“, ื”ื“ื•ืจืฉื•ืช ืฉืœื•ืฉ ื ืกื™ืขื•ืช ื”ืœื•ืš ื•ืฉื•ื‘ ื‘ืžืงื•ื ืื—ืช, ื›ืคื™ ืฉืขื•ืฉื” QUIC.

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

ืžื›ื™ื•ื•ืŸ ืฉ-QUIC ืžืฉืœื‘ ืชื—ืœื™ืฃ TCP ื•ื™ื™ืฉื•ื ืฉืœ TLS 1.3, ื›ืœ ื”ื—ื™ื‘ื•ืจื™ื ืชืžื™ื“ ืžื•ืฆืคื ื™ื, ื•ืคืขื ื•ื— ืชืขื‘ื•ืจื” ื›ื–ื• ืื™ื ื” ืงืœื” ื™ื•ืชืจ ืžืืฉืจ ืื ื”ื™ื ื”ื™ื™ืชื” ืขื•ื‘ืจืช ื‘-HTTPS. ื‘ื ื•ืกืฃ, QUIC ืžื™ื•ืฉื ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื”, ื›ืคื™ ืฉืชื™ื“ืจืฉ ื”ื—ืœืคื” ืžืœืื” ืฉืœ ืžื—ืกื ื™ืช ื”-TCP ืœื ืฆื—.

ืœืžืจื•ืช ื”ืชืžื™ื›ื” ื‘ืจื™ื‘ื•ื™ ื‘-HTTP/2, ื”ื‘ืขื™ื” ืฉืœ ื—ืกื™ืžืช ืจืืฉ-ืงื• ื ื•ืชืจื” ืฉื ืขืงื‘ ื”ืฆื•ืจืš ืœื”ืขื‘ื™ืจ ืžื ื•ืช ืœืคื™ ื”ืกื“ืจ. QUIC ืžื™ื•ืฉื ืขืœ ื’ื‘ื™ UDP, ื›ืš ืฉืื™ืŸ ืœื• ื—ืกื™ืžื” ืขืงืจื•ื ื™ืช, ื•ื›ื“ื™ ืœืžื ื•ืข ืžื—ื‘ื™ืœื•ืช ืœืื™ื‘ื•ื“ ืœื ืฆื—, ื”ืŸ ืžืžื•ืกืคืจื•ืช ื•ื™ื›ื•ืœื•ืช ืœื”ื›ื™ืœ ื—ืœืงื™ื ืฉืœ "ืฉื›ื ื™ื", ื”ืžืกืคืงื™ื ื™ืชื™ืจื•ืช. ื‘ื ื•ืกืฃ, QUIC ืžืคืฆืœ ืืช ื”ืชื•ืจ ื”ืžื•ื ื•ืœื™ื˜ื™ ืœืžืกืคืจ ืฉืจืฉื•ืจื™ื ืขื‘ื•ืจ ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ื‘ืงืฉื•ืช ื‘ืชื•ืš ื—ื™ื‘ื•ืจ ื™ื—ื™ื“. ืœืคื™ื›ืš, ืื ื—ื‘ื™ืœื” ืื•ื‘ื“ืช, ืขืœื•ืœื•ืช ืœื”ื™ื•ื•ืฆืจ ื‘ืขื™ื•ืช ืจืง ืขื‘ื•ืจ ืชื•ืจ ืื—ื“ (ืœื“ื•ื’ืžื”, ืขื‘ื•ืจ ื”ืขื‘ืจืช ืงื•ื‘ืฅ ืกืคืฆื™ืคื™):

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

ืœื”ืฉืชืžืฉ

ื‘ืชื—ื™ืœื”, QUIC ืคื•ืชื— ื‘ืชื•ืš ื’ื•ื’ืœ ื•ื”ื•ืชืื ื‘ืžื™ื“ื” ืจื‘ื” ืœืฉื™ืžื•ืฉ ื‘ืชื•ืš ื”ื—ื‘ืจื”. ื‘-2013 ื”ื•ื ื”ื•ืขื‘ืจ ืœ-IETF ืœืฆื•ืจืš ืชืงื™ื ื” (ืฉืขื“ื™ื™ืŸ ื ืžืฉื›ืช), ื•ื›ืขืช ื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœื”ืฉืชืชืฃ ื‘ืคื™ืชื•ื— ื”ืคืจื•ื˜ื•ืงื•ืœ ืขืœ ื™ื“ื™ ื”ืฆืขืช ืžื” ืฉื—ืกืจ ืœื•. ืงื‘ื•ืฆืช ื”ืขื‘ื•ื“ื” ืฉืœ IETF ืžืืจื’ื ืช ืคื’ื™ืฉื•ืช ืฉื ืชื™ื•ืช ื‘ืžื”ืœื›ืŸ ืžืื•ืฉืจ ืชืงืŸ ื—ื“ืฉ ื•ื“ื ื™ื ื‘ื—ื™ื“ื•ืฉื™ื. ื™ื™ืฉื•ื ื–ื” ืฉืœ QUIC ื ื—ืฉื‘ ืœืขื™ืงืจื™ ื•ืขืœ ื‘ืกื™ืกื• ืžืื•ืฉืจ ืชืงืŸ HTTP/3.

ืขื“ ื›ื”, ืœื ื“ื•ื‘ืจ ืขืœ ื”ื›ืœืœืช HTTP/3 ื›ืคืจื•ื˜ื•ืงื•ืœ ื”ืจืืฉื™, ื›ื™ ื”ื•ื ืขื“ื™ื™ืŸ ืœื ื”ืกืชื™ื™ื ื•ื›ืžืขื˜ ืœื ื ืชืžืš:

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

ืื‘ืœ QUIC ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื•ืฉื ื›ืชื—ื‘ื•ืจื” ื‘ื™ืŸ ื”ืืคืœื™ืงืฆื™ื” ืœืฉืจืช, ืžื” ืฉื ืขืฉื” ื‘ื”ืฆืœื—ื” ื‘- Uber:

ื”ืขืจื” ืฉืœ ืื•ื‘ืจ ืขืœ ื”ืฆื’ืช QUIC

ืขืœ ืžื ืช ืœื”ื˜ืžื™ืข ื‘ื”ืฆืœื—ื” QUIC ื•ืœืฉืคืจ ืืช ื‘ื™ืฆื•ืขื™ ื”ืืคืœื™ืงืฆื™ื” ื‘ืงื™ืฉื•ืจื™ื•ืช ืœืงื•ื™ื”, ื”ื—ืœืคื ื• ืืช ื”ืžื—ืกื ื™ืช ื”ื™ืฉื ื” (HTTP/2 ืขืœ TLS/TCP) ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC. ื”ืฉืชืžืฉื ื• ื‘ืกืคืจื™ื™ืช ื”ืจืฉืช ืงืจื•ื ื˜ ืฉืœ ืคืจื•ื™ืงื˜ื™ื ืฉืœ Chromium, ื”ืžื›ื™ืœ ืืช ื”ื’ืจืกื” ื”ืžืงื•ืจื™ืช ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ืฉืœ Google - gQUIC. ื™ื™ืฉื•ื ื–ื” ื’ื ื ืžืฆื ื‘ืฉื™ืคื•ืจ ืžืชืžื™ื“ ื›ื“ื™ ืœืขืงื•ื‘ ืื—ืจ ืžืคืจื˜ ื”-IETF ื”ืขื“ื›ื ื™ ื‘ื™ื•ืชืจ.

ืชื—ื™ืœื” ืฉื™ืœื‘ื ื• ืืช Cronet ื‘ืืคืœื™ืงืฆื™ื•ืช ื”ืื ื“ืจื•ืื™ื“ ืฉืœื ื• ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืชืžื™ื›ืช QUIC. ื”ืื™ื ื˜ื’ืจืฆื™ื” ื‘ื•ืฆืขื” ื‘ืฆื•ืจื” ื›ื–ื• ืฉืชืžื–ืขืจ ืืช ืขืœื•ืช ื”ื”ื’ื™ืจื”. ื‘ืžืงื•ื ืœื”ื—ืœื™ืฃ ืœื—ืœื•ื˜ื™ืŸ ืืช ืขืจื™ืžืช ื”ืจืฉืช ื”ื™ืฉื ื” ืฉื”ืฉืชืžืฉื” ื‘ืกืคืจื™ื™ื” OkHttp, ืฉื™ืœื‘ื ื• ืืช Cronet ืชื—ืช ื”ืžืกื’ืจืช ืฉืœ OkHttp API. ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ื‘ื“ืจืš ื–ื•, ื ืžื ืขื ื• ืžืฉื™ื ื•ื™ื™ื ื‘ืฉื™ื—ื•ืช ื”ืจืฉืช ืฉืœื ื• (ืืฉืจ ืžืฉืชืžืฉื•ืช ื”ืจื”ื™ื˜ื™ื ื—ื“ืฉื™ื) ื‘ืจืžืช ื”-API.

ื‘ื“ื•ืžื” ืœื’ื™ืฉืช ืื ื“ืจื•ืื™ื“, ื”ื˜ืžืขื ื• ืืช Cronet ื‘ืืคืœื™ืงืฆื™ื•ืช Uber iOS ืขืœ ื™ื“ื™ ื™ื™ืจื•ื˜ ืชืขื‘ื•ืจืช HTTP ืžื”ืจืฉืช APIื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ NSURL. ื”ืคืฉื˜ื” ื–ื•, ื”ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ ืงืจืŸ iOS, ืžื˜ืคืœืช ื‘ื ืชื•ื ื™ ื›ืชื•ื‘ืช URL ืกืคืฆื™ืคื™ื™ื ืœืคืจื•ื˜ื•ืงื•ืœ ื•ืžื‘ื˜ื™ื—ื” ืฉื ื•ื›ืœ ืœืฉืœื‘ ืืช Cronet ื‘ื™ื™ืฉื•ืžื™ iOS ืฉืœื ื• ืœืœื ืขืœื•ื™ื•ืช ื”ื’ื™ืจื” ืžืฉืžืขื•ืชื™ื•ืช.

ื ืœืงื— ืž ื”ืชืจื’ื•ื ื”ื–ื” ืžืืžืจื™ื ืฉืœ ืื•ื‘ืจ

ื‘ืงืฆื” ื”ืื—ื•ืจื™ ื”ื ืชืคืกื• ื—ื™ื‘ื•ืจื™ QUIC ื“ืจืš Google Cloud lb, ืืฉืจ ืชื•ืžืš ื‘ืคืจื•ื˜ื•ืงื•ืœ ืžืื– ืืžืฆืข 2018.

ื–ื” ืœื ืžืคืชื™ืข ืฉ-Google Cloud ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ืขื ื”ืคืจื•ื˜ื•ืงื•ืœ ืฉืคื•ืชื— ื‘ื’ื•ื’ืœ, ืื‘ืœ ืžื”ืŸ ื”ืืœื˜ืจื ื˜ื™ื‘ื•ืช?

nginx

ืœื ืžื–ืžืŸ CloudFlare ื ื™ืกื™ืชื™ ืœื—ืฆื•ืช nginx (ืฉืื™ื ื• ืชื•ืžืš ื‘-HTTP/3 ื›ื‘ืจื™ืจืช ืžื—ื“ืœ) ืขื ื”ื›ืœื™ Quiche ืฉืœื•. ื”ื™ื™ืฉื•ื ื–ืžื™ืŸ ื›ืงื•ื‘ืฅ .patch ื™ื—ื™ื“, ืฉืžื’ื™ืข ืขื ืžื“ืจื™ืš ื”ืชืงื ื”:

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

ื›ืืŸ ืชื•ื›ืœ ืœื—ื‘ืจ ืืช ื”ืžื•ื“ื•ืœื™ื ืฉืœืš ื‘ืžื™ื“ืช ื”ืฆื•ืจืš

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

ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืืคืฉืจ ืชืžื™ื›ื” ื‘-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';
    }
}

ืขื“ื™ื™ืŸ ืœื ื ื™ืชืŸ ืœื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช HTTP/3 ื‘ื“ืคื“ืคื ื™ื ืจื’ื™ืœื™ื, ืืš ื ื™ืชืŸ ืœื”ืฉืชืžืฉ Chrome ื”ืงื ืจื™ื™ื ื•ืœื”ืคืขื™ืœ ืื•ืชื• ืขื ื”ื“ื’ืœ --enable-quic, ืขื‘ื•ืจ ืืœ ื”ืฉืจืช ืฉืœืš ืื•, ืœืžืฉืœ, ืœืืชืจ quic.rocks ื•ืขื™ื™ืŸ ื‘ืกื•ื’ ื”ื—ื™ื‘ื•ืจ ื‘ื›ืœื™ ื”ืžืคืชื—ื™ื:
HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC
ื‘ืžืงื•ื HTTP/3 ื”ื•ื ื›ืชื•ื‘ http2+quic/99, ืื‘ืœ ื–ื” ื‘ืขืฆื ืื•ืชื• ื“ื‘ืจ.

ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืื—ืจื•ืช

  • QUIC ื’ื ืชื•ืžืš LiteSpeed (ืฉื”ืชื—ื‘ืจื” ืœืคื™ื™ืกื‘ื•ืง ื“ืจืš HTTP/3 ื‘ืงื•ืœ ืชืจื•ืขื” ืจืžื”) ื•ืžืชืงื“ืžืช ื ื•ืฉื ื›ืœื™ื. Apache ืขื“ื™ื™ืŸ ืœื ื™ื›ื•ืœ ืœืขืฉื•ืช ืืช ื–ื”, ืื‘ืœ ื”ืขื‘ื•ื“ื” ืžืชื‘ืฆืขืช ื‘ืชื ื•ืคื” ืžืœืื”.
  • 21 ื‘ื™ื ื•ืืจ ืขื•ื“ื›ืŸ ื˜ื™ื•ื˜ืช ืชืงืŸ ืขื‘ื•ืจ WebRTC
  • ืจืง ืœืคื ื™ ื›ืžื” ื™ืžื™ื ืžื™ืงืจื•ืกื•ืคื˜ ื ืคืชื—ื” ืงื•ื“ ื™ื™ืฉื•ื msquic, ืฉื‘ื• ืขื“ื™ื™ืŸ ืœื ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืžืชืงืŸ IETF ื–ืžื™ื ื•ืช, ืื‘ืœ ื–ื• ื›ื‘ืจ ืคืจื™ืฆืช ื“ืจืš ื’ื“ื•ืœื”.

ืžืกืงื ื”

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

ื”ื”ืชืขื ื™ื™ื ื•ืช ื‘-QUIC ืื™ื ื” ื™ืฆื™ื‘ื”, ืืš ื’ื•ื‘ืจืช, ื•ื ืžืฉื›ืช ืขื‘ื•ื“ื” ืœืกื˜ื ื“ืจื˜ื™ื–ืฆื™ื”. ื™ื™ืฉื•ืžื™ื ื—ื“ืฉื™ื ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ืžื•ืคื™ืขื™ื ื›ืžืขื˜ ืžื“ื™ ื—ื•ื“ืฉ, ื•ืžื“ื™ ืฉื ื” ื™ื•ืชืจ ื•ื™ื•ืชืจ ืžืคืชื—ื™ื ืžืฉื•ื›ื ืขื™ื ืฉ-QUIC ื”ื•ื ื”ืขืชื™ื“. ืืคืฉืจ ืืคื™ืœื• ืœื›ืœื•ืœ ืืช ื”ืคืจื•ื˜ื•ืงื•ืœ ื‘ื’ืจืกืื•ืช ืขืชื™ื“ื™ื•ืช ืฉืœ ืžื—ืกื ื™ืช ื”-TCP, ืžื” ืฉืื•ืžืจ ืฉื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ื›ืœ ื”ืื™ื ื˜ืจื ื˜ ื™ืขื‘ื•ืจ ืœื—ื™ื‘ื•ืจื™ื ื™ืฆื™ื‘ื™ื ื•ืžื”ื™ืจื™ื ื™ื•ืชืจ.

ื›ื‘ืจ ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืื™ื ื˜ืจืืงืฆื™ื” QUIC ืขื‘ื•ืจ ื”ืชืฉืชื™ืช ืฉืœืš ืื• ืืคื™ืœื• ืœืชืช ืื•ืชื” ืœื“ืคื“ืคื ื™ื - ื›ื•ืœื ืžืชื›ื ื ื™ื ืœื”ื•ืกื™ืฃ ืชืžื™ื›ื” ื‘ืคืจื•ื˜ื•ืงื•ืœ, ื•ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืขืฆื•ื‘ื” ืขื caniuse ืชื”ืคื•ืš ืœื”ื™ื•ืช ืขืœื™ื–ื” ื™ื•ืชืจ.

HTTP over UDP - ืฉื™ืžื•ืฉ ื˜ื•ื‘ ื‘ืคืจื•ื˜ื•ืงื•ืœ QUIC

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”