Компания Valve перевела в разряд свободного ПО библиотеку GameNetworkingSockets (https://github.com/ValveSoftware/GameNetworkingSockets) с реализацией системы передачи сообщений поверх UDP, которая может применяться для организации высокоскоростного и надёжного сетевого обмена данными в играх. Код написан на языке С++ и поставляется (https://github.com/ValveSoftware/GameNetworkingSockets) под лицензией BSD.GameNetworkingSockets реализует поверх UDP похожий на TCP протокол, обеспечивающий установку соединения, но ориентированный на передачу сообщений вместо потоков. При этом через установленный канал связи сообщения могут передаваться как в режиме гарантированной доставки, так и с использованием режима ненадёжной передачи. Протокол поддерживает такие возможности как обработка фрагментации, упорядочивание пакетов, пересборка пакетов, прогнозирование и ограничение пропускной способности.
Имеется встроенная поддержка шифрования канала связи. Данные в пакетах шифруются с использованием алгоритма блочного шифрования AES, а для обмена ключами и проверки сертификатов применяются цифровые подписи базе на эллиптических кривых Ed25519. Механизмы доставки ключей и выбора вектора инициализации для каждого пакета основаны на методах, применяемых в протоколе QUIC (https://www.opennet.ru/opennews/art.shtml?num=42063).
Кроме библиотеки c реализацией класса SteamNetworkingSockets разработчикам также предложен инструментарий для симуляции потери пакетов и получения детальной статистики. Среди необходимых для сборки зависимостей: OpenSSL, Google protobuf, ed25519-donna (https://github.com/floodyberry/ed25519-donna), curve25519-donna (https://github.com/agl/curve25519-donna) и ujson (компактный парсер JSON, который уже включен в состав GameNetworkingSockets.
Из планов на будущее называется переработка кода "SNP", который отвечает за инкапсуляцию API-сообщений к UDP-пакеты и выполнение таких операций как фрагментация и персборка слишком больших пакетов, cлияние мелких сообщений и переотправка потерянных фрагментов. В новой реализации появится более продвинутая реализация скользящего окна и полноценная возможность упорядочивания пакетов (сейчас пакет пришедший не по порядку просто отбрасывается). Также планируется уйти от применения специфичных для Steam идентификаторов CSteamID в пользу более универсальной структуры идентификации.
URL: https://www.reddit.com/r/gamedev/comments/88f08i/valves_game.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=48371