Po czterech latach prac, firma Valve opublikowała wersję biblioteki GameNetworkingSockets 1.5.0 z implementacją systemu przesyłania wiadomości na bazie UDP, który może być używany do organizacji szybkiej i niezawodnej wymiany danych w grach. Kod został napisany w języku C++ i jest dostępny na licencji BSD.
GameNetworkingSockets wprowadza na UDP protokół podobny do TCP, zapewniający ustanowienie połączenia, ale nakierowany na przesyłanie wiadomości zamiast strumieni. Przez ustalone połączenie wiadomości mogą być przesyłane zarówno w trybie gwarantowanej dostawy, jak i w szybszym trybie nietrwałej transmisji.
Protokół obsługuje takie funkcje jak przetwarzanie fragmentacji, rekonstrukcja pakietów, prognozowanie i ograniczenie przepustowości, tworzenie połączeń P2P, omijanie translatorów adresów (za pomocą WebRTC ICE) oraz szyfrowanie. Dane w pakietach są szyfrowane przy użyciu algorytmu szyfrowania blokowego AES, a do wymiany kluczy i weryfikacji certyfikatów stosowane są podpisy cyfrowe oparte na krzywych eliptycznych Ed25519. Mechanizmy dostarczania kluczy i wyboru wektora inicjalizacji dla każdego pakietu opierają się na metodach stosowanych w protokole QUIC.
Wśród zmian w nowej wersji:
- API ISteamNetworkingSockets::SendMessages zostało rozszerzone w celu uproszczenia obsługi błędów podczas wysyłania oraz inicjowania ponownych prób dostarczenia.
- Dodano nowe ustawienia dla ECN, jittera, określenia lokalnego IP (IPLocalHost) oraz wyłączenia autoryzacji (AllowWithoutAuth).
- Dodano wariant API ISteamNetworkingMessages dla języka C.
- Zaimplementowano wstępną wersję opakowania dla języka Rust.
- Naprawiono błędy w implementacji trybu P2P.
- Zrealizowano automatyczną korekcję sytuacji związanych z naruszeniem kolejności przybycia pakietów i wiadomości.
- Poprawiono integrację z narzędziami CMake i vcpkg.
- Zapewniono kompatybilność z nowymi wersjami bibliotek protobuf i abseil.
- Dodano wsparcie dla diagnostyki przez ETW (Event Tracing for Windows).
- Usunięto podatności, o których informacje nie są szczegółowo opisane, ale według dziennika zmian chodzi o przepełnienie bufora w funkcjach wysyłania pakietów oraz możliwość ominięcia weryfikacji certyfikatu w funkcji CheckCertPOPID.
Źródło: opennet.ru
