Luku 11: Verkkopelit Resurssit Ennustaminen Huijaus Lähde: Smed, Hakonen
Verkkopelit Useat pelit mahdollistavat monen pelaajan yhtäaikaisen osallistumisen tietoverkon avulla Smed ja Hakonen jakavat verkkopelien kommunikaation kolmeen kerrokseen: Fyysinen alusta Looginen rakenne Sovellustaso
Fyysinen alusta Fyysinen alusta asettaa rajat yhteyden suorituskyvylle kaistanleveys (bandwidth) latenssi solmujen prosessointiteho Siedettävä latenssi reaaliaikapelissä luokkaa 0,1 s - 1 s Latenssin vaihtelu eli jitter myös haitallista
TCP ja UDP TCP yhteydellinen, varma, hidas UDP yhteydetön, epävarma, nopea Peleissä usein kovat reaaliaikaiset vaatimukset; jos tieto ei ole ajoissa perillä, se on turhaa TCP:n tarjoamat ominaisuudet mukavia, mutta ne ovat yleensä liian raskaita pelikäyttöön Esim. paketin kadotessa seuraaviin ei pääse käsiksi ennen uudelleenlähetystä TCP ei siis sovellu hyvin reaaliaikaisiin peleihin
Looginen rakenne Loogisessa rakenteessa kaksi pääratkaisua: Vertaisverkko Palvelin-asiakas (voi olla hierarkinen/monipalvelin) Skaalautuvuus, kontrolli Datan hajautus eheys (consistency) vs vasteajat (responsiveness) Ratkaisut: keskitetty, kopioitu, hajautettu keskitetty eheä, hajautettu nopea
Sovellustaso Sovellus rakennetaan loogisen rakenteen päälle Skaalautuvuus: pelaajamäärän muutos Jatkuvuus (persistence): pelaajien liittyminen ja poistuminen lennossa Yhteistyö: pelaajien välinen interaktio, riippuu etäisyydestä
Resurssien rajat Resurssien riittävyys riippuu monesta tekijästä viestien määrä, kohteiden määrä, viestin koko, kiireellisyysvaatimukset, prosessointitarve Jos yksi vaatimus kiristyy, täytyy kompensoida löysentämällä muita Yleensä kommunikaatio korvataan laskennalla Resurssivaatimukset, n pelaajaa, unicast: vertaisverkko O(n 2 ) palvelin-asiakas O(n)
Resurssien säästäminen Viestien pakkaaminen redundanssin poisto erotusten lähettäminen epäoleellisen jättäminen pois (mahd. häviöllinen) Viestien yhdistäminen (batching) säästää kaistaa (headerit) vaatii prosessointia ja vasteaika kasvaa yhdistetään esim. kaikki tiettyyn hetkeen mennessä lähetetyt tai aina n kpl peräkkäisiä
Ennustaminen Tilapäivityksiä voi lähettää harvemmin, jos käytetään ennustamista Lähetetään paikan p 0 lisäksi nopeus v 0 ja kiihtyvyys a 0 ajanhetkellä 0 Asiakas voi nyt laskea muiden sijainnin ajanhetkellä t: p t = p 0 + v 0 t + 0,5 a 0 t 2 Kiihtyvyyden käyttö sopii hyvin esim. autoihin, mutta ihmisten suhteen pelkkä nopeus riittää
Ennustaminen Asiakas voi myös laskea nopeuden ja kiihtyvyyden itse aiempien sijaintien perusteella Kiihtyvyys voidaan jättää dynaamisesti huomiotta silloin kun se vaihtelee kovasti Erityyppisille pelihahmoille voi olla eri algoritmi Palvelin voi laskea ennusteen samalla tavalla ja lähettää päivityksen kun virhe on liian suuri liian suuri voi riippua vapaana olevasta kaistasta
Konvergenssi Päivityspaketin saapuessa aiheutuu hyppäys Ennustettu sijainti ja oikea poikkeavat toisistaan Ratkaisu: siirrytään uusimman informaation antamalle polulle vähitellen lineaarinen konvergenssi pehmeämpi liike: spliinit Voi silti aiheuttaa seinien läpäisyä ym.
Samanaikainen simulaatio Pelin tapahtumat voidaan jakaa deterministisiin ja epädeterministisiin ihmispelaajien toimet epädeterministisiä pseudosatunnaislukujen avulla jopa kaikki muu determinististä Kaikki pelaajat voivat suorittaa saman simulaation, jolloin teoriassa voisi riittää välittää epädeterministiset tapahtumat Käytännösä tarvitaan myös tarkistusdataa
Läheisyyssuodatus Usein olento on kiinnostunut vain sen lähellä tapahtuvista asioista Tällöin vain pieni osa asioista tarvitsee lähettää sille Olennon ympärillä kiinnostava alue: aura vastaa esim. pelaajan näkemää aluetta Jos aurat leikkaavat, saavat toistensa viestit Voidaan jakaa vielä fokukseen ja nimbukseen fokus: mitä olento näkee nimbus: millä alueella olento tulee nähdyksi
Huijaaminen Huijaus vie huijatuilta peli-ilon hyvin nopeasti Huijaamisella on monia tavoitteita päteminen: mainetta ja kunniaa voiman tunne taloudelliset hyödyt Huijaamisen estämisen tavoitteita Salatun informaation suojeleminen Pelin reiluuden takaaminen Pelimaailman oikeuden turvaaminen
Huijaaminen Palvelin-asiakas-rakenteessa on monia haavoittuvia kohtia Muunneltu asiakasohjelma itse ohjelma datatiedostot/muistin sisältö Asiakkaalta lähtevän verkkoliikenteen peukalointi Spoofing, palvelunesto Palvelimen hakkerointi, fyysiset hyökkäykset
Liikenteen peukalointi Esimerkkejä asiakasohjelman ja palvelimen välisen liikenteen peukaloinnista Tähtäysproxy Pakettien pysäyttäminen (haavoittumattomuus) Pakettien toistaminen Tarkoituksellinen viive
Viestit voi salata Suojautumiskeinoja julkisen avaimen menetelmät Viestejä voi suojata tiivisteillä (MD5 jne.) Tällöin viestiä ei voi muokata jäämättä kiinni Toistohyökkäyksen estämiseksi lisätään pakettiin satunnaisluku Tiivistealgoritmeissa heikkouksia, törmäykset Ohuet asiakkaat ja kaikki äly palvelimella Ratkaisu moniin ongelmiin Voi vaatia liikaa kaistaa/palvelintehoa
Ennustava huijaus Tilanne: vertaisverkossa pelin tila on kaikilla pelaajilla; viestit lähetetään aikaleimalla kaikille Nyt asiakas voi tarkoituksella odottaa muiden toimintoja ennen omansa päättämistä Lähetetään toiminto väärennetyllä aikaleimalla Lockstep-protokolla: pelaajat sitoutuvat toimintoon lähettämällä hajautusarvon muut eivät voi päätellä mikä toiminto on mutta kun toiminnot paljastetaan, voidaan tarkastaa, ettei pelaaja ole vaihtanut toimintoa
Muunneltu asiakasohjelma Tyypilliset asiakasohjelman muunnokset paljastavat ylimääräistä tietoa Fog of warin poisto, seinien läpi näkeminen Tavoite: palvelin lähettää mahdollisimman vähän salaista tietoa; salaus voi myös auttaa joskus Grafiikan ym. ominaisuuksien muutokset Auktoriteetin väärinkäyttö Tarkasta, että toiminnot ovat laillisia ja mahdollisia Pelaajat antavat vain komentoja, palvelin toteuttaa Vertaisverkossa varotaan vääriä huijausilmoituksia
Sääntörikkeet Peleissä on säännöt, mutta joskus niissä on aukkoja; onko niiden hyväksikäyttö huijausta? Salaliitto (collusion) epätäydellisen informaation peleissä jaetaan tietoa, joka kuuluu vain yhdelle pelaajalle toimitaan yhteistyössä kilpailullisessa pelissä ongelma esim. nettipokerissa styling, käyttäytymisen tarkkailu turnauksen tuloksiin vaikuttaminen (esim. luovutus, lahjonta)
Huono käytös Sääntöjen lisäksi huijaukseksi lasketaan joskus myös pelin hengen vastainen käytös MMORPGeissa aloittelijoiden teurastus, PK-jengit Eräs ratkaisu: pelaajien kimppuun voi hyökätä vain jos he ovat antaneet luvan Alueet, joista osassa lakia valvotaan ja osassa ei Kulkuväylien tukkiminen, kämppäys, sanallinen loukkaaminen, omien ampuminen, spämmäys,... ignore auttaa osaan ilmoittaminen pelin valvojille (taas väärien ilmoitusten riski)