Компания Cloudflare открыла код реализации протокола QUIC на языке Rust

Компания Cloudflare открыла исходные тексты проекта Quiche, в рамках которого подготовлена реализация протокола QUIC, написанная на языке Rust и соответствующая 17 черновому варианту спецификации, находящейся в процессе стандартизации в IETF. Код открыт под лицензий BSD.

Реализация предоставляет API для обработки пакетов QUIC и управлния состоянием соединения. В текущем виде поддерживается согласование версий, TLS 1.3 (на базе BoringSSL), Stream API, управление потоком, оценка потери пакетов, контроль перегрузки (congestion control), обновление ключей, однонаправленные потоки, 0-RTT, сброс состояния и миграция соединений.

Кроме того, проектом Quinn отдельно развивается ещё одна реализация QUIC на языке Rust. Код поставляется под лицензией Apache 2.0. По функциональности Quinn также нацелен на повторение 17 черновика спецификации, но пока по возможностям отстаёт от реализации Cloudflare. Например, пока не поддерживается 0-RTT и передача HTTP поверх QUIC (HTTP/3). Слой шифрования реализован при помощи rust-библиотек rustls и ring. Подготовлены экспериментальные варианты сервера и клиента для QUIC.

Напомним, что протокол QUIC (Quick UDP Internet Connections) c 2013 года развивается компанией Google в качестве альтернативы связке TCP+TLS для Web, решающей проблемы с большим временем установки и согласования соединений в TCP и устраняющей задержки при потере пакетов в процессе передачи данных. QUIC представляет собой надстройку над протоколом UDP, поддерживающую мультиплексирование нескольких соединений и обеспечивающую методы шифрования, эквивалентные TLS/SSL. Рассматриваемый протокол уже интегрирован в серверную инфраструктуру Google, входит в состав Chrome, запланирован для включения в Firefox и активно применяется для обслуживания запросов клиентов на серверах Google.

Основные особенности QUIC:

  • Высокая безопасность, аналогичная TLS (по сути QUIC предоставляет возможность использования TLS поверх UDP);
  • Контроль за целостностью потока, предотвращающий потерю пакетов;
  • Возможность мгновенно установить соединение (0-RTT, примерно в 75% случаях данные можно передавать сразу после отправки пакета установки соединения) и обеспечить минимальные задержки между отправкой запроса и получением ответа (RTT, Round Trip Time);

  • Не использование при повторной передаче пакета того же номера последовательности, что позволяет избежать двусмысленности при определении полученных пакетов и избавиться от таймаутов;
  • Потеря пакета влияет на доставку только связанного с ним потока и не останавливает доставку данных в параллельно передаваемых через текущее соединение потоках;
  • Средства коррекции ошибок, минимизирующие задержки из-за повторной передачи потерянных пакетов. Использование специальных кодов коррекции ошибок на уровне пакета для сокращения ситуаций, требующих повторной передачи данных потерянного пакета.
  • Криптографические границы блоков выравнены с границами пакетов QUIC, что уменьшает влияние потерь пакетов на декодирование содержимого следующих пакетов;
  • Отсутствие проблем с блокировкой очереди TCP;
  • Поддержка идентификатора соединения, позволяющего сократить время на установку повторного соединения для мобильных клиентов;
  • Возможность подключения расширенных механизмов контроля перегрузки соединения;
  • Использование техники прогнозирования пропускной способности в каждом направлении для обеспечения оптимальной интенсивности отправки пакетов, предотвращая скатывание в состояние перегрузки, при которой наблюдается потеря пакетов;
  • Заметный прирост производительности и пропускной способности, по сравнению с TCP. Для видеосервисов, таких как YouTube, применение QUIC показало сокращение операций повторной буферизации при просмотре видео на 30%.


Источник: opennet.ru

01/30/2019 21:57:33
0

комментарии (0)