Po czterech latach rozwoju firma Valve wydała GameNetworkingSockets 1.5.0, bibliotekę implementującą system przesyłania komunikatów przez UDP, który może być używany do implementacji szybkiej i niezawodnej wymiany danych sieciowych w grach. Kod jest napisany w języku C++ i objęty licencją BSD.
GameNetworkingSockets implementuje protokół oparty na połączeniu typu TCP przez UDP, ale koncentruje się na transmisji wiadomości, a nie na strumieniowaniu. Wiadomości mogą być przesyłane przez ustalony kanał komunikacyjny, z gwarancją doręczenia lub szybszą, zawodną transmisją.
Protokół obsługuje takie funkcje, jak obsługa fragmentacji, ponowne składanie pakietów, przewidywanie i ograniczanie przepustowości, tworzenie kanałów komunikacji P2P, omijanie translatora adresów (poprzez WebRTC ICE) oraz szyfrowanie. Dane w pakietach są szyfrowane za pomocą algorytmu szyfru blokowego AES, a do wymiany kluczy i weryfikacji certyfikatów wykorzystywane są podpisy cyfrowe oparte na krzywych eliptycznych Ed25519. Mechanizmy dostarczania kluczy i wybór wektora inicjalizacyjnego dla każdego pakietu opierają się na metodach stosowanych w protokole QUIC.
Wśród zmian w nowej wersji:
- Interfejs API ISteamNetworkingSockets::SendMessages został rozszerzony w celu uproszczenia obsługi błędów wysyłania i inicjowania ponownych prób dostarczenia.
- Dodano nowe ustawienia dla ECN, jittera, wykrywania lokalnego adresu IP (IPLocalHost) i wyłączania uwierzytelniania (AllowWithoutAuth).
- Dodano wersję API ISteamNetworkingMessages w języku C.
- Zaimplementowano pierwszą wersję powiązania dla języka Rust.
- Naprawiono błędy w implementacji trybu P2P.
- Wprowadzono automatyczną korektę sytuacji związanych z naruszeniem kolejności nadejścia pakietów i wiadomości.
- Ulepszona integracja z zestawami narzędzi CMake i vcpkg.
- Poprawiono zgodność z nowymi wersjami bibliotek protobuf i abseil.
- Dodano obsługę diagnostyki za pomocą ETW (śledzenie zdarzeń dla Windows).
- Naprawiono luki w zabezpieczeniach, ale nie podano szczegółów na ich temat. Sądząc po dzienniku zmian, dotyczą one przepełnienia liczb całkowitych w funkcjach wysyłania pakietów i możliwości ominięcia weryfikacji certyfikatu w funkcji CheckCertPOPID.
Źródło: opennet.ru
