Arhitektura mrežnog koda (Netcode) u kompetitivnim igrama: Rollback tehnologija, kompenzacija kašnjenja i sub-tick serveri

Arhitektura mrežnog koda (Netcode) u kompetitivnim igrama: Rollback tehnologija, kompenzacija kašnjenja i sub-tick serveri (16:9 ilustracija)

Fizika kašnjenja i iluzija istovremenosti u globalnom e-sportu

U savremenom takmičarskom gejmingu, gde o ishodu meča na međunarodnom turniru ili u najvišem rangu rangirane lestvice odlučuju intervali kraći od deset milisekundi, najvažniji deo softverske arhitekture ostaje nevidljiv za oko posmatrača. Dok grafički pokretači iscrtavaju fotorealistične senke i stotine sličica u sekundi, u pozadini se odvija neprekidna matematička borba protiv osnovnih zakona fizike — konačne brzine prostiranja svetlosti kroz optička vlakna i nepredvidive prirode rutiranja paketa na internetu. Taj podsistem, u inženjerskoj i gejming terminologiji poznat kao mrežni kod (Netcode), ima zadatak da stvori uverljivu, pravednu i determinističku iluziju da se deset ili sto igrača, fizički udaljenih stotinama ili hiljadama kilometara, nalazi u istom virtuelnom prostoru u istom trenutku1.

Kada igrač u Beogradu pritisne levi taster miša na serveru smeštenom u Frankfurtu, električni impuls sa optičkog prekidača miša najpre prolazi kroz mikrokontroler periferije, USB magistralu, operativni sistem, radnu nit pokretača igre i mrežnu karticu, pre nego što kao serijalizovani UDP paket napusti kućni ruter. Čak i u idealnom scenariju direktne optičke veze, svetlost kroz silicijumsko staklo putuje brzinom od približno 200.000 kilometara u sekundi (oko 31% sporije nego u vakuumu). Kada se tome dodaju kašnjenja na komutatorima, graničnim BGP ruterima i zaštitnim barijerama samog data-centra, povratno vreme putovanja signala (Round-Trip Time — RTT ili ping) retko pada ispod 20 do 35 milisekundi.

Za to vreme, na ekranu sa osvežavanjem od 360 Hz ili 540 Hz, iscrtano je već petnaest do dvadeset novih sličica, a virtuelni model protivnika koji trči brzinom od šest metara u sekundi pomerio se za više od dvadeset centimetara — što je često šire od glave samog modela. Bez naprednih algoritama predikcije, interpolacije i retroaktivne kompenzacije kašnjenja, svako gađanje pokretne mete zahtevalo bi da igrač nišani u prazan prostor ispred protivnika, kao što se radilo u pionirskim danima mrežnog igranja krajem devedesetih godina.

"Dobar mrežni kod nije onaj koji ukida kašnjenje, jer bi to kršilo zakone fizike, već onaj koji asimetriju vremena raspoređuje tako da nijedan igrač ne oseti da mu je sistem oduzeo kontrolu nad sopstvenim likom." — Inženjerski postulat arhitekture mrežnih pucačina.


Evolucija mrežnih modela: Od Lockstep protokola do autoritativnih servera

Istorijski razvoj mrežnog programiranja u video-igrama oblikovan je stalnim naporom da se razreši trougao između responzivnosti (trenutnog odziva komandi), konzistentnosti (identičnog prikaza stanja kod svih učesnika) i bezbednosti (otpornosti na varanje i manipulaciju paketima).

Deterministički Lockstep i rani Peer-to-Peer sistemi

U prvim mrežnim strategijama u realnom vremenu (poput StarCraft-a i Age of Empires) i ranim verzijama Doom-a, mrežni protok bio je ograničen brzinom dial-up modema od 14,4 do 56 kilobita u sekundi. Slanje pozicija, brzina i stanja stotina jedinica kroz mrežu bilo je tehnički nemoguće. Rešenje je pronađeno u modelu determinističkog zaključanog koraka (Deterministic Lockstep).

Umesto da šalju stanje sveta, klijenti su razmenjivali isključivo ulazne komande igrača (npr. "igrač 1 je u 140. mrežnom koraku selektovao grupu A i kliknuo na koordinate X, Y"). Da bi simulacija ostala identična na svim računarima, nijedan klijent nije smeo da izvrši naredni korak dok ne primi pakete od svih ostalih učesnika u meču. Posledica takvog dizajna bila je direktna zavisnost od najsporijeg učesnika: ako je jedan igrač imao ping od 250 milisekundi ili gubitak paketa, svim igračima na mapi uvodilo se srazmerno ulazno kašnjenje (input delay), a u slučaju prekida veze cela igra bi se zamrzla čekajući sinhronizaciju.

Revolucija QuakeWorld-a i klijent-server arhitektura sa predikcijom

Prekretnica za akcione igre nastupila je 1996. godine kada je Džon Karmak objavio QuakeWorld. U prvobitnom Quake-u (NetQuake), klijent je bio "nemi terminal" koji je slao pritisak tastera serveru i čekao da mu server vrati nove koordinate kamere pre nego što pomeri sliku na ekranu. Na modemskoj vezi sa pingom od 200 milisekundi, kretanje je delovalo kao plivanje kroz melasu.

QuakeWorld je uveo predikciju na strani klijenta (Client-Side Prediction). Čim igrač pritisne taster za kretanje napred, lokalni klijent odmah pomera kameru i lik koristeći istu fizičku jednačinu koju izvršava i server, ne čekajući potvrdu sa mreže. Kada nakon nekoliko desetina milisekundi sa autoritativnog servera stigne paket sa zvaničnim stanjem sveta, klijent upoređuje svoje predviđeno stanje iz tog prošlog trenutka sa serverskim podatkom. Ako se koordinate poklapaju, igra se nastavlja glatko; ako je došlo do odstupanja (npr. zato što je igrača u međuvremenu odgurnula eksplozija ili blokirao drugi igrač), klijent vrši pomirenje stanja (Server Reconciliation) i koriguje poziciju.

Napomena

Autoritativni server predstavlja apsolutnog sudiju u kompetitivnim igrama. Klijent nikada ne može da kaže serveru "ja sam se teleportovao na tačku B" ili "ja sam pogodio protivnika"; klijent samo šalje zapis "u trenutku T pritisnuo sam taster W i pomerio miša za ugao alfa", dok server samostalno proverava da li je ta radnja fizički moguća.


Anatomija savremenog mrežnog ciklusa: Interpolacija, ekstrapolacija i kompenzacija kašnjenja

Iako predikcija na strani klijenta rešava problem kretanja sopstvenog lika, ona ne može direktno da reši prikaz svih ostalih igrača na mapi, jer lokalni računar ne zna koji će taster protivnik pritisnuti u narednoj milisekundi. Ukoliko bi klijent jednostavno iscrtavao protivnike na poslednjim koordinatama koje su stigle sa servera (npr. 64 puta u sekundi), njihovo kretanje na monitoru od 240 Hz izgledalo bi isprekidano i trzavo usled varijacije u vremenu pristizanja paketa (džitera).

Zbog toga savremeni pokretači (Source 2, Unreal Engine 5, Riot-ov modifikovani stek u Valorant-u) koriste tehniku interpolacije entiteta (Entity Interpolation). Klijent namerno prikazuje sve ostale igrače sa malim vremenskim zakašnjenjem (obično za vrednost od jednog do dva mrežna intervala, odnosno 10 do 30 milisekundi u prošlosti), čuvajući u baferu najmanje dva poslednja potvrđena serverska snimka stanja (snapshots). Na taj način, grafički pokretač u svakom frejmu glatko interpolira položaj i animaciju protivnika između dve poznate tačke.

Kako radi premotavanje vremena na serveru (Lag Compensation)

Ovde nastaje centralni paradoks mrežnih pucačina: dok je igračev sopstveni lik prikazan u sadašnjosti (zahvaljujući predikciji), protivnici na njegovom ekranu prikazani su u prošlosti (zbog vremena putovanja paketa sa servera i bafera interpolacije). Kada igrač nanišani glavu protivnika na svom monitoru i opali, na samom serveru taj protivnik se već nalazi nekoliko koraka dalje.

Da bi pogodak bio registrovan onako kako ga je strelac video na svom ekranu, server primenjuje algoritam kompenzacije kašnjenja (Lag Compensation):

  1. Server u svojoj radnoj memoriji čuva kružni bafer svih pozicija, rotacija i stanja animacije (poza kostura i hitboksova) svih igrača u poslednjih nekoliko stotina milisekundi (npr. 200 do 500 ms).
  2. Kada na server stigne paket komande pucanja od igrača A, server očitava precizan vremenski pečat komande, oduzima izmereno vreme putovanja paketa i tačan iznos interpolacionog bafera klijenta A.
  3. Server izračunava tačan trenutak u prošlosti $T_{pucnja}$ u kome je igrač A video scenu na svom monitoru.
  4. Samo za potrebe provere tog jednog hica (Raycasting / Hitscan), server u deliću mikrosekunde vraća hitboksove svih ostalih igrača unazad u stanje iz trenutka $T_{pucnja}$, proverava da li linija vatre seče glavu ili telo mete, beleži pogodak i odmah vraća sve igrače u tekuće serversko vreme.

Problem "Peeker's Advantage" i umiranje iza zida

Iako kompenzacija kašnjenja čini nišanjenje prirodnim i pouzdanim, ona neminovno proizvodi dva fenomena koji izazivaju najviše polemika među profesionalnim igračima:

  • Prednost igrača koji napada iza ugla (Peeker's Advantage): Kada igrač A istrčava iza zida, njegova komanda putuje do servera, a zatim server šalje novu poziciju igraču B koji drži ugao. Dok taj podatak stigne do ekrana igrača B i prođe kroz njegov interpolacioni bafer, igrač A već na svom ekranu vidi statičnog igrača B i ima prednost jednaku zbiru pinga i interpolacije pre nego što se uopšte pojavi na monitoru defanzivca.
  • Pogodak iza zaklona: Kada se igrač B povlači iza betonskog zida, na njegovom lokalnom ekranu (zahvaljujući klijentskoj predikciji) on je već u zaklonu. Međutim, igrač A sa pingom od 50 ms na svom monitoru i dalje vidi igrača B kako ulazi iza zida, puca u njega, a server (vrativši vreme unazad na trenutak kada je A video metu) potvrđuje pogodak. Igrač B dobija poruku da je eliminisan iako je na svom ekranu već bio iza prepreke.

Kako bi ublažili ove ekstreme, savremeni e-sport serveri u 2026. godini uvode stroge gornje granice maksimalnog premotavanja vremena (Max Unlag Window, često ograničen na 120 do 160 ms) i odbijaju da uvaže pogotke igrača sa ekstremno nestabilnom vezom ukoliko je odbrambeni igrač na serveru već uveliko napustio liniju vidljivosti.


Uporedna analiza mrežnih arhitektura u vodećim kompetitivnim žanrovima

Različiti žanrovi video-igara postavljaju potpuno različite inženjerske zahteve pred mrežni kod, što se jasno vidi u arhitektonskim izborima vodećih studija.

Mrežna arhitektura Primarni žanrovi i naslovi Frekvencija simulacije (Tick-rate) Glavni mehanizam sinhronizacije Ključna prednost i ograničenje
Klasični fiksni Tick-rate (128 Hz) Taktičke pucačine (Valorant, FACEIT CS:GO arhiva) 128 otkucaja u sekundi (7,81 ms) Autoritativni server, klijentska predikcija i kompenzacija kašnjenja. Izuzetna stabilnost i predvidivost fizike; visoko opterećenje serverskog procesora i protoka.
Sub-tick vremenska arhitektura Savremene taktičke pucačine (Counter-Strike 2) Osnovni mrežni ritam 64 Hz + kontinualni sub-tick pečati Analitičko izračunavanje tačnog trenutka ulaza unutar diskretnog serverskog koraka. Pucanje i skok ne čekaju sledeći otkucaj servera; osetljivost na džiter i veličinu paketa.
Deterministički Rollback (GGPO derivat) Borilačke igre (Street Fighter 6, Tekken 8, 2XKO) Fiksno 60 Hz (16,67 ms, vezano za frejm animacije) Lokalno izvršavanje uz trenutan povratak i ponovnu simulaciju pri nepodudaranju. Praktično nulto ulazno kašnjenje; zahteva da klijent može da simulira 7–8 frejmova u 1 ms.
Dinamički prilagodljivi Tick-rate Battle Royale sa 60–100 igrača (Apex Legends, Warzone) 20 Hz do 60 Hz (često varijabilno po zoni) Prioritizacija mrežnih ažuriranja po udaljenosti i vidnom polju (Network Relevancy). Omogućava stotine igrača i projektila na ogromnoj mapi; niža preciznost u bliskoj borbi.
Deterministički Lockstep sa komandnim baferom Strategije u realnom vremenu (StarCraft II, Stormgate) 16 Hz do 32 Hz logičkih koraka Razmena isključivo ulaznih komandi igrača uz determinističku matematiku pokretnog zareza. Minimalan mrežni saobraćaj za hiljade jedinica; nemogućnost lokalne predikcije bez kašnjenja.

Rollback mrežni kod: Kako je GGPO spasao borilačku scenu

U pucačinama iz prvog lica, server može da vrati vreme samo za jedan trenutni proračun preseka linije metka. Međutim, u borilačkim igrama jedan na jedan (fighting games), gde svaki udarac ima fiksni broj frejmova pripreme (startup), aktivnih frejmova (active) i oporavka (recovery) pri 60 sličica u sekundi, svako zamućivanje ili interpolacija uništava samu srž mehanike. Zbog toga su borilačke igre više od decenije koristile staromodan sistem zasnovan na čekanju paketa (Delay-based netcode). Ako je veza između dva igrača zahtevala 4 frejma kašnjenja (oko 66 ms), igra bi jednostavno čekala 4 frejma pre nego što prikaže sopstveni udarac igrača. Posledica je bila pogubna: kombo-nizovi i reakcije koje su igrači uvežbavali u lokalnom treningu postajali su neizvodljivi na internetu.

Revoluciju je pokrenuo Toni Kenon (Tony Cannon), suosnivač turnira EVO, razvojem biblioteke GGPO (Good Game Peace Out) zasnovane na Rollback arhitekturi. Princip rada Rollback sistema predstavlja jedno od najelegantnijih rešenja u savremenom softverskom inženjerstvu:

  • Lokalni klijent izvršava komandu svog igrača uz nulto ili minimalno fiksno kašnjenje (npr. 1 frejm), a za protivnika jednostavno predviđa da će nastaviti da radi isto što je radio u prethodnom frejmu (npr. ako je držao gard ili hodao unazad, predikcija pretpostavlja da i u narednom frejmu drži isti taster).
  • U više od 90% frejmova tokom meča, to predviđanje je tačno, jer ljudski prsti ne menjaju stanje kontrolera na svakih 16,6 milisekundi. Kada paket sa mreže stigne i potvrdi predviđanje, ništa se ne menja — meč izgleda potpuno isto kao da se igra na istoj konzoli.
  • U trenutku kada protivnik zaista pritisne novi taster (npr. brzi udarac od 4 frejma), paket koji stigne 3 frejma kasnije otkriva da je predviđanje bilo pogrešno.
  • Tada se aktivira Rollback: pokretač igre u memoriji čuva kompletno stanje fizike, logike i pozicija iz trenutka pre 3 frejma; u roku od samo jedne milisekunde (pre nego što se iscrta sledeća slika na ekranu) vraća igru 3 frejma unazad, ubacuje stvarni unos protivnika, velikom brzinom izvršava 3 koraka simulacije unapred i na ekranu prikazuje već treći frejm animacije protivnikovog udarca.
Koristan savet

Da bi Rollback funkcionisao bez ikakvog trzanja, arhitektura pokretača mora strogo da razdvoji logičko stanje simulacije od grafičkog i zvučnog prikaza. Ako se tokom premotavanja od 3 frejma ponovo pokrene zvučni efekat udarca ili sistem čestica od početka, igrač će čuti neprijatno dupliranje zvuka i videti vizuelne artefakte.


Sub-tick revolucija i izazovi obrade paketa u visokofrekventnim pucačinama

Godinama je u zajednici taktičkih pucačina vladala debata između standardnih 64-tick servera i takmičarskih 128-tick servera. Na 64-tick serveru, svet se ažurira na svakih 15,625 milisekundi. Ako dva igrača kliknu mišem u razmaku od 10 milisekundi, ali oba klika padnu između 100. i 101. serverskog otkucaja, klasičan server ih posmatra kao da su se dogodili istovremeno na 101. otkucaju. Štaviše, putanje dimnih bombi prilikom bacanja u skoku (jump-throw) razlikovale su se na 64 i 128 otkucaja jer se vertikalna brzina igrača u trenutku izbačaja obračunavala u drugačijem diskretnom koraku.

Sa prelaskom na Source 2 pokretač i daljim usavršavanjem mrežnog steka do 2026. godine, uveden je koncept sub-tick sinhronizacije. Umesto da ulaz klijenta zaokružuje na prvi naredni mrežni otkucaj, klijent uz svaku akciju (pomeraj miša, pritisak tastera za kretanje, skok, pucanj) beleži tačan razlomak vremena unutar tekućeg intervala (npr. `tick = 4092, subtickfraction = 0.3418`).

Kada server na 4093. otkucaju obradi pristigle komande, on ne izračunava presek zraka sa pozicijama igrača na kraju otkucaja, već analitički interpolira položaj strelca, trzaj oružja i položaj mete na tačnoj tački `4092.3418`. Time je postignuta matematička nezavisnost mehanike pucanja i bacanja projektila od osnovne frekvencije mrežnog osvežavanja.

Ipak, inženjerska praksa je pokazala da sub-tick donosi sopstvene izazove:

  1. Povećana veličina mrežnih paketa: Zbog beleženja mikro-vremenskih pečata, matrica kostura i istorije pod-koraka, paketi postaju znatno veći i ponekad prelaze maksimalnu jedinicu prenosa (MTU od 1500 bajtova na Ethernet nivou), što na kućnim ruterima slabijeg kvaliteta izaziva fragmentaciju UDP paketa i nagli skok džitera.
  2. Diskrepancija između trenutka pogotka i vizuelnog prikaza: Budući da server tačno zna da je igrač pogođen na 34% trajanja otkucaja, ali paket sa informacijom o smrti šalje tek na kraju celog otkucaja, na ekranima sa ekstremno visokim osvežavanjem (360–540 Hz) igrač može da vidi nekoliko dodatnih lokalno predviđenih sličica pre nego što primi obaveštenje da je već bio eliminisan nekoliko milisekundi ranije.

Hardverska i mrežna optimizacija: Od mrežnog steka operativnog sistema do optičkog rutiranja

Za profesionalne e-sport timove i organizatore turnira u 2026. godini, optimizacija mrežnog koda ne završava se u izvornom kodu same igre, već obuhvata čitav put signala od senzora miša do serverskog procesora:

  • Eliminacija Bufferbloat fenomena (SQM / Cake / FQ-CoDel): Jedan od najčešćih uzroka iznenadnog kašnjenja u igrama nije spora veza, već prenatrpan red čekanja (bufferbloat) u ruteru kada drugi uređaj u mreži preuzima ili šalje podatke. Savremeni gejming ruteri koriste algoritme pametnog upravljanja redovima (Smart Queue Management) koji daju apsolutni prioritet malim, vremenski osetljivim UDP paketima u odnosu na TCP tokove video-striminga ili preuzimanja datoteka.
  • Smanjenje latencije od ulaza do prikaza (Click-to-Photon i Reflex tehnologije): Sinhronizacija između CPU niti igre i grafičkog procesora sprečava stvaranje reda za renderovanje (Render Queue), čime se osigurava da mrežni podaci poslati u tekućem paketu odgovaraju najsvežijem stanju senzora miša (koji danas rade na frekvencijama prozivanja od 4000 Hz do 8000 Hz).
  • Direktno peering rutiranje i Anycast e-sport mreže: Vodeće platforme koriste privatne optičke magistrale (poput Riot Direct ili Valve SDR — Steam Datagram Relay) koje preuzimaju saobraćaj igrača na najbližoj tački prisustva (PoP) u regionu i vode ga najkraćom optičkom putanjom do serverskog klastera, zaobilazeći zagušena javna čvorišta komercijalnih internet provajdera, a istovremeno sakrivajući IP adresu servera od DDoS napada2.

Razumevanje arhitekture mrežnog koda otkriva da savremena kompetitivna video-igra zapravo nije jedna jedinstvena simulacija, već složen distribuirani sistem više simultanih vremenskih linija koje se neprekidno usklađuju. U tom nevidljivom prostoru između klijentske predikcije, serverskog premotavanja prošlosti i determinističkog Rollback algoritma leži inženjerska magija koja omogućava da vrhunski e-sport funkcioniše sa hirurškom preciznošću širom planete.

Reference i napomene

  1. Tehnički principi kompenzacije kašnjenja i klijent-server arhitekture u pucačinama prvi put su detaljno formalizovani u radovima Jana Berniera (Yahn Bernier, Valve Corporation) "Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization" i tehničkoj dokumentaciji GDC konferencija o mrežnom dizajnu u Overwatch, Valorant i Counter-Strike 2 pokretačima.

    ↩
  2. Mrežne relejne arhitekture poput Steam Datagram Relay (SDR) koriste virtuelno rutiranje preko globalne mreže releja, gde klijent komunicira isključivo sa lokalnim čvorištem, čime se sprečava direktno zagušenje autoritativnog servera meča i često skraćuje ruta u odnosu na standardne BGP tablice internet provajdera.

    ↩