компанія Microsoft про відкриття коду бібліотеки з реалізацією мережного протоколу . Код написаний мовою Сі та під ліцензією MIT. Бібліотека кросплатформова і може використовуватися не тільки в Windows, Але і в Linux із задіянням або OpenSSL для TLS 1.3. Надалі планується підтримка та інших платформ.
Бібліотека заснована на коді драйвера msquic.sys, що надається в ядрі Windows 10 (Insider Preview) для забезпечення роботи протоколів HTTP та поверх 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. Протокол (Quick UDP Internet Connections) з 2013 року розвивається компанією Google як альтернатива зв'язці TCP+TLS для Web, вирішальної проблеми з великим часом встановлення та узгодження з'єднань у TCP та усуває затримки при втраті пакетів у процесі передачі даних. QUIC є надбудовою над протоколом UDP, що підтримує мультиплексування декількох з'єднань і забезпечує методи шифрування, еквівалентні TLS/SSL.
Основні QUIC:
- Висока безпека, аналогічна TLS (насправді QUIC надає можливість використання TLS 1.3 поверх UDP);
- Контроль за цілісністю потоку, що запобігає втраті пакетів;
- Можливість миттєво встановити з'єднання (0-RTT, приблизно в 75% випадках дані можна передавати відразу після відправки пакета установки з'єднання) та забезпечити мінімальні затримки між відправкою запиту та отриманням відповіді (RTT, Round Trip Time);
- Не використання при повторній передачі пакета того ж номера послідовності, що дозволяє уникнути двозначності при визначенні отриманих пакетів та позбутися таймаутів;
- Втрата пакета впливає на доставку тільки пов'язаного з ним потоку і не зупиняє доставку даних паралельно передаються через поточне з'єднання потоках;
- Засоби корекції помилок, які мінімізують затримки через повторну передачу втрачених пакетів. Використання спеціальних кодів корекції помилок на рівні пакета для скорочення ситуацій, що вимагають повторної передачі даних втраченого пакета.
- Кордони криптографічних блоків вирівняні з межами пакетів QUIC, що зменшує вплив втрат пакетів на декодування вмісту наступних пакетів;
- Відсутність проблем із блокуванням черги TCP;
- Підтримка ідентифікатора з'єднання, що дозволяє скоротити час встановлення повторного з'єднання для мобільних клієнтів;
- Можливість підключення розширених механізмів контролю навантаження з'єднання;
- Використання техніки прогнозування пропускної спроможності в кожному напрямку для забезпечення оптимальної інтенсивності відправлення пакетів, запобігаючи скоченню в стан навантаження, при якому спостерігається втрата пакетів;
- Помітний продуктивності та пропускної спроможності, в порівнянні з TCP. Для відеосервісів, таких як YouTube, застосування QUIC показало скорочення операцій повторної буферизації під час перегляду відео на 30%.
Джерело: opennet.ru
