Po čtyřech letech vývoje společnost Valve zveřejnila verzi knihovny GameNetworkingSockets 1.5.0, která implementuje systém přenosu zpráv přes UDP, jež lze použít k zajištění vysokorychlostní a spolehlivé výměny dat ve hrách. Kód je napsán v jazyce C++ a je poskytován pod licencí BSD.
GameNetworkingSockets implementuje protokol podobný TCP, který funguje nad UDP a zajišťuje navázání spojení, ale je zaměřen na přenos zpráv místo toků. Přes ustanovený komunikační kanál lze zprávy přenášet jak v režimu s garantovanou dodávkou, tak i v rychlejším režimu nespolehlivého přenosu.
Protokol podporuje funkce jako zpracování fragmentace, opětovné sestavení paketů, předpovídání a regulaci šířky pásma, vytváření P2P spojovacích kanálů, obcházení překladatelů adres (přes WebRTC ICE) a šifrování. Data v paketech jsou šifrována pomocí algoritmu blokového šifrování AES, přičemž pro výměnu klíčů a ověřování certifikátů se používají digitální podpisy založené na eliptických křivkách Ed25519. Mechanismy dodávání klíčů a výběru vektoru inicializace pro každý paket se zakládají na metodách používaných v protokolu QUIC.
Mezi změnami v nové verzi:
- API ISteamNetworkingSockets::SendMessages bylo rozšířeno pro zjednodušení zpracování selhání při odesílání a iniciaci opakovaných pokusů o dodávku.
- Byly přidány nové nastavení pro ECN, jitter, určení lokálního IP (IPLocalHost) a vypnutí ověřování (AllowWithoutAuth).
- Byla přidána varianta API ISteamNetworkingMessages pro jazyk C.
- Byla implementována počáteční verze wrapperu pro jazyk Rust.
- Byly opraveny chyby v implementaci režimu P2P.
- Byla zavedena automatická korekce situací souvisejících s narušením pořadí příchozích paketů a zpráv.
- Byla vylepšena integrace s nástroji CMake a vcpkg.
- Byla zajištěna kompatibilita s novými verzemi knihoven protobuf a abseil.
- Byla přidána podpora diagnostiky prostřednictvím ETW (Event Tracing for Windows).
- Byly odstraněny zranitelnosti, jejichž informace nejsou podrobně specifikovány, ale podle logu změn se jedná o přetečení celočíselného typu v funkcích odesílání paketů a možnost obcházení ověření certifikátu v funkci CheckCertPOPID.
Zdroj: opennet.ru
