HTTP ΠΏΠΎ UDP β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

QUIC (Quick UDP Internet Connections) β€” это ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠΎΠ²Π΅Ρ€Ρ… UDP, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ всС возмоТности TCP, TLS ΠΈ HTTP/2 ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π•Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Β«ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΒ» ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, Π½ΠΎ ΠΎΠ½ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ» ΡΡ‚Π°Π΄ΠΈΡŽ экспСримСнта: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° вСдётся Π±ΠΎΠ»Π΅Π΅ 7 Π»Π΅Ρ‚. Π—Π° это врСмя ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π½Π΅ успСл ΡΡ‚Π°Ρ‚ΡŒ стандартом, Π½ΠΎ всё ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС. НапримСр, QUIC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для ускорСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ сниТСния Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… сСтях Ρ‚Π°ΠΊΠΈΠ΅ Π³ΠΈΠ³Π°Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ Google ΠΈ Facebook, Π° IETF объявила свой Ρ„ΠΎΡ€ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° основой для стандарта HTTP/3 (ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ HTTP/2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 44.8% сайтов).

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ

QUIC разрабатывался ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½Π° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ TCP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Π·Π°Ρ‚ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ΄ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½Ρ‹Π΅ сСти с Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ. TCP доставляСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎ порядку, поэтому ΠΏΡ€ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° встаёт вся ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (head-of-line blocking), Ρ‡Ρ‚ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ сказываСтся Π½Π° качСствС ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ соСдинСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ массовых ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, сотовыС сСти ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ использованию Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ избыточности ΠΈ false negative Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (bufferbloat). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, TCP Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° установлСниС соСдинСния: SYN/ACK ΠΈ TLS запросы ΠΈΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ, трСбуя Ρ‚Ρ€Ρ‘Ρ… roundtrip’ΠΎΠ² вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ QUIC.

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

Π’Π°ΠΊ ΠΊΠ°ΠΊ QUIC сочСтаСт Π² сСбС Π·Π°ΠΌΠ΅Π½Ρƒ TCP ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ TLS 1.3, всС соСдинСния всСгда Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹, Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡Π΅ΠΌ Ссли Π±Ρ‹ ΠΎΠ½ ΡˆΡ‘Π» ΠΏΠΎ HTTPS. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, QUIC Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΊΠ°ΠΊ ΠΊΠ°ΠΊ полная Π·Π°ΠΌΠ΅Π½Π° TCP стСка заняла Π±Ρ‹ Π²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ.

НСсмотря Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π² HTTP/2, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° head-of-line blocking Ρ‚Π°ΠΌ ΠΎΡΡ‚Π°Π»Π°ΡΡŒ ΠΈΠ·-Π·Π° нСобходимости Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎ порядку. QUIC Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠ²Π΅Ρ€Ρ… UDP, поэтому Ρƒ Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π΅ Ρ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ, ΠΎΠ½ΠΈ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС части «сосСдСй», обСспСчивая ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, QUIC Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² запросов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ соСдинСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°):

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

ИспользованиС

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ QUIC разрабатывался Π²Π½ΡƒΡ‚Ρ€ΠΈ Google ΠΈ Π±Ρ‹Π» Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°Ρ‚ΠΎΡ‡Π΅Π½ ΠΏΠΎΠ΄ использованиС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π’ 2013 Π³ΠΎΠ΄Ρƒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π² IETF для стандартизации (которая ΠΈΠ΄Ρ‘Ρ‚ Π΄ΠΎ сих ΠΏΠΎΡ€), ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ² Ρ‚ΠΎ, Ρ‡Π΅Π³ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅ΠΌΡƒ. Рабочая Π³Ρ€ΡƒΠΏΠΏΠ° IETF Π΅ΠΆΠ΅Π³ΠΎΠ΄Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ встрСчи, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… утвСрТдаСтся Π½ΠΎΠ²Ρ‹ΠΉ стандарт ΠΈ вСдётся обсуТдСниС Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ. Π­Ρ‚Π° рСализация QUIC считаСтся основной ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π΅Ρ‘ основС сСртифицируСтся стандарт HTTP/3.

Пока Ρ‡Ρ‚ΠΎ ΠΎΠ± Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ HTTP/3 ΠΊΠ°ΠΊ основного ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Ρ€Π΅Ρ‡ΡŒ Π½Π΅ ΠΈΠ΄Ρ‘Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ поддСрТиваСтся:

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

Но 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-прилоТСния Π±Π΅Π· сущСствСнных ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚.

взято ΠΈΠ· этого ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Uber

На бэкСндС ΠΎΠ½ΠΈ Π»ΠΎΠ²ΠΈΠ»ΠΈ QUIC-соСдинСния Ρ‡Π΅Ρ€Π΅Π· Google Cloud lb, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» с сСрСдины 2018 Π³ΠΎΠ΄Π°.

ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Google Cloud прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Google, Π½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹?

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 Canary ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с Ρ„Π»Π°Π³ΠΎΠΌ --enable-quic, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ своСму сСрвСру ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сайту quic.rocks ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ соСдинСния Π² Developer Tools:
HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC
ВмСсто HTTP/3 ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ http2+quic/99, Π½ΠΎ это ΠΏΠΎ сути ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ ΠΊ QUIC Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ, Π½ΠΎ растёт, вСдётся Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π΅Π³ΠΎ стандартизациСй. НовыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ Ρ‡ΡƒΡ‚ΡŒ Π»ΠΈ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ мСсяц, ΠΈ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π³ΠΎΠ΄ΠΎΠΌ всё большС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΠ±Π΅ΠΆΠ΄Π°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Π·Π° QUIC. ДопускаСтся Π΄Π°ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ вСрсии TCP стСка, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ вСсь ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΅Π΄Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ устойчивыС ΠΈ быстрыС соСдинСния.

Π£ΠΆΠ΅ сСйчас Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ QUIC-взаимодСйствиС для своСй инфраструктуры ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌ β€” ΠΎΠ½ΠΈ всС ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΈ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Π°Ρ статистика с caniuse станСт вСсСлСС.

HTTP ΠΏΠΎ UDP — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ с пользой ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» QUIC

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com