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 ΡΡΠ΅ΠΊΠ° Π·Π°Π½ΡΠ»Π° Π±Ρ Π²Π΅ΡΠ½ΠΎΡΡΡ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² HTTP/2, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° head-of-line blocking ΡΠ°ΠΌ ΠΎΡΡΠ°Π»Π°ΡΡ ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. QUIC ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ²Π΅ΡΡ UDP, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π° ΡΡΠΎΠ±Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π½Π΅ ΡΠ΅ΡΡΠ»ΠΈΡΡ Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎ, ΠΎΠ½ΠΈ Π½ΡΠΌΠ΅ΡΡΡΡΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠ΅Π±Π΅ ΡΠ°ΡΡΠΈ Β«ΡΠΎΡΠ΅Π΄Π΅ΠΉΒ», ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, QUIC ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°):
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ QUIC ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΡΡ Π²Π½ΡΡΡΠΈ Google ΠΈ Π±ΡΠ» Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°ΡΠΎΡΠ΅Π½ ΠΏΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π 2013 Π³ΠΎΠ΄Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π² IETF Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄ΡΡ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ), ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ² ΡΠΎ, ΡΠ΅Π³ΠΎ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅ΠΌΡ. Π Π°Π±ΠΎΡΠ°Ρ Π³ΡΡΠΏΠΏΠ° IETF Π΅ΠΆΠ΅Π³ΠΎΠ΄Π½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ Π²ΡΡΡΠ΅ΡΠΈ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΈ Π²Π΅Π΄ΡΡΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ. ΠΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ QUIC ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΡΡΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡ HTTP/3.
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΎΠ± Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ HTTP/3 ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΠ΅ΡΡ Π½Π΅ ΠΈΠ΄ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π΅ΡΡ Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ ΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ:
ΠΠΎ QUIC ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ°Π½ΡΠΏΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°Π»ΠΈ Π² Uber:
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Uber ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ QUIC
Π§ΡΠΎΠ±Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΡΡΠΎΠΈΡΡ QUIC ΠΈ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠΉ ΡΡΠ΅ΠΊ (HTTP/2 ΠΏΠΎΠ²Π΅ΡΡ TLS/TCP) Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ» QUIC. ΠΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
Cronet ΠΈΠ·Chromium Projects , ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ, Π³ΡΠ³Π»ΠΎΠ²ΡΠΊΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° β gQUIC. ΠΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ IETF.Π‘ΠΏΠ΅ΡΠ²Π° ΠΌΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π»ΠΈ Cronet Π² Π½Π°ΡΠΈ Android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ QUIC. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π±ΡΠ»Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½Π° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ°ΡΡΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ
OkHttp , ΠΌΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π»ΠΈ Cronet ΠΠΠ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ OkHttp API. ΠΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΌΡ ΠΈΠ·Π±Π΅ΠΆΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½Π°ΡΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ Π²ΡΠ·ΠΎΠ²Π°Ρ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡRetrofit ) Π½Π° ΡΡΠΎΠ²Π½Π΅ API.ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ Android-ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ, ΠΌΡ Π²Π½Π΅Π΄ΡΠΈΠ»ΠΈ Cronet Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Uber ΠΏΠΎΠ΄ iOS, ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Ρ HTTP-ΡΡΠ°ΡΠΈΠΊ ΠΈΠ· ΡΠ΅ΡΠ΅Π²ΡΡ
API , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡNSURLProtocol . ΠΡΠ° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ 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 ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΈΠΏ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² Developer Tools:
ΠΠΌΠ΅ΡΡΠΎ HTTP/3 ΠΏΠΈΡΠ΅ΡΡΡ http2+quic/99
, Π½ΠΎ ΡΡΠΎ ΠΏΠΎ ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.
ΠΡΡΠ³ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
- QUIC ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ
LiteSpeed (ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠΌΠΏΠΎΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ»ΠΈΡΡ Ρ Facebook ΠΏΠΎ HTTP/3) ΠΈ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠΉCaddy . Apache ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠΌΠ΅Π΅Ρ, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΈΠ΄ΡΡΠΏΠΎΠ»Π½ΡΠΌ Ρ ΠΎΠ΄ΠΎΠΌ . - 21 ΡΠ½Π²Π°ΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΡΡ
ΡΠ΅ΡΠ½ΠΎΠ²ΠΈΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π΄Π»Ρ WebRTC - ΠΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π° Π΄Π½ΡΡ
Microsoft ΠΎΡΠΊΡΡΠ»Π°
ΠΊΠΎΠ΄ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ msquic , Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π΅ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ° IETF, Π½ΠΎ ΡΡΠΎ ΡΠΆΠ΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΡΡΠ².
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ½ΡΠ΅ΡΠ΅Ρ ΠΊ QUIC Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ, Π½ΠΎ ΡΠ°ΡΡΡΡ, Π²Π΅Π΄ΡΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ Π΅Π³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΆΠ΅ ΡΡΡΡ Π»ΠΈ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΡΡ, ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π³ΠΎΠ΄ΠΎΠΌ Π²ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ±Π΅ΠΆΠ΄Π°ΡΡΡΡ, ΡΡΠΎ Π±ΡΠ΄ΡΡΠ΅Π΅ Π·Π° QUIC. ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π°ΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π² Π±ΡΠ΄ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ TCP ΡΡΠ΅ΠΊΠ°, Π° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅Π΅Π΄Π΅Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠ΅ ΠΈ Π±ΡΡΡΡΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
Π£ΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ QUIC-Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌ β ΠΎΠ½ΠΈ Π²ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΠΈ ΠΏΠ΅ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Ρ caniuse ΡΡΠ°Π½Π΅Ρ Π²Π΅ΡΠ΅Π»Π΅Π΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com