GameNetworkingSockets реализует поверх UDP похожий на TCP протокол, обеспечивающий установку соединения, но ориентированный на передачу сообщений вместо потоков. Через установленный канал связи сообщения могут передаваться как в режиме гарантированной доставки, так и с использованием более быстрого режима ненадёжной передачи.
Протокол поддерживает такие возможности как обработка фрагментации, пересборка пакетов, прогнозирование и ограничение пропускной способности, создание P2P-каналов связи, обход трансляторов адресов (через WebRTC ICE) и шифрование. Данные в пакетах шифруются с использованием алгоритма блочного шифрования AES, а для обмена ключами и проверки сертификатов применяются цифровые подписи на базе эллиптических кривых Ed25519. Механизмы доставки ключей и выбора вектора инициализации для каждого пакета основаны на методах, применяемых в протоколе QUIC.
Среди изменений в новой версии:
- API ISteamNetworkingSockets::SendMessages расширен для упрощения обработки сбоев при отправке и инициирования повторных попыток доставки.
- Добавлены новые настройки для ECN, jitter-а, определения локального IP (IPLocalHost) и отключения аутентификации (AllowWithoutAuth).
- Добавлен вариант API ISteamNetworkingMessages для языка Си.
- Реализована начальная версия обвязки для языка Rust.
- Исправлены ошибки в реализации режима P2P.
- Реализована автоматическая корректировка ситуаций, связанных с нарушением порядка прихода пакетов и сообщений.
- Улучшена интеграция с инструментариями CMake и vcpkg.
- Налажена совместимость с новыми версиями библиотек protobuf и abseil.
- Добавлена поддержка диагностики через ETW (Event Tracing for Windows).
- Устранены уязвимости, информация о которым не детализируется, но судя по логу изменений речь о целочисленном переполнении в функциях отправки пакетов и возможности обхода проверки сертификата в функции CheckCertPOPID.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65318
