Компанія Cloudflare реалізувала модуль для підтримки HTTP/3 у NGINX

Компанія Cloudflare підготувала модуль для забезпечення підтримки протоколу HTTP/3 у NGINX. Модуль виконаний у формі надбудови над бібліотекою, що розвивається в Cloudflare. пиріг із заварним кремом з реалізацією транспортного протоколу QUIC та HTTP/3. Код quiche написаний мовою Rust, але сам модуль для NGINX написаний мовою Сі та звертається до бібліотеки за допомогою динамічного зв'язування. Напрацювання відкриті під ліцензією BSD.

Для складання достатньо завантажити патч до nginx 1.16 та код бібліотеки quiche, після чого перезбирати nginx з опціями "-with-http_v3_module -with-quiche=../quiche". Під час збирання підтримка TLS повинна базуватися на бібліотеці BoringSSL («—with-openssl=../quiche/deps/boringssl»), використання OpenSSL поки не підтримується. Для отримання з'єднань у налаштування потрібно додати директиву listen з прапором quic (наприклад listen 443 quic reuseport).

З клієнтського програмного забезпечення підтримка HTTP/3 вже додана в експериментальні збірки Chrome Canary та утиліту curl. На стороні сервера досі потрібно використовувати обмежені за своїми можливостями відокремлені тестові реалізації. Можливість обробки HTTP/3 в nginx дозволить суттєво спростити розгортання серверів з підтримкою HTTP/3 і зробить доступнішим тестове використання нового протоколу. Поява штатної підтримки HTTP/3 у nginx очікується у гілці 1.17.x протягом 6-12 місяців.

Нагадаємо, що HTTP/3 стандартизує використання протоколу QUIC як транспорт для HTTP/2. Протокол QUIC (Quick UDP Internet Connections) з 2013 року розвивається компанією Google як альтернатива зв'язці TCP+TLS для Web, вирішальної проблеми з великим часом встановлення та узгодження з'єднань у TCP та усуває затримки при втраті пакетів у процесі передачі даних. QUIC є надбудовою над протоколом UDP, що підтримує мультиплексування декількох з'єднань і забезпечує методи шифрування, еквівалентні TLS/SSL.

Основні Особливості QUIC:

  • Висока безпека, аналогічна TLS (насправді QUIC надає можливість використання TLS поверх UDP);
  • Контроль за цілісністю потоку, що запобігає втраті пакетів;
  • Можливість миттєво встановити з'єднання (0-RTT, приблизно в 75% випадках дані можна передавати відразу після відправки пакета установки з'єднання) та забезпечити мінімальні затримки між відправкою запиту та отриманням відповіді (RTT, Round Trip Time);
  • Не використання при повторній передачі пакета того ж номера послідовності, що дозволяє уникнути двозначності при визначенні отриманих пакетів та позбутися таймаутів;
  • Втрата пакета впливає на доставку тільки пов'язаного з ним потоку і не зупиняє доставку даних паралельно передаються через поточне з'єднання потоках;
  • Засоби корекції помилок, які мінімізують затримки через повторну передачу втрачених пакетів. Використання спеціальних кодів корекції помилок на рівні пакета для скорочення ситуацій, що вимагають повторної передачі даних втраченого пакета.
  • Кордони криптографічних блоків вирівняні з межами пакетів QUIC, що зменшує вплив втрат пакетів на декодування вмісту наступних пакетів;
  • Відсутність проблем із блокуванням черги TCP;
  • Підтримка ідентифікатора з'єднання, що дозволяє скоротити час встановлення повторного з'єднання для мобільних клієнтів;
  • Можливість підключення розширених механізмів контролю навантаження з'єднання;
  • Використання техніки прогнозування пропускної спроможності в кожному напрямку для забезпечення оптимальної інтенсивності відправлення пакетів, запобігаючи скоченню в стан навантаження, при якому спостерігається втрата пакетів;
  • Помітний приріст продуктивності та пропускної спроможності, в порівнянні з TCP. Для відеосервісів, таких як YouTube, застосування QUIC показало скорочення операцій повторної буферизації під час перегляду відео на 30%.
  • Джерело: opennet.ru

Додати коментар або відгук