QUIC (Quick UDP Internet Connections) ααΊααΆαα·ααΈααΆααα
ααΎ UDP αααααΆαααααα»αααΆαααΆααα’αααααα TCP, TLS αα·α HTTP/2 α αΎααααααααΆααααα αΆααΆαα
αααΎααααααα½αααα ααΆααΏααααΆααααΌαααΆαααα α
ααΆαα·ααΈααΆαααααΈ α¬ "ααΆααα·ααααα" ααα»ααααααΆααΆααααααααααααααααΆααααΆααα·αααααα ααΆαα’αα·ααααααααΆαααααα’ααααααααααΆα 7 ααααΆαα αααα»αα’αα‘α»ααααααα αα·ααΈααΆααα·αααΆααααααααααααΎααααΈααααΆαααΆαααααααΆααα ααα»αααααα
ααααΈαααΆαααΆαα ααΆα§ααΆα ααα QUIC ααααΌαααΆαααααΎααααΆααααααααα»αα αα»αααααααΌα
ααΆ Google αα·α Facebook ααΎααααΈαααααΎαααααΏαα
ααΆα
ααα αα·αααΆαααααααααΆααααααΆαααααααα»ααααααΆαααΌααααααα
ααα α αΎα IETF ααΆααααααΆαα’αααΈαααααα·ααΈααΆααααααααα½αααΆααΌαααααΆααααααΆαααααααααΆα HTTP/3 (αααααΈααΆ HTTP/2 ααααΎ
αααα·α
QUIC ααααΌαβααΆαβαααααΎαβα‘αΎαβααΆβααΆαβαααα½αβ TCP α
αΆααβαααβααααΌαβααΆαβαα
ααΆβα‘αΎαβααααΌαβαααααΆααβαααααΆαβααααβαααβααΆαααααβααΆαα TCP ααααααααα
ααααααααΆαααΆαααααΆααααααα ααΌα
ααααααααα·αααΎαααα
αααα½αααααΌαααΆαααΆααααα αα½αααΆααααΌαααααΌαααΆααααααα (
αααααΆα QUIC αα½ααααα
αΌαααΆααααα½α TCP αα·αααΆαα’αα»αααα TLS 1.3 ααΆααααααΆααααΆααα’αααααααααααΌαααΆαα’αα·αααααΈα α αΎαααΆααα·ααααΈαα
ααΆα
ααααααααααα·αααΆααααα½αααΆαααααα·αααΎααΆααααααΆαα HTTPS αααααα ααΎαααΈαααααα QUIC ααααΌαααΆαα’αα»αααααα
ααααα·ααααααα·ααΈ αααααΆαααΆααααα½αααααααααααα TCP ααΉααααααααΉααααα
ααΆαα’αααααα.
αααααΈααΆααΆαααΆαααΆαααααααααΆαα multiplexing αα αααα»α HTTP/2 ααααα αααααα αΆααααΆααααααααΆααααΆα αααααα ααααΆααα ααΈααα αααααΆααααααααΌαααΆααααα»αααΆαα ααα αΆααααα ααααααααΆαααΆαααααΆαααααααα QUIC ααααΌαααΆαα’αα»αααααα ααΎααααΌα UDP ααΌα ααααααΆαα·αααΆαααΆααααααααΆααααΆαααααΆααααα α αΎαααΎααααΈααΆαααΆααααα ααααααααΆαααΈααΆαααΆααααΆααααα αΌα αα½αααΆααααΌαααΆαααΆααααα α αΎαα’αΆα ααΆαααααααααααα "α’ααααα·αααΆα" ααααααααααΆαα ααααΌαα αααααα ααΎαααΈααα QUIC ααααααα½α monolithic αα ααΆαααααααα‘αΆαα αααΎααααααΆαααααααααααααααααΆααααααΎαααα»αααΆααααααΆαααααα½αα ααΌα ααααααααα·αααΎαααα ααααααααΆαααααΌαααΆαααΆααααα αααα αΆα’αΆα ααΎαα‘αΎααααααΆαααααα½ααα½αααα»ααααα (α§ααΆα ααα αααααΆααααΆααααααα―αααΆαααΆααααΆαααα½α)α
ααααΎ
ααααΌα QUIC ααααΌαβααΆαβαααααΎαβα‘αΎαβαα βαααα»α Google α αΎαβααααΌαβααΆαβααααα½αβαααΆαβα αααΎαβαααααΆααβααααΎβαααα»αβαααα»αα αα»αα αα ααααΆα 2013 ααΆααααΌαααΆαααααααα IETF αααααΆααααΆαααααΎαααααααΆα (ααααα αααααα»αααααΎαααΆα) α αΎαα₯α‘αΌααααα’ααααααααααααΆα’αΆα α αΌααα½ααααα»αααΆαα’αα·αααααααα·ααΈααΆααααααααΎααΌαα’αααΈααααα½ααααααα»αααΆααα αααα»αααΆαααΆα IETF αααα ααα·α αα ααααα»ααααα αΆαααααΆα αααα»αα’αα‘α»ααααααααααααααΆαααααΈααααΌαααΆαα’αα»ααα α αΎαααΆαα αααααααα·αααααΌαααΆααα·ααΆααααΆα ααΆαα’αα»αααα QUIC αααααααΌαααΆαα αΆαααα»αααΆααΆα ααα»α ααααΆαα α αΎαααΆααΊααα’ααααΎαααααααΆα HTTP/3 ααααΌαααΆααααααΆααα
αα αΌαααααααααααα αα·αααΆααααΆαααΆααα·ααΆαα’αααΈααΆααα½ααααα αΌα HTTP/3 ααΆαα·ααΈααΆαα ααααααααα αααααααΆαα·αααΆααααΆααααα αα α αΎαααααΎααααα·αααααΌαααΆαααΆααααα
ααα»αααα QUIC α’αΆα
ααααΌαααΆαα’αα»ααααααΆααΆαααΉααααααΌααααΆααααααα·ααΈ αα·ααααΆαααΈααα αααααααΌαααΆαααααΎααααααααααα
Uberα
ααΆαα’ααααΆαα·ααααΆααααα Uber ααΎααΆαααααΆααααα QUIC
ααΎααααΈαααααα QUIC ααααααααα αα·ααααααα’ααΆαα’αα»αααααααααα·ααΈαα αααα»αααα·ααΆααΆααααααΆααααααα ααΎαααΆααααα½ααααα αΆαα (HTTP/2 ααΎ TLS/TCP) ααΆαα½αααΉααα·ααΈααΆα QUIC α ααΎαααΆαααααΎαααααΆααααααααΆα
ααααΌααα ααΈαααααα Chromium ααααααα»αααΌαααααααΎααααα Google αααα·ααΈααΆα - gQUIC α ααΆαα’αα»ααααααααααααα»αααααΌαααΆααααααα’α₯αααααα ααΎααααΈα’αα»ααααααΆαααΆααααααΆααα α»αααααααααα IETF αααΎαααΆαααΆαααααα αΌα Cronet αα αααα»ααααααα·ααΈ Android ααααααΎαααΆααΎαααααΌα ααΎααααΈααααααααΆαααΆαααααααααΆαα QUIC α ααΆαααααΎαααΆα ααααααααααΌαααΆαα’αα»ααααααΆααα·ααΈαα½αααΎααααΈααΆαααααααααΆαα αααΆαααΎααΆαααααΎα αααΆααααα»αα±ααααΆαα αααΎαααΆααααα’αΆα ααααΎαα ααΆαα αααα½αα±ααααΆααααα½αααΆαααααα»αααΌααααααΆααααααΆαα αΆαααααααΆαααααΎαααααΆααα
OkHttp ααΎαααΆααα½ααααα αΌα Cronet αααααααααααααα OkHttp API α ααΆααααααΆαααααΎαααΆα ααααααααΆααα·ααΈααα ααΎααααααΆαααΆαααααΆααααααΌαα ααααααΆαα α ααΆααααααΆαααααααΎα (αααααααΌαααΆαααααΎαααααα‘αΎαα‘αΎααα·α ) αα ααααα·α API αααααααααααΆαα ααΉααα·ααΈααΆααααααααααΆααα§ααααα Android ααΎαααΆαα’αα»αααα Cronet αα αααα»ααααααα·ααΈ Uber αα ααΎ iOS αααααααΆααα αΆααα ααΆα α HTTP ααΈαααααΆα
ααΆα API αααααααΎαα·ααΈααΆα NSURL . α’ααΌααΈααα αααααααα iOS Foundation ααααααααααα·αααααα URL ααΆααααΆαααααα·ααΈααΆα αα·αααΆααΆααΆααΎαα’αΆα αααα αΌα Cronet αα αααα»ααααααα·ααΈ iOS ααααααΎαααααα·αααΆαααΆαα αααΆαααΎααΆαααααααα·ααααααααααααΆααα
ααααΈ
αα
ααΎαααααααΆαααααα αα½αααα
αΆααααΆαααΆααααααΆαα QUIC ααΆαααα Google Cloud lb ααα
ααΆαα·ααααααΆααΏαα αααααααααα Google Cloud ααααΎαααΆαααα’ααΆαα½ααα·ααΈααΆαααααααααΎαα‘αΎαααα Google ααα»ααααααΎααΆααααααΎαα’αααΈαααα?
Nginx
αα·αααΌαααα»ααααΆα 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';
}
}
ααΆαα·αααΆααα’αΆα
ααααΆααααΆαααα HTTP/3 αα
αααα»ααααααα·ααΈαα»αααααααααΆααΆααα ααα»ααααα’αααα’αΆα
ααααΎααΆαα --enable-quic
αα
ααΆαααααΆαααΈαααααααα’ααα α¬α§ααΆα ααα ααα ααααα quic.rocks α αΎαααΎαααααααααΆααααααΆαααα
αααα»αα§αααααα’αααα’αα·ααααααα
αααα½αα±αα HTTP/3 ααΆααααΌαααΆαααααα http2+quic/99
ααα»ααααααΆααΆααΏαααααΆααααΌα
ααααΆα
αα αα αααα·ααααΆαααααα
- QUIC ααααΆαααααααααα
ααααΏαααΏα (αααααααΆαααα Facebook ααΆαααα HTTP/3 ααΆαα½αααΉαα’αααααΆααααααα’ααα αΆααα) αα·αααΈαα ααααΎαcaddy . Apache αα·αα’αΆα ααααΎααΆααΆααα α‘αΎααα ααα»ααααααΆαααΆααααα»αααααΎαααΆαααααβααα . - ααααααΈ 21 ααααααΆααΆαααααΎαα
αα
α»ααααααααΆα
ααα ααααΈααααΆααααααααΆααααααΆαα WebRTC - ααααΆαααααααααα»ααααα»αα αα»α Microsoft ααΆαααΎα
ααΌαααΆαα’αα»αααα msquic ααααα·αααΆααα»αααΆαααΆααα’ααααΈαααααααΆα IETF αα α‘αΎααα ααα»αααααααααΊααΆαααααα αΎααααααα½ααα½α αα α αΎαα
ααα ααααΈααααα·ααααΆα
α
αααΆααα’αΆααααααααΎ QUIC αα·ααααα·αααααααα ααα»αααααααα»αααΎαα‘αΎα α αΎαααΆαααΆααααα»αααααΎαααΆαααΎααααΈαααααΎααααααααΆαα ααΆαα’αα»ααααααααΈαααα·ααΈααΆαααα
α‘αΎαααααΎααααααααΆαααα α αΎαααΆαααααΆααααααΆαα’αααα’αα·ααααααααΆααααα
αααΎαα‘αΎαααααΌαααΆαααααΏααΆααααΆ QUIC ααΊααΆα’ααΆααα ααΆαααααΆααα’αΆα
αααα
αΌααα·ααΈααΆααα
αααα»αααααα’ααΆαααα TCP stack αααααΆααααααΆαα·αααΌααα·αααΆαα α’ααΈαααΊαα·αααΆααααΌαααΉαααααΆααααΈαα
ααΆααααααΆαααααααΆααααααααΆα αα·αααΏαααΆααα»αα
α₯α‘αΌαααα α’αααα’αΆα ααααααα ααΆααααααααα’αααααααα QUIC αααααΆααα αααααΆαα ααΆααααααααααααα’ααα α¬ααΌααααΈαααααααα±ααααΆαα αααααα·ααΈαα»ααα - αα½αααααΆααα’αααααααααΉαααααααααΆαααΆαααααααααΆαααα·ααΈααΆα α αΎααααα·αα·ααααα ααΆαα½α caniuse ααΉαααΆααααααΈαααΆαα
ααααα: www.habr.com