QUIC (Quick UDP Internet Connections) ืืื ืึท ืคึผืจืึธืืึธืงืึธื ืืืืฃ ืฉืคึผืืฅ ืคืื UDP ืืืึธืก ืฉืืืฆื ืึทืืข ืื ืคึฟืขืึดืงืืืื ืคืื TCP, TLS ืืื HTTP/2 ืืื ืกืึทืืืื ืจืืึฟ ืคืื ืืืืขืจ ืคึผืจืึธืืืขืืก. ืขืก ืืื ืึธืคื ืืขืจืืคื ืึท ื ืืึทืข ืึธืืขืจ "ืขืงืกืคึผืขืจืืืขื ืืึทื" ืคึผืจืึธืืึธืงืึธื, ืึธืืขืจ ืขืก ืืื ืืึทื ื ืึทืืืืืืื ืื ืืงืกืคึผืขืจืืขื ืึทื ืืื ืข: ืึทื ืืืืืงืืื ื ืืื ืึธื ืืึธืื ื ืคึฟืึทืจ ืืขืจ ืืื 7 ืืึธืจ. ืื ื ืืข ืจ ืฆืฒ ื ืื ื ืืข ืจ ืคืจืืืืงืื , ื ืืฉ ื ืืขืืื ืืข ื ืฆ ื ืฐืขืจ ื ื ืกืืื ืืืจื , ืืืข ืจ ืื ื ืื ื ืืขืฐืืจ ื ืคืืจืฉืคืจืฒื . ืคึฟืึทืจ ืืืึทืฉืคึผืื, QUIC ืืื ืืขื ืืฆื ืืืจื ืึทืืึท ืืืฉืืืึทื ืฅ ืืื Google ืืื ืคืึทืกืขืืึธืึธืง ืฆื ืคืึทืจืืืืขืจื ืคืึทืจืงืขืจ ืืื ืจืขืืืฆืืจื ืืืืืื ืืื ืจืืจืขืืืืืง ื ืขืืืืึธืจืงืก, ืืื ืื IETF ืืขืจืงืืขืจื ืืืื ืคึผืจืึธืืึธืงืึธื ืืึธืคึผื ืื ืืงืขืจ ืคึฟืึทืจ ืื ืืืืคึผ / 3 ื ืึธืจืืึทื (ืืึธืืฉ HTTP / 2 ื ืืฆื
ืืึทืืจืืฃ
QUIC ืืื ืืขืืืขืืึธืคึผืขื ืืื ืึท ืคืึทืจืืืึทื ืคึฟืึทืจ ืื ืืขืืึทื TCP, ืืืึธืก ืืื ืืขืืืขื ืขืจืืืืฉื ืึทืื ืืืืืื ื ืคึฟืึทืจ ื ืืืขืจืืง-ืึธื ืืืขืจ ืืืืืขืจื ื ืขืืืืึธืจืงืก. TCP ืืืืืืืขืจื ืคึผืึทืงืืฅ ืืื ืกืืจ, ืึทืืื ืืืื ืืืื ืคึผืึทืงืึทื ืืื ืคืึทืจืคืึทืื, ืื ืืื ืฆืข ืจืื ืืื ืกืืึทืคึผื (
ืืื ื QUIC ืงืึทืืืืื ื ืึท TCP ืคืึทืจืืืึทื ืืื ืึท ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื TLS 1.3, ืึทืืข ืงืึทื ืขืงืฉืึทื ื ืืขื ืขื ืฉืืขื ืืืง ืื ืงืจืืคึผืืื, ืืื ืืืงืจืืคึผืืื ื ืึทืืึท ืคืึทืจืงืขืจ ืืื ื ืื ืืจืื ืืขืจ ืืื ืืืื ืขืก ืืืึธืื ืืืื ืืืืขืจ ืืืืคึผืก. ืืื ืึทืืืฉืึทื, QUIC ืืื ืืืคึผืืึทืืขื ืึทื ืืืืฃ ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืจืื, ืืื ืึท ืืึทื ืฅ ืคืึทืจืืืึทื ืคืื ืื TCP ืึธื ืืืืื ืืืึธืื ื ืขืืขื ืืืืืงืืึทื.
ืืจืึธืฅ ืฉืืืฆื ืคึฟืึทืจ ืืืืืืคึผืืขืงืกืื ื ืืื ืืืืคึผ / 2, ืื ืคึผืจืึธืืืขื ืคืื ืงืึธืคึผ-ืคืื-ืฉืืจื ืืืึทืงืื ื ืืื ืืขืืืืื ืืึธืจื ืจืขืื ืฆื ืืขืจ ื ืืื ืฆื ืฆืืฉืืขืื ืคึผืึทืงืืฅ ืืื ืกืืจ. QUIC ืืื ืืืคึผืืึทืืขื ืึทื ืืืืฃ ืฉืคึผืืฅ ืคืื UDP, ืึทืืื ืขืก ืืื ืงืืื ืืืึทืงืื ื ืืื ืคึผืจืื ืฆืืคึผ, ืืื ืฆื ืคืึทืจืืืึทืื ืคึผืึทืงืืฅ ืคืื ืฉืืขื ืืืง ืคืึทืจืคืึทืื, ืืื ืืขื ืขื ืืขืฆืืืื ืืื ืงืขื ืขื ืึทื ืืืึทืืื ืืืืื ืคืื "ืฉืื ืื," ืคึผืจืึทืืืืืืื ื ืืืขืจืืงืืึทื. ืืื ืึทืืืฉืึทื, QUIC ืกืคึผืืืฅ ืื ืืึทื ืึทืืืืืง ืจืื ืืื ืงืืืคื ืคึฟืขืืขื ืคึฟืึทืจ ืคืึทืจืฉืืืขื ืข ืืืืคึผืก ืคืื ืจืืงืืืขืก ืืื ืึท ืืืื ืงืฉืจ. ืืืื, ืืืื ืึท ืคึผืึทืงืึทื ืืื ืคืึทืจืคืึทืื, ืคึผืจืึธืืืขืืก ืงืขื ืืืื ืืืืื ืคึฟืึทืจ ืืืื ืจืื (ืืืฉื, ืคึฟืึทืจ ืืจืึทื ืกืคืขืจืื ื ืึท ืกืคึผืขืฆืืคืืฉ ืืขืงืข):
ื ืืฆื
ืืืืืขืก, QUIC ืืื ืืขืืืขืืึธืคึผืขื ืืื Google ืืื ืืื ืืขืืืขื ืืึทืจืืขืื ืืืืืขืจื ืคึฟืึทืจ ื ืืฆื ืืื ืื ืคืืจืืข. ืืื 2013, ืขืก ืืื ืืขืืืขื ืืจืึทื ืกืคืขืจื ืฆื ืื IETF ืคึฟืึทืจ ืกืืึทื ืืขืจืืืืืืฉืึทื (ืืืึธืก ืืื ื ืึธื ืึธื ืืึธืื ื), ืืื ืืืฆื ืึทืืขืืขื ืงืขื ืขื ืึธื ืืืื ื ืขืืขื ืืื ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ืืขื ืคึผืจืึธืืึธืงืึธื ืืืจื ืคืึธืจืฉืืึธืื ืืืึธืก ืืื ืคืขืื ืืืง. ืื IETF ืึทืจืืขื ืืจืืคึผืข ืึธืจืืึทื ืืืืจื ืืขืจืืขื ืืืืื ืื ืืขืฉืึทืก ืืืึธืก ืึท ื ืืึทืข ื ืึธืจืืึทื ืืื ืืืืืืืืงื ืืื ืื ืึธืืืืืืฉืึทื ื ืืขื ืขื ืืืกืงืึทืกื. ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื QUIC ืืื ืืขืจืขืื ื ืืื ืื ืืืืคึผื ืืื ืขืก ืืื ืืืืืจื ืืืืฃ ืื HTTP / 3 ื ืึธืจืืึทื ืืื ืกืขืจืืึทืคืืื.
ืืื ืืืฆื, ืขืก ืืื ืงืืื ืจืขืื ืืืขืื ืึทืจืืึทื ืืขืจืขืื ื HTTP / 3 ืืื ืื ืืืืคึผื ืคึผืจืึธืืึธืงืึธื, ืืืืึทื ืขืก ืืื ื ืืฉื ืคืึทืจืืืง ื ืึธื ืืื ืืื ืึผืืขื ื ืืฉื ืืขืฉืืืฆื:
ืึธืืขืจ QUIC ืงืขื ืขื ืืืื ืืืคึผืืึทืืขื ืึทื ืืื ืึท ืึทืจืืืขืจืคืืจื ืฆืืืืฉื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืื ืกืขืจืืืขืจ, ืืืึธืก ืืื ืืฆืืื ืืืจืืืขืงืึธืื ืืื Uber:
Uber ืก ืืึทืืขืจืงืื ื ืืืืฃ ืื ืืงืืื ืคืื QUIC
ืฆื ืืฆืืื ืืืืขื QUIC ืืื ืคึฟืึทืจืืขืกืขืจื ืึทืคึผืืึทืงืืืฉืึทื ืคืึธืจืฉืืขืืื ื ืืื ื ืขืืขื ืงืึทื ืขืงืืืืืืื ืื ืืืืืจืึทื ืืึทื ืฅ, ืืืจ ืจืืคึผืืืืกื ืื ืึทืื ืึธื ืืืืื (HTTP / 2 ืืืืขืจ TLS / TCP) ืืื ืื QUIC ืคึผืจืึธืืึธืงืึธื. ืืืจ ืืขืืืืื ื ืื ื ืขืฅ ืืืืืืึธืืขืง
Cronet ืคืืืงืจืึธืืืืึทื ืคึผืจืึทืืืฉืขืงืก , ืืืึธืก ืึผืืื ืืขืจ ืึธืจืืืื ืขื Google ืืืขืจืกืืข ืคืื โโโโืืขื ืคึผืจืึธืืึธืงืึธื - gQUIC. ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืื ืืืื ืงืขืกืืืืขืจ ืืืคึผืจืืืื ืฆื ื ืึธืืคืึธืืื ืื ืืขืฆืืข IETF ืืึทืฉืจืืึทืืื ื.ืืืจ ืขืจืฉืืขืจ ืื ืึทืืจืืืืื Cronet ืืื ืืื ืืืขืจ ืึทื ืืจืืื ืึทืคึผืคึผืก ืฆื ืืืืื ืฉืืืฆื ืคึฟืึทืจ QUIC. ืื ืืขืืจืึทืืืึธื ืืื ืืืจืืืขืงืึธืื ืืื ืึทืืึท ืึท ืืืขื ืฆื ืจืขืืืฆืืจื ืื ืืืืจืืืฉืึทื ืงืึธืก ืืื ืคืื ืืื ืืขืืืขื. ืึทื ืฉืืึธื ืืึธืจ ืจืืคึผืืืืกืื ื ืื ืึทืื ื ืขืืืืึธืจืงืื ื ืึธื ืืืืื ืืืึธืก ืืขืืืืื ื ืื ืืืืืืึธืืขืง
OkHttp , ืืืจ ืืึธืื ืื ืึทืืจืืืืื Cronet ืืื ืืขืจ ืื OkHttp API ืคืจืืืืืืขืจืง. ืืืจื ืืขื ืื ืึทืืจืืืฉืึทื, ืืืจ ืืืกืืืืื ืขื ืืขืจืื ืืขื ืฆื ืืื ืืืขืจ ื ืขืฅ ืงืึทืืืก (ืืืึธืก ืืขื ืขื ืืขื ืืฆื ืืืจืืจืขืืจืึธืคืื ) ืืืืฃ ืื ืึทืคึผื ืืืจืื.ืขื ืืขื ืฆื ืืขืจ ืฆืืืึทื ื ืคึฟืึทืจ ืึทื ืืจืืื ืืขืืืืกืขืก, ืืืจ ืืืคึผืืึทืืขื ืึทื Cronet ืืื Uber ืึทืคึผืคึผืก ืืืืฃ ืืึธืก, ืื ืืขืจืกืขืคึผืืื ื ืืืืคึผ ืคืึทืจืงืขืจ ืคืื ื ืขืฅ
ืึทืคึผื ื ืืฆืNSURL ืคึผืจืึธืืึธืงืึธื . ืื ืึทืืกืืจืึทืงืฆืืข, ืฆืืืขืฉืืขืื ืืืจื ืื ืืึธืก ืืืืงืืคึผืขืืืข, ืืึทื ืืึทืื ืคึผืจืึธืืึธืงืึธื-ืกืคึผืขืฆืืคืืฉ URL ืืึทืื ืืื ืื ืฉืืจื ืึทื ืืืจ ืงืขื ืขื ืืืกืฉืืืืขื Cronet ืืื ืืื ืืืขืจ ืืึธืก ืึทืคึผืืึทืงืืืฉืึทื ื ืึธื ืืึทืืืืืืง ืืืืจืึทืืืึธื ืงืึธืก.
ืืขื ืืืขื ืคืื
ืืืืฃ ืื ืืึทืงืขื ื ืืื ืืขืืืคื QUIC ืงืึทื ืขืงืฉืึทื ื ืืืจื Google ืงืืึธืื ืื, ืืืึธืก
ืขืก ืืื ืงืืื ืืืขืจืจืึทืฉื ืึทื Google ืงืืึธืื ืึทืจืืขื ืืจืืืก ืืื ืื Google-ืืขืืืขืืึธืคึผืขื ืคึผืจืึธืืึธืงืึธื, ืึธืืขืจ ืืืึธืก ืืขื ืขื ืื ืึทืืืขืจื ืึทืืืืืขืก?
ื ืืื ืงืก
ื ืื ืืึทื ื ืฆืืจืืง CloudFlare
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';
}
}
ืขืก ืืื ื ืึธื ื ืื ืืขืืืขื ืฆื ืคืึทืจืืื ืื ืืืจื ืืืืคึผ / 3 ืืื ืจืขืืืืขืจ ืืจืึทืืืขืจื, ืึธืืขืจ ืืืจ ืงืขื ืขื ื ืืฆื --enable-quic
, ืืืื ืฆื ืืืื ืกืขืจืืืขืจ ืึธืืขืจ, ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืื quic.rocks ืคึผืืึทืฅ ืืื ืงืืง ืืื ืื ืงืฉืจ ืืืคึผ ืืื ืืขืืืขืืึธืคึผืขืจ ืืืฉืืจืื:
ืึทื ืฉืืึธื ืืืืคึผ / 3 ืขืก ืืื ืืขืฉืจืืื http2+quic/99
, ืึธืืขืจ ืขืก ืก ืืกืขื ืฉืึทืื ืื ืืขืืืข ืืึทื.
ืื ืืขืจืข ืืขืงื ืึทืืึทืืืฉืื
- QUIC ืืืื ืฉืืืฆื
LiteSpeed (ืืืึธืก ืงืึธื ื ืขืงืืขื ืฆื ืคืึทืกืขืืึธืึธืง ืืืจื ืืืืคึผ / 3 ืืื ืืจืืืก ืคืึทื ืคืขืจ) ืืื ืคึผืจืึธืืจืขืกืืืืงืึทืื . ืึทืคึผืึทืืฉื ืงืขื ืขื ื ืืฉื ืืึธื ืืึธืก ื ืึธื, ืึธืืขืจ ืึทืจืืขื ืืื ืึทื ืืขืจืืืืืคืื ืกืืืื ื . - 21 ืืื ืืืจ ืืขืจืืืึทื ืืืงื
ืคึผืืึทื ื ืึธืจืืึทื ืคึฟืึทืจ WebRTC - ืคึผืื ืงื ืื ืื ืืขืจืข ืืึธื ืืืืงืจืึธืกืึธืคึฟื ืืขืขืคื ื
msquic ืืืคึผืืึทืืขื ืืืืฉืึทื ืงืึธื , ืืื ืืืึธืก ื ืื ืึทืืข ืคืึทื ืืงืฉืึทื ื ืคืื ืื IETF ื ืึธืจืืึทื ืืขื ืขื ื ืึธื ืื ืืืฆื, ืึธืืขืจ ืืึธืก ืืื ืฉืืื ืึท ืืจืืืก ืืจืืืงืืจื.
ืกืึธืฃ
ืืื ืืขืจืขืก ืืื QUIC ืืื ืึทื ืกืืืืืึทื, ืึธืืขืจ ืืจืึธืืื ื, ืืื ืึทืจืืขื ืืื ืึทื ืืขืจืืืื ืฆื ืกืืึทื ืืขืจืืืื ืขืก. ื ืื ืืืคึผืืึทืืึทื ืฅ ืคืื ืืขื ืคึผืจืึธืืึธืงืึธื ืืขืจืฉืืึทื ืขื ืึผืืขื ืืขืืขืจ ืืืืฉ, ืืื ืืขืืขืจ ืืึธืจ ืืขืจ ืืื ืืขืจ ืืขืืืขืืึธืคึผืขืจืก ืืขื ืขื ืงืึทื ืืืื ืกื ืึทื QUIC ืืื ืื ืฆืืงืื ืคึฟื. ืขืก ืืื ืืคืืื ืืขืืืขื ืฆื ืึทืจืืึทื ื ืขืืขื ืืขื ืคึผืจืึธืืึธืงืึธื ืืื ืฆืืงืื ืคึฟื ืืืขืจืกืืขืก ืคืื ืื TCP ืึธื ืืืืื, ืืืึธืก ืืืื ืึทื ืืืืขืจ ืึธืืขืจ ืฉืคึผืขืืขืจ ืื ืืื ืฆืข ืืื ืืขืจื ืขื ืืืขื ืืึทื ืฆื ืืขืจ ืกืืึทืืื ืืื ืคืึทืกืืขืจ ืงืึทื ืขืงืฉืึทื ื.
ืฉืืื ืืืฆื ืืืจ ืงืขื ืขื ืงืึทื ืคืืืืขืจ QUIC ืื ืืขืจืึทืงืฉืึทื ืคึฟืึทืจ ืืืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืึธืืขืจ ืืคืืื ืืขืื ืขืก ืฆื ืืจืึทืืืขืจื - ืืื ืืขื ืขื ืึทืืข ืคึผืืึทื ืืจืื ื ืฆื ืืืืื ืฉืืืฆื ืคึฟืึทืจ ืืขื ืคึผืจืึธืืึธืงืึธื, ืืื ืื ืืจืืืขืจืืง ืกืืึทืืืกืืืง ืืื ืงืึทื ืืืก ืืืขื ืืืขืจื ืืขืจ ืคืจืืืืขื.
ืืงืืจ: www.habr.com