ProHoster > Блог > Новини інтернету > Microsoft відкрив свою реалізацію протоколу QUIC, який застосовується в HTTP/3
Microsoft відкрив свою реалізацію протоколу QUIC, який застосовується в HTTP/3
компанія Microsoft оголосила про відкриття коду бібліотеки msquic з реалізацією мережного протоколу QUIC. Код написаний мовою Сі та поширюється під ліцензією MIT. Бібліотека кросплатформова і може використовуватися не тільки в Windows, але і в Linux із залученням Шаннель або OpenSSL для TLS 1.3. Надалі планується підтримка та інших платформ.
Бібліотека заснована на коді драйвера msquic.sys, що надається в ядрі Windows 10 (Insider Preview) для забезпечення роботи протоколів HTTP та SMB поверх QUIC. У тому числі код використовується для реалізації HTTP/3 у внутрішньому стеку Windows і .NET Core. Розробка бібліотеки MsQuic повністю вестиметься на GitHub з використанням публічного рецензування, pull-запитів та GitHub Issues. Підготовлено інфраструктуру, яка перевіряє кожен коміт та pull-запит у наборі з понад 4000 тестів. Після стабілізації оточення для розробки планується приймати зміни від сторонніх розробників.
MsQuic вже можна використовувати для створення серверів та клієнтів, але не вся функціональність, визначена у специфікації IETF, в даний час доступна. Наприклад, поки немає підтримки 0-RTT, міграції клієнтів, Path MTU Discovery та управління вибором адрес для сервера (Server Preferred Address). З реалізованих особливостей відзначається оптимізація для досягнення максимальної пропускної спроможності та мінімальних затримок, підтримка асинхронного введення/виводу, RSS (Receive Side Scaling), можливість об'єднання вхідних та вихідних UDP-потоків. Реалізація MsQuic перевірена на сумісність із експериментальними гілками браузерів Chrome та Edge.
Нагадаємо, що HTTP/3 стандартизує використання протоколу QUIC як транспорт для HTTP/2. Протокол QUIC (Quick UDP Internet Connections) з 2013 року розвивається компанією Google як альтернатива зв'язці TCP+TLS для Web, вирішальної проблеми з великим часом встановлення та узгодження з'єднань у TCP та усуває затримки при втраті пакетів у процесі передачі даних. QUIC є надбудовою над протоколом UDP, що підтримує мультиплексування декількох з'єднань і забезпечує методи шифрування, еквівалентні TLS/SSL.
Висока безпека, аналогічна TLS (насправді QUIC надає можливість використання TLS 1.3 поверх UDP);
Контроль за цілісністю потоку, що запобігає втраті пакетів;
Можливість миттєво встановити з'єднання (0-RTT, приблизно в 75% випадках дані можна передавати відразу після відправки пакета установки з'єднання) та забезпечити мінімальні затримки між відправкою запиту та отриманням відповіді (RTT, Round Trip Time);
Не використання при повторній передачі пакета того ж номера послідовності, що дозволяє уникнути двозначності при визначенні отриманих пакетів та позбутися таймаутів;
Втрата пакета впливає на доставку тільки пов'язаного з ним потоку і не зупиняє доставку даних паралельно передаються через поточне з'єднання потоках;
Засоби корекції помилок, які мінімізують затримки через повторну передачу втрачених пакетів. Використання спеціальних кодів корекції помилок на рівні пакета для скорочення ситуацій, що вимагають повторної передачі даних втраченого пакета.
Кордони криптографічних блоків вирівняні з межами пакетів QUIC, що зменшує вплив втрат пакетів на декодування вмісту наступних пакетів;
Відсутність проблем із блокуванням черги TCP;
Підтримка ідентифікатора з'єднання, що дозволяє скоротити час встановлення повторного з'єднання для мобільних клієнтів;
Можливість підключення розширених механізмів контролю навантаження з'єднання;
Використання техніки прогнозування пропускної спроможності в кожному напрямку для забезпечення оптимальної інтенсивності відправлення пакетів, запобігаючи скоченню в стан навантаження, при якому спостерігається втрата пакетів;
Помітний приріст продуктивності та пропускної спроможності, в порівнянні з TCP. Для відеосервісів, таких як YouTube, застосування QUIC показало скорочення операцій повторної буферизації під час перегляду відео на 30%.