Компания Valve открыла реализацию системы TCP-подобных коммуникаций поверх UDP
31 марта 2018 года
Компания Valve перевела в разряд свободного ПО библиотеку GameNetworkingSockets с реализацией системы передачи сообщений поверх UDP, которая может применяться для организации высокоскоростного и надёжного сетевого обмена данными в играх. Код написан на языке С++ и поставляется под лицензией BSD.
GameNetworkingSockets реализует поверх UDP похожий на TCP протокол, обеспечивающий установку соединения, но ориентированный на передачу сообщений вместо потоков. При этом через установленный канал связи сообщения могут передаваться как в режиме гарантированной доставки, так и с использованием более быстрого режима ненадёжной передачи. Протокол поддерживает такие возможности как обработка фрагментации, пересборка пакетов, прогнозирование и ограничение пропускной способности.
Имеется встроенная поддержка шифрования канала связи. Данные в пакетах шифруются с использованием алгоритма блочного шифрования AES, а для обмена ключами и проверки сертификатов применяются цифровые подписи на базе эллиптических кривых Ed25519. Механизмы доставки ключей и выбора вектора инициализации для каждого пакета основаны на методах, применяемых в протоколе QUIC.
Разработчикам предложена библиотека c реализацией C++ класса SteamNetworkingSockets, а также инструментарий для симуляции потери пакетов и получения детальной статистики. Среди необходимых для сборки зависимостей: OpenSSL, Google protobuf, ed25519-donna, curve25519-donna и ujson (компактный парсер JSON, который уже включен в состав GameNetworkingSockets.
Из планов на будущее называется переработка кода "SNP", который отвечает за инкапсуляцию API-сообщений в UDP-пакеты и выполнение таких операций как фрагментация и пересборка слишком больших пакетов, cлияние мелких сообщений и переотправка потерянных фрагментов. В новой реализации появится более продвинутая реализация скользящего окна и полноценная возможность упорядочивания пакетов (сейчас пакет пришедший не по порядку просто отбрасывается). Также планируется уйти от применения специфичных для Steam идентификаторов CSteamID в пользу более универсальной структуры идентификации и избавиться от зависимости от OpenSSL, в котором используется только реализация AES.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.