Nezve network network mumitambo yevanotanga

Nezve network network mumitambo yevanotanga
Kwemavhiki maviri apfuura ndanga ndichishanda painjini yepamhepo yemutambo wangu. Izvi zvisati zvaitika, hapana chandaiziva nezve networking mumitambo, saka ndakaverenga zvinyorwa zvakawanda uye ndakaita zvakawanda zviedzo kuti ndinzwisise pfungwa dzese uye ndikwanise kunyora yangu yega networking injini.

Mugwaro rino, ndinoda kugoverana newe mazano akasiyana aunoda kuti udzidze usati wanyora injini yako yemutambo, pamwe chete nepamusoro pezviwanikwa uye zvinyorwa kuti uzvidzidze.

Kazhinji, kune maviri makuru marudzi etiweki architecture: peer-to-peer uye client-server. Mune peer-to-peer (p2p) architecture, data inotamiswa pakati pevatambi vakabatana, nepo mutengi-server architecture, data inotamiswa chete pakati pevatambi neseva.

Kunyangwe peer-to-peer architecture ichiri kushandiswa mune mimwe mitambo, mutengi-server ndiyo chiyero: iri nyore kuita, inoda diki chiteshi upamhi, uye inoita kuti zvive nyore kudzivirira kubva mukubiridzira. Naizvozvo, muchidzidzo ichi tichatarisa pane yevatengi-server architecture.

Kunyanya, isu tinonyanya kufarira maseva ehutongi: mumasisitimu akadaro, sevha inogara yakarurama. Semuenzaniso, kana mutambi achifunga kuti ari pazvirongwa (10, 5), uye sevha inomuudza kuti ari pa (5, 3), ipapo mutengi anofanira kutsiva nzvimbo yake neiyo yakataurwa nevhavha, uye kwete vice versa. Kushandisa maseva ane chiremera kunoita kuti zvive nyore kuziva vanobiridzira.

Network mitambo yemitambo ine zvinhu zvitatu zvakakosha:

  • Transport protocol: mafambisirwo e data pakati pevatengi uye server.
  • Application protocol: chii chinofambiswa kubva kune vatengi kuenda kune server uye kubva kune server kuenda kune vatengi uye mune ipi fomati.
  • Maitiro ekushandisa: mashandisirwo e data rakafambiswa rinoshandiswa kugadzirisa mamiriro evatengi uye server.

Zvakakosha zvikuru kunzwisisa basa rechikamu chimwe nechimwe uye matambudziko anosangana nawo.

Transport protocol

Nhanho yekutanga ndeyekusarudza protocol yekutakura data pakati pesevha nevatengi. Pane maviri Internet protocols eizvi: TCP ΠΈ UDP. Asi iwe unogona kugadzira yako yekufambisa protocol yakavakirwa pane imwe yadzo kana kushandisa raibhurari inovashandisa.

Kuenzanisa kweTCP uye UDP

Ose TCP uye UDP akavakirwa pa IP. IP inobvumira pakiti kuti ifambiswe kubva kune imwe sosi kuenda kune anogamuchira, asi haivimbise kuti iyo yakatumirwa packet ichakurumidza kana gare gare kusvika kune mugamuchiri, kuti inosvika pairi kamwechete, uye kuti kutevedzana kwemapaketi kuchasvika mune chaiyo. order. Uyezve, packet inogona kungova nehuwandu hushoma hwe data, inopiwa nehuwandu MUNHU.

UDP ingori chidimbu chitete pamusoro peIP. Nokudaro, ine miganhu yakafanana. Mukupesana, TCP ine akawanda maficha. Inopa hukama hwakavimbika, hwakarongeka pakati pemanode maviri nekutarisa kukanganisa. Nekudaro, TCP iri nyore uye inoshandiswa mune mamwe akawanda maprotocol, semuenzaniso. HTTP, ftp ΠΈ SMTP. Asi ese aya maficha anouya nemutengo: kunonoka.

Kuti tinzwisise kuti sei mabasa aya achigona kukonzera latency, tinoda kunzwisisa kuti TCP inoshanda sei. Kana node yekutumira ichitumira pakiti kune node yekugamuchira, inotarisira kugamuchira kubvuma (ACK). Kana mushure meimwe nguva isingaigamuchiri (nokuti pakiti kana kubvuma kwakarasika, kana chimwe chikonzero), zvino inotumira zvakare pakiti. Uyezve, TCP inovimbisa kuti mapepa anogamuchirwa nenzira yakarurama, saka kusvikira pakiti yakarasika yagamuchirwa, mamwe mapeji ose haakwanisi kugadziriswa, kunyange kana atove akagamuchirwa neanotambira.

Asi sezvaungafungidzira, kunonoka mumitambo yevazhinji kwakakosha, kunyanya mumitambo-yakazara mhando seFPS. Ichi ndicho chikonzero mitambo yakawanda inoshandisa UDP neprotocol yavo.

Iyo yemuno UDP-yakavakirwa protocol inogona kushanda zvakanyanya kupfuura TCP nekuda kwezvikonzero zvakasiyana. Semuenzaniso, inogona kumaka mamwe mapaketi seakavimbika uye mamwe seasina kuvimbika. Naizvozvo, hazvina basa kuti pakiti isina kuvimbika inosvika kumugamuchiri. Kana kuti inogona kugadzirisa akawanda data hova kuitira kuti pakiti yakarasika murukova rumwe irege kudzikisira nzizi dzasara. Semuenzaniso, panogona kunge paine tambo yekupinza mutambi uye imwe shinda yemameseji ekutaura. Kana meseji yekutaura isiri yekukurumidzira ikarasika, haizononotse mapindiro ari kukurumidza. Kana kuti proprietary protocol inogona kushandisa kuvimbika zvakasiyana pane TCP kuti inyatsoshanda munzvimbo yemutambo wevhidhiyo.

Saka, kana TCP ichiyamwa zvakanyanya, saka isu tichagadzira yedu yekufambisa protocol yakavakirwa paUDP?

Zvakanyanya kuoma. Kunyangwe TCP ingangoita suboptimal yemitambo network masisitimu, inogona kunyatsoshanda kune yako chaiyo mutambo uye nekukuchengetera nguva yakakosha. Semuenzaniso, latency inogona kunge isiri nyaya yekutendeuka-based game kana mutambo unogona kungoridzwa paLAN network, uko latency uye kurasikirwa kwepaketi kwakadzikira kupfuura paInternet.

Mitambo yakawanda yakabudirira, kusanganisira World of Warcraft, Minecraft uye Terraria, inoshandisa TCP. Nekudaro, maFPS mazhinji anoshandisa ega UDP-based protocol, saka isu tichataura zvakawanda nezvavo pazasi.

Kana ukasarudza kushandisa TCP, ita shuwa kuti yakaremara Nagle's algorithm, nekuti inobhura mapaketi isati yatumira, zvinoreva kuti inowedzera latency.

Kuti udzidze zvakawanda nezve mutsauko uripo pakati peUDP neTCP mumamiriro emitambo yevazhinji, unogona kuverenga chinyorwa chaGlenn Fiedler. UDP vs. TCP.

Own protocol

Saka iwe unoda kugadzira yako yekufambisa protocol, asi hauzive pekutangira? Une rombo rakanaka nekuti Glenn Fiedler akanyora zvinyorwa zviviri zvinoshamisa nezve izvi. Iwe uchawana akawanda enjere pfungwa mavari.

Chinyorwa chekutanga Networking yeGame Programmers 2008, iri nyore kupfuura yechipiri, Kuvaka Game Network Protocol 2016. Ndinokurudzira kuti utange nemukuru.

Ziva kuti Glenn Fiedler mutsigiri mukuru wekushandisa tsika protocol yakavakirwa paUDP. Uye mushure mekuverenga zvinyorwa zvake, iwe ungangotora maonero ake ekuti TCP ine zvikanganiso zvakakomba mumitambo yemavhidhiyo, uye iwe uchada kuita yako pachako protocol.

Asi kana iwe uri mutsva kune network, zviitire iwe favo uye shandisa TCP kana raibhurari. Kuti ubudirire kuita yako yekufambisa protocol, unofanirwa kudzidza zvakawanda zvisati zvaitika.

Network library

Kana iwe uchida chimwe chinhu chinoshanda kupfuura TCP, asi usingade kupfuura nekunetseka kwekushandisa yako pachako protocol uye kupinda mune zvakawanda zvakadzama, unogona kushandisa networking library. Pane zvakawanda zvavo:

Handisati ndaedza ese, asi ini ndinoda ENet nekuti iri nyore kushandisa uye yakavimbika. Mukuwedzera, ine zvinyorwa zvakajeka uye chidzidzo chevanotanga.

Transport Protocol: Mhedziso

Kupfupisa: kune maviri makuru ekufambisa maprotocol: TCP uye UDP. TCP ine akawanda anobatsira maficha: kuvimbika, packet order kuchengetedza, kuona kukanganisa. UDP haina zvese izvi, asi TCP nehunhu hwayo yakawedzera latency, izvo zvisingatenderwe kune mimwe mitambo. Ndokunge, kuve nechokwadi chepasi latency, unogona kugadzira yako protocol yakavakirwa paUDP kana kushandisa raibhurari inoshandisa yekufambisa protocol paUDP uye inogadziridzwa yemitambo yemavhidhiyo evazhinji.

Sarudzo pakati peTCP, UDP neraibhurari zvinoenderana nezvakati wandei. Kutanga, kubva pane zvinodiwa zvemutambo: inoda yakaderera latency? Chechipiri, kubva pane zvinodiwa protocol zvekushandisa: inoda protocol yakavimbika here? Sezvatichaona muchikamu chinotevera, zvinokwanisika kugadzira application protocol iyo isina kuvimbika protocol yakakodzera. Chekupedzisira, iwe unofanirwa zvakare kufunga nezve ruzivo rweiyo network injini yekuvandudza.

Ndine zvidimbu zviviri zvemazano:

  • Bvisa iyo protocol yekufambisa kubva kune yese yekushandisa zvakanyanya sezvinobvira kuitira kuti igone kutsiviwa nyore pasina kunyorazve kodhi yese.
  • Usawedzera-optimize. Kana iwe usiri nyanzvi yetiweki uye usina chokwadi chekuti unoda tsika yeUDP-based transport protocol, unogona kutanga neTCP kana raibhurari inopa kuvimbika, wozoedza nekuyera kuita. Kana matambudziko akamuka uye uine chivimbo chekuti chikonzero ndiyo protocol yekufambisa, saka ingave nguva yekugadzira yako yekufambisa protocol.

Pakupera kwechikamu chino, ndinokurudzira kuti uverenge Nhanganyaya kune Multiplayer Game Programming naBrian Hook, iyo inovhara akawanda emisoro inokurukurwa pano.

Application protocol

Iye zvino zvatinogona kuchinjanisa data pakati pevatengi neseva, isu tinofanirwa kusarudza kuti ndeipi data yekuendesa uye mune ipi fomati.

Iyo yekirasi chirongwa ndechekuti vatengi vanotumira mapindiro kana zviito kune sevha, uye sevha inotumira yazvino mutambo mamiriro kune vatengi.

Sevha inotumira kwete iyo yakazara nyika, asi yakasefa ine masangano ari pedyo nemutambi. Anoita izvi nokuda kwezvikonzero zvitatu. Kutanga, iyo yakazara mamiriro anogona kunge akakurisa kuti atumirwe pakakwirira. Kechipiri, vatengi vanonyanya kufarira kuona uye odhiyo data, nekuti yakawanda yemutambo logic inoteedzerwa pane sevha yemutambo. Chetatu, mune mimwe mitambo mutambi haafanire kuziva imwe data, semuenzaniso, pamire muvengi kune rimwe divi remepu, zvikasadaro anogona kufembedza mapaketi oziva chaipo pekuenda kuti amuuraye.

Serialization

Danho rekutanga nderekushandura data yatinoda kutumira (yekuisa kana mutambo wenyika) kuita fomati yakakodzera kutapurirana. Iyi nzira inodaidzwa serialization.

Pfungwa inongouya mumusoro ndeye kushandisa fomati inoverengwa nevanhu, senge JSON kana XML. Asi izvi zvichange zvisisashande uye zvichaparadza yakawanda chiteshi.

Inokurudzirwa kushandisa iyo bhinari fomati panzvimbo, iyo yakanyanya compact. Ndiko kuti, mapaketi achange aine mabheti mashoma. Pane dambudziko rekufunga apa byte order, iyo inogona kusiyana pamakombiyuta akasiyana.

Kuti uise data, unogona kushandisa raibhurari, semuenzaniso:

Ingoita shuwa kuti raibhurari inogadzira inotakurika archives uye ine hanya nezve endanness.

Imwe mhinduro ndeyekuzviita iwe pachako; haina kunyanya kuoma, kunyanya kana iwe ukashandisa data-centric nzira kune yako kodhi. Pamusoro pezvo, zvinokutendera kuti uite optimizations iyo isingagoneki nguva dzose kana uchishandisa raibhurari.

Glenn Fiedler akanyora zvinyorwa zviviri nezve serialization: Kuverenga uye Kunyora Packets ΠΈ Serialization Strategies.

Kudzvinyirira

Huwandu hwe data inotamiswa pakati pevatengi uye sevha inogumira nechiteshi bandwidth. Kudzvanywa kwedata kuchakubvumidza kuti utumire data rakawanda mune yega yega snapshot, kuwedzera iyo frequency yekuvandudza, kana kungo dzikisa zvinodiwa nechiteshi.

Bit kurongedza

Nzira yekutanga ndeye bit packing. Inosanganisira kushandisa chaizvo nhamba yemabhiti anodiwa kutsanangura kukosha kunodiwa. Semuyenzaniso, kana uine enum inokwanisa kuva negumi nematanhatu akasiyana siyana, ipapo pachinzvimbo chebhaiti rese (16 bits), unogona kushandisa mabits mana chete.

Glenn Fiedler anotsanangura maitiro ekuita izvi muchikamu chechipiri chechinyorwa Kuverenga uye Kunyora Packets.

Bit packing inoshanda zvakanyanya nesampling, inova iyo musoro wechikamu chinotevera.

Shanduro

Shanduro inzira yekurasika yekumanikidza iyo inoshandisa chete subset yezvinogoneka kukosha kuti encode kukosha. Nzira iri nyore yekushandisa discretization ndeyekutenderedza inoyangarara nzvimbo nhamba.

Glenn Fiedler (zvakare!) anoratidza nzira yekushandisa sampling muchinyorwa chake Snapshot Compression.

Compression algorithms

Iyo inotevera tekiniki ichave isingarasikike compression algorithms.

Pano, mumaonero angu, ndiwo matatu anonyanya kufadza algorithms aunoda kuziva:

  • Huffman coding ine pre-computed kodhi, iyo inokurumidza zvakanyanya uye inogona kuburitsa mhedzisiro yakanaka. Yakashandiswa kumanikidza mapaketi muQuake3 networking injini.
  • zlib ndeye general-chinangwa compression algorithm isingambo wedzera huwandu hwe data. Unozviona sei pano, yakashandiswa mune zvakasiyana-siyana zvekushandisa. Zvinogona kunge zvisisashandiswi pakuvandudza nyika. Asi zvinogona kubatsira kana iwe uchida kutumira zvinhu, zvinyorwa zvirefu kana terrain kune vatengi kubva kune server.
  • Kukopa kureba kwekumhanya - Iyi ingangove iri nyore kudzvanya algorithm, asi inoshanda zvakanyanya kune mamwe marudzi e data, uye inogona kushandiswa se pre-processing nhanho pamberi pezlib. Iyo inonyanya kukodzera kudzvanya terrain inoumbwa nematiles kana voxels umo zvinhu zvakawanda zviri pedyo zvinodzokororwa.

Delta compression

Iyo yekupedzisira yekumanikidza nzira ndeye delta compression. Izvo zvinosanganisirwa mukuti chete misiyano pakati peiyo iripo mutambo mamiriro uye yekupedzisira inogamuchirwa nemutengi inofambiswa.

Yakatanga kushandiswa muQuake3 network injini. Heano zvinyorwa zviviri zvinotsanangura mashandisirwo ayo:

Glenn Fiedler akaishandisawo muchikamu chechipiri chechinyorwa chake Snapshot Compression.

Encryption

Uye zvakare, ungangoda encrypt kutumira kweruzivo pakati pevatengi neseva. Pane zvikonzero zvakawanda zveizvi:

  • kuvanzika/kuvanzika: mameseji anogona kuverengwa chete neanotambira, uye hapana mumwe munhu anofembedza network achakwanisa kuiverenga.
  • authentication: munhu anoda kutamba chinzvimbo chemutambi anofanira kuziva kiyi yake.
  • Kudzivirira kubiridzira: Zvichanyanya kuomera vatambi vane hutsinye kuti vagadzire yavo yekubiridzira mapakeji, ivo vanozofanirwa kuburitsa iyo encryption chirongwa uye nekutsvaga kiyi (inochinja nekubatana kwega kwega).

Ndinokurudzira kushandisa raibhurari kune izvi. Ndinokurudzira kushandisa libsodium, nekuti yakanyanya nyore uye ine yakanakisa tutorials. Chinonyanya kufadza ndeye tutorial pa key exchange, iyo inokutendera kuti ugadzire makiyi matsva nekubatanidza kutsva kwega kwega.

Application Protocol: Mhedziso

Izvi zvinopedzisa application yedu protocol. Ini ndinotenda kuti kudzvanya kunosarudzika zvachose uye sarudzo yekuishandisa inoenderana chete nemutambo uye bandwidth inodiwa. Encryption, mumaonero angu, inosungirwa, asi mune yekutanga prototype iwe unogona kuita pasina iyo.

Maitiro ekushandisa

Isu tave kukwanisa kugadzirisa mamiriro emutengi, asi tinogona kusangana nenyaya dze latency. Mutambi, mushure mekupedza kuisa, anofanirwa kumirira kuti mamiriro emutambo agadzirise kubva pasevha kuti aone kuti yakakanganisa sei pasirese.

Uyezve, pakati pezvigadziriso zviviri zvehurumende, nyika yakanyatsomira. Kana iyo state update rate yakadzikira, saka mafambiro acho achange ari jerky.

Pane nzira dzakati wandei dzekudzikisa kukanganisa kwedambudziko iri, uye ini ndichaavhara muchikamu chinotevera.

Latency Smoothing Techniques

Maitiro ese anotsanangurwa muchikamu chino anokurukurwa zvakadzama munhevedzano Inokurumidza-Paced Multiplayer Gabriel Gambetta. Ndinokurudzira zvikuru kuverenga iyi yakanakisa nhevedzano yezvinyorwa. Inosanganisirawo demo inopindirana iyo inoita kuti iwe uone kuti maitiro aya anoshanda sei mukuita.

Nzira yekutanga ndeyekushandisa mhinduro yakananga pasina kumirira mhinduro kubva kuseva. Inonzi client-side forecasting. Nekudaro, kana mutengi agamuchira update kubva kune server, inofanirwa kuona kuti kufanotaura kwayo kwaive kwechokwadi. Kana zvisina kudaro, saka anongoda kushandura mamiriro ake maererano nezvaakagamuchira kubva kuvhavha, nokuti sevha inomiririra. Iyi nzira yakatanga kushandiswa muKudengenyeka. Iwe unogona kuverenga zvakawanda nezvazvo munyaya yacho Quake Injini kodhi ongororo Fabien Sanglars [kududzira pana HabrΓ©].

Yechipiri seti yehunyanzvi inoshandiswa kugadzirisa mafambiro emamwe masangano pakati pezvigadziriso zviviri zvehurumende. Pane nzira mbiri dzekugadzirisa dambudziko iri: interpolation uye extrapolation. Panyaya yekududzira, nyika mbiri dzekupedzisira dzinotorwa uye shanduko kubva kune imwe kuenda kune imwe inoratidzwa. Kushata kwayo ndeyekuti inokonzera kunonoka kudiki nekuti mutengi anogara achiona zvakaitika kare. Extrapolation ndeyekufanotaura kuti masangano anofanira kunge ari papi zvichibva pane yekupedzisira yakagamuchirwa nemutengi. Kukanganisa kwaro ndekwekuti kana sangano richichinja zvachose kutungamira kwekufamba, ipapo pachava nekukanganisa kukuru pakati pekufanotaura uye nzvimbo chaiyo.

Iyo yazvino, yakanyanya dhizaini inobatsira chete muFPS ndeye lag compensation. Paunenge uchishandisa lag compensation, sevha inofunga nezve kunonoka kwemutengi kana ichipfura pane chinangwa. Semuenzaniso, kana mutambi akaita headshot pachiratidziro chavo, asi chokwadi chinangwa chavo chaive chiri kune imwe nzvimbo nekuda kwekunonoka, saka zvingave zvisina kunaka kuramba mutambi kodzero yekuuraya nekuda kwekunonoka. Naizvozvo, sevha inodzosera nguva kumashure kusvika panguva iyo mutambi akadzingwa kuti atevedzere zvakaonekwa nemutambi pachiratidziro chake uye kutarisa kudhumhana pakati pepfuti yavo nevavariro.

Glenn Fiedler (senguva dzose!) akanyora chinyorwa muna 2004 Network Physics (2004), umo akateya hwaro hwekuwiriranisa fizikisi simulations pakati server uye mutengi. Muna 2014 akanyora nyaya itsva dzakatevedzana Networking Physics, iyo yakatsanangura dzimwe nzira dzekuenzanisa kuenzanisa kwefizikisi.

Kune zvakare zvinyorwa zviviri paValve wiki, Kunobva Multiplayer Networking ΠΈ Latency Kubhadhara Nzira muMutengi / Sevha Mu-mutambo Protocol Dhizaini uye Kugonesa izvo zvinofunga muripo wekunonoka.

Kudzivirira kubiridzira

Pane nzira mbiri huru dzekudzivirira kubiridzira.

Chekutanga: kuita kuti zvinyanye kunetsa kune vanobiridzira kutumira mapaketi ane hutsinye. Sezvambotaurwa pamusoro apa, nzira yakanaka yekushandisa iyi encryption.

Chechipiri: sevha yehutongi inofanira kungogamuchira mirairo / kuisa / zviito. Mutengi haafanire kukwanisa kushandura mamiriro pane server kunze kwekutumira mapindiro. Zvadaro, nguva yega yega sevha inogamuchira inopinza, inofanirwa kutarisa kuti inoshanda here isati yaishandisa.

Maitiro ekushandisa: mhedziso

Ini ndinokurudzira kuti iwe ushandise nzira yekutevedzera yakakwira latencies uye yakaderera yekuzorodza mitengo kuitira kuti iwe ugone kuyedza maitiro emutambo wako mumamiriro asina kunaka, kunyangwe mutengi uye server ichimhanya pakombuta imwe chete. Izvi zvicharerutsa zvikuru kushandiswa kwekunonoka kutsetsenura matekiniki.

Zvimwe Zvishandiso Zvinobatsira

Kana iwe uchida kuongorora zvimwe zviwanikwa pane network modhi, unogona kuzviwana pano:

  • Glenn Fiedler's Blog - bhurogi rake rose rakakodzera kuverenga, kune zvakawanda zvezvinyorwa zvakanaka ipapo. zviri Zvese zvinyorwa pamanetiweki matekinoroji zvinounganidzwa.
  • Awesome Game Networking naM. Fatih MAR rondedzero yakazara yezvinyorwa uye mavhidhiyo epamhepo einjini emitambo yemavhidhiyo.
  • Π’ wiki ye r/gamedev subreddit Kune zvakare akawanda anobatsira links.

Source: www.habr.com

Voeg