Microsoft открыл свою реализацию протокола QUIC, применяемого в HTTP/3
30 апреля 2020 года
Компания Microsoft объявила об открытии кода библиотеки MsQuic с реализацией сетевого протокола QUIC. Код написан на языке Си и распространяется под лицензией MIT. Библиотека кроссплатформенная и может использоваться не только в Windows, но и в Linux с задействованием Schannel или 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) c 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%.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.