After four years of development, Valve has released the GameNetworkingSockets 1.5.0 library, featuring a message transport system over UDP that can be used for high-speed and reliable data exchange in games. The code is written in C++ and is provided under the BSD license.
GameNetworkingSockets implements a TCP-like protocol over UDP to establish connections but focuses on message delivery rather than streams. Messages can be sent over an established communication channel with guarantees of delivery or using a faster unreliable mode.
The protocol supports capabilities such as fragmentation handling, packet reassembly, bandwidth prediction and throttling, the creation of P2P communication channels, NAT traversal (via WebRTC ICE), and encryption. Data in packets is encrypted using the AES block cipher, while key exchange and certificate verification use digital signatures based on Ed25519 elliptic curves. Key delivery mechanisms and initialization vector selection for each packet are based on methods used in the QUIC protocol.
Among the changes in the new version:
- The API ISteamNetworkingSockets::SendMessages has been expanded to simplify failure handling during sending and initiate delivery retries.
- New settings have been added for ECN, jitter, local IP detection (IPLocalHost), and disabling authentication (AllowWithoutAuth).
- An ISteamNetworkingMessages API variant for the C language has been introduced.
- An initial version of the binding for the Rust language has been implemented.
- Bugs in the P2P mode implementation have been fixed.
- Automatic adjustment for issues related to the out-of-order arrival of packets and messages has been implemented.
- Integration with CMake and vcpkg toolchains has been improved.
- Compatibility with new versions of protobuf and abseil libraries has been established.
- Support for diagnostics via ETW (Event Tracing for Windows) has been added.
- Vulnerabilities have been addressed, details on which are not specified, but the changelog indicates issues related to integer overflow in packet sending functions and potential circumvention of certificate checks in the CheckCertPOPID function.
Source: opennet.ru
