Mahitungod sa modelo sa network sa mga dula alang sa mga nagsugod

Mahitungod sa modelo sa network sa mga dula alang sa mga nagsugod
Sa miaging duha ka semana nagtrabaho ko sa makina sa networking para sa akong dula. Sa wala pa kana, wala gyud ako nahibal-an bahin sa networking sa mga dula, mao nga nagbasa ako daghang mga artikulo ug daghang mga eksperimento aron masabtan ang tanan nga mga konsepto ug makasulat sa akong kaugalingon nga makina sa network.

Sa kini nga giya, gusto nako nga ipaambit kanimo ang lainlaing mga konsepto nga kinahanglan nimong mahibal-an sa wala pa isulat ang imong kaugalingon nga makina sa dula, ingon man ang labing kaayo nga mga kapanguhaan ug mga artikulo sa pagkat-on niini.

Sa kinatibuk-an, adunay duha ka nag-unang matang sa mga arkitektura sa network: peer-to-peer ug client-server. Sa usa ka peer-to-peer (p2p) nga arkitektura, ang data gibalhin tali sa bisan unsang pares sa konektado nga mga magdudula, samtang sa usa ka kliyente-server nga arkitektura, ang datos gibalhin lamang tali sa mga magdudula ug sa server.

Bisan tuod ang peer-to-peer nga arkitektura gigamit gihapon sa pipila ka mga dula, ang client-server mao ang sumbanan: mas sayon ​​nga ipatuman, nagkinahanglan og mas gamay nga gilapdon sa channel, ug mas sayon ​​​​ang pagpanalipod batok sa pagpanglimbong. Busa, sa kini nga giya, magpunting kami sa arkitektura sa kliyente-server.

Sa partikular, kami labing interesado sa mga awtoritaryan nga mga server: sa ingon nga mga sistema, ang server kanunay nga husto. Pananglitan, kung ang magdudula naghunahuna nga siya naa sa (10, 5) ug ang server nagsulti kaniya nga siya naa sa (5, 3), nan ang kliyente kinahanglan nga ilisan ang posisyon niini sa usa nga gi-report sa server, dili sa laing paagi. Ang paggamit sa mga awtoritatibo nga server nagpasayon ​​sa pag-ila sa mga mangingilad.

Adunay tulo ka nag-unang sangkap sa mga sistema sa network sa pagdula:

  • Transport protocol: kung giunsa ang pagbalhin sa datos tali sa mga kliyente ug sa server.
  • Application protocol: unsa ang gipasa gikan sa mga kliyente ngadto sa server ug gikan sa server ngadto sa mga kliyente, ug sa unsa nga format.
  • Logic sa aplikasyon: kung giunsa ang gipasa nga datos gigamit aron ma-update ang kahimtang sa mga kliyente ug sa server.

Importante kaayo nga masabtan ang papel sa matag bahin ug ang mga kalisdanan nga nalangkit niini.

Protocol sa transportasyon

Ang una nga lakang mao ang pagpili sa usa ka protocol alang sa pagdala sa datos tali sa server ug mga kliyente. Adunay duha ka mga protocol sa Internet alang niini: TCP и UDP. Apan makahimo ka sa imong kaugalingong transport protocol base sa usa niini o mogamit og library nga naggamit niini.

Pagtandi sa TCP ug UDP

Ang TCP ug UDP gibase sa IP. Ang IP nagtugot sa usa ka pakete nga mapasa gikan sa usa ka tinubdan ngadto sa usa ka tigdawat, apan kini dili garantiya nga ang gipadala nga pakete makaabot sa tigdawat sa madugay o madali, nga kini makaabot niini labing menos kausa, ug nga ang han-ay sa mga pakete moabot sa ang saktong han-ay. Dugang pa, ang usa ka pakete mahimo ra nga adunay sulud nga limitado nga gidak-on sa datos, nga gihatag sa kantidad MTU.

Ang UDP usa lang ka nipis nga layer sa ibabaw sa IP. Busa, kini adunay parehas nga mga limitasyon. Sa kasukwahi, ang TCP adunay daghang mga bahin. Naghatag kini usa ka kasaligan nga gimando nga koneksyon tali sa duha nga mga node nga adunay pagsusi sa sayup. Busa, ang TCP sayon ​​​​kaayo ug gigamit sa daghang uban pang mga protocol, pananglitan, sa http, FTP и SMTP. Apan ang tanan niini nga mga bahin moabut sa usa ka presyo: paglangan.

Aron masabtan kung ngano nga kini nga mga gimbuhaton mahimong hinungdan sa latency, kinahanglan naton masabtan kung giunsa ang TCP molihok. Kung ang nagpadala nga host nagpadala usa ka pakete sa nakadawat nga host, kini nagpaabut nga makadawat usa ka pag-ila (ACK). Kung pagkahuman sa usa ka piho nga oras dili kini madawat (tungod kay nawala ang pakete o kumpirmasyon, o sa uban pang hinungdan), dayon ipadala ang pakete pag-usab. Dugang pa, gigarantiyahan sa TCP nga ang mga pakete madawat sa husto nga pagkasunod-sunod, mao nga hangtod ang nawala nga pakete madawat, ang tanan nga ubang mga pakete dili maproseso, bisan kung nadawat na kini sa nakadawat nga node.

Apan sama sa tingali imong nasabtan, ang latency sa mga multiplayer nga dula importante kaayo, ilabina sa mga aktibo nga genre sama sa FPS. Mao nga daghang mga dula ang naggamit sa UDP nga adunay kaugalingon nga protocol.

Ang usa ka lumad nga protocol nga gibase sa UDP mahimong mas episyente kaysa TCP sa lainlaing mga hinungdan. Pananglitan, mahimo nga markahan niini ang pipila ka mga pakete ingon kasaligan ug ang uban dili kasaligan. Busa, wala niya igsapayan kung ang dili kasaligan nga pakete nakaabot sa nakadawat. O makaproseso kini og daghang mga sapa sa datos aron ang usa ka pakete nga nawala sa usa ka sapa dili makapahinay sa ubang mga sapa. Pananglitan, tingali adunay usa ka hilo alang sa input sa magdudula ug lain nga hilo alang sa mga mensahe sa chat. Kung ang usa ka mensahe sa chat nga dili dinalian nga datos nawala, nan dili kini makapahinay sa input nga dinalian. O ang usa ka proprietary protocol mahimong mag-implementar sa kasaligan nga lahi kaysa TCP aron mahimong mas episyente sa usa ka palibot sa dula sa video.

Busa, kung ang TCP nagsuso, nan kita magtukod sa atong kaugalingong transport protocol base sa UDP?

Ang tanan medyo mas komplikado. Bisan kung ang TCP hapit dili kaayo maayo alang sa mga sistema sa network sa pagdula, mahimo kini nga molihok nga maayo alang sa imong piho nga dula ug makatipig kanimo hinungdanon nga oras. Pananglitan, ang latency mahimong dili usa ka isyu alang sa usa ka turn-based nga dula o usa ka dula nga mahimo ra dulaon sa mga LAN network, diin ang latency ug pagkawala sa packet mas gamay kaysa sa Internet.

Daghang malampuson nga mga dula, lakip ang World of Warcraft, Minecraft, ug Terraria, naggamit sa TCP. Bisan pa, kadaghanan sa mga FPS naggamit sa ilang kaugalingon nga mga protocol nga nakabase sa UDP, mao nga maghisgot pa kami bahin niini sa ubos.

Kung gipili nimo nga gamiton ang TCP nan siguruha nga kini gi-disable Ang algorithm ni Nagle, tungod kay kini nag-buffer sa mga pakete sa wala pa ipadala, nga nagpasabot nga kini nagdugang sa paglangan.

Aron makakat-on og dugang mahitungod sa mga kalainan tali sa UDP ug TCP sa konteksto sa multiplayer nga mga dula, tan-awa ang artikulo ni Glenn Fiedler UDP vs. TCP.

Proprietary Protocol

Mao nga gusto nimo maghimo imong kaugalingon nga protocol sa transportasyon apan wala ka mahibal-an kung asa magsugod? Swerte ka, tungod kay gisulat ni Glenn Fiedler ang duha ka katingalahang mga artikulo bahin niini. Makita nimo ang daghang maalamon nga mga ideya diha kanila.

Unang artikulo Networking para sa Game Programmer 2008, mas sayon ​​kay sa ikaduha Pagtukod ug Game Network Protocol 2016. Girekomenda ko nga magsugod ka sa mas tigulang.

Hibal-i nga si Glenn Fiedler usa ka dako nga tigpasiugda sa paggamit sa imong kaugalingon nga protocol base sa UDP. Ug pagkahuman sa pagbasa sa iyang mga artikulo, mahimo nimong gamiton ang iyang opinyon nga ang TCP adunay grabe nga mga kakulangan sa mga dula sa video, ug gusto nimo nga ipatuman ang imong kaugalingon nga protocol.

Apan kung bag-o ka sa networking, buhata ang imong kaugalingon nga pabor ug gamita ang TCP o usa ka librarya. Aron malampuson nga ipatuman ang imong kaugalingon nga protocol sa transportasyon, kinahanglan nimo nga makat-on daan.

Mga Librarya sa Network

Kung kinahanglan nimo ang usa ka butang nga mas episyente kaysa TCP, apan dili nimo gusto nga magsamok sa pagpatuman sa imong kaugalingon nga protocol ug moadto sa daghang mga detalye, mahimo nimong gamiton ang net library. Adunay daghan kanila:

Wala pa nako nasulayan ang tanan, apan mas gusto nako ang ENet tungod kay kini dali gamiton ug kasaligan. Dugang pa, kini adunay tin-aw nga dokumentasyon ug usa ka panudlo alang sa mga nagsugod.

Konklusyon sa Transport Protocol

Sa pag-summarize, adunay duha ka nag-unang transport protocol: TCP ug UDP. Ang TCP adunay daghang mapuslanon nga mga bahin: kasaligan, pagpreserba sa han-ay sa pakete, pag-ila sa sayup. Ang UDP wala'y tanan niana, apan ang TCP, sa kinaiyahan niini, adunay taas nga latency nga dili madawat sa pipila ka mga dula. Kana mao, aron masiguro ang ubos nga latency, mahimo ka nga maghimo sa imong kaugalingon nga protocol base sa UDP o mogamit sa usa ka librarya nga nagpatuman sa transport protocol sa UDP ug gipahaum alang sa mga multiplayer nga video game.

Ang pagpili tali sa TCP, UDP, ug sa librarya nagdepende sa daghang mga hinungdan. Una, gikan sa mga panginahanglan sa dula: kinahanglan ba kini nga mubu nga latency? Ikaduha, gikan sa mga kinahanglanon sa protocol sa aplikasyon: kinahanglan ba kini usa ka kasaligan nga protocol? Sama sa atong makita sa sunod nga bahin, posible nga maghimo usa ka protocol sa aplikasyon diin ang usa ka dili kasaligan nga protocol mao ang angay. Sa katapusan, kinahanglan nimo usab nga tagdon ang kasinatian sa developer sa network engine.

Naa koy duha ka tips:

  • Abstract ang transport protocol kutob sa mahimo gikan sa nahabilin nga aplikasyon aron kini dali nga mapulihan nga wala isulat pag-usab ang tanan nga code.
  • Ayaw sobra nga pag-optimize. Kung dili ka eksperto sa network ug dili sigurado kung kinahanglan nimo ang imong kaugalingon nga protocol sa transportasyon nga nakabase sa UDP, mahimo ka magsugod sa TCP o usa ka librarya nga naghatag kasaligan, ug dayon pagsulay ug pagsukod sa pasundayag. Kung adunay ka mga problema ug sigurado ka nga kini usa ka protocol sa transportasyon, mahimo’g panahon na aron maghimo imong kaugalingon nga protocol sa transportasyon.

Sa katapusan niini nga bahin, girekomendar nako nga basahon nimo Pasiuna sa Multiplayer Game Programming Brian Hook, nga naglangkob sa daghang mga hilisgutan nga gihisgutan dinhi.

Application Protocol

Karon nga mahimo na namon nga magbayloay og data tali sa mga kliyente ug sa server, kinahanglan namon nga magdesisyon kung unsang datos ang ibalhin ug sa unsang pormat.

Ang klasiko nga laraw mao nga ang mga kliyente magpadala sa input o aksyon sa server, ug ang server nagpadala sa karon nga kahimtang sa dula sa mga kliyente.

Ang server nagpadala dili sa bug-os, apan ang nasala nga estado nga adunay mga entidad nga duol sa magdudula. Gihimo niya kini tungod sa tulo ka rason. Una, ang kinatibuk-ang estado mahimong dako kaayo aron mapasa sa taas nga frequency. Ikaduha, ang mga kliyente nag-una nga interesado sa visual ug audio data, tungod kay ang kadaghanan sa dula nga lohika gi-simulate sa game server. Ikatulo, sa pipila ka mga dula ang magdudula dili kinahanglan nga mahibal-an ang piho nga datos, sama sa posisyon sa kaaway sa pikas nga bahin sa mapa, tungod kay kung dili siya maka-sniff sa mga pakete ug mahibal-an kung diin mobalhin aron patyon siya.

Serialisasyon

Ang una nga lakang mao ang pag-convert sa datos nga gusto namon ipadala (input o kahimtang sa dula) sa usa ka format nga angay alang sa transmission. Kini nga proseso gitawag serialization.

Ang ideya diha-diha dayon moabut sa hunahuna sa paggamit sa usa ka format nga mabasa sa tawo, sama sa JSON o XML. Apan kini mahimong hingpit nga inefficient ug mokuha sa kadaghanan sa channel nga wala’y bayad.

Hinuon, girekomenda nga gamiton ang binary format, nga labi ka compact. Sa ato pa, ang mga packet maglangkob lang og pipila ka bytes. Dinhi kinahanglan natong tagdon ang problema han-ay sa byte, nga mahimong magkalainlain sa lainlaing mga kompyuter.

Aron ma-serialize ang datos, mahimo nimong gamiton ang usa ka librarya, pananglitan:

Siguruha lang nga ang librarya naghimo sa madaladala nga mga archive ug nag-atiman sa endianness.

Ang usa ka alternatibo nga solusyon mao ang pagpatuman niini sa imong kaugalingon, dili kini lisud, labi na kung naggamit ka usa ka pamaagi nga nakasentro sa datos sa imong code. Dugang pa, kini magtugot kanimo sa paghimo sa mga pag-optimize nga dili kanunay posible kung gamiton ang librarya.

Gisulat ni Glenn Fiedler ang duha ka artikulo bahin sa serialization: Mga Pakete sa Pagbasa ug Pagsulat и Mga Estratehiya sa Serialization.

Pagpugong

Ang gidaghanon sa datos nga gibalhin tali sa mga kliyente ug sa server limitado sa bandwidth sa channel. Ang data compression magtugot kanimo sa pagbalhin sa dugang nga data sa matag snapshot, pagpataas sa refresh rate, o pagpakunhod lamang sa mga kinahanglanon sa bandwidth.

Bit packing

Ang una nga teknik mao ang gamay nga pagputos. Naglangkob kini sa paggamit sa eksakto nga gidaghanon sa mga tipik nga gikinahanglan aron ihulagway ang gitinguha nga kantidad. Pananglitan, kung ikaw adunay usa ka enum nga mahimong adunay 16 ka lainlaing mga kantidad, unya imbes usa ka tibuuk nga byte (8 ka bit), mahimo nimong gamiton ang 4 ka mga bit.

Gipatin-aw ni Glenn Fiedler kung giunsa kini ipatuman sa ikaduhang bahin sa artikulo. Mga Pakete sa Pagbasa ug Pagsulat.

Ang bit packing maayo kaayo sa discretization, nga mahimong hisgutanan sa sunod nga seksyon.

Sampling

Sampling kay usa ka lossy compression technique nga naggamit lang ug subset sa posibleng values ​​para ma-encode ang value. Ang pinakasayon ​​nga paagi sa pagpatuman sa discretization mao ang pag-rounding sa floating-point nga mga numero.

Gipakita ni Glenn Fiedler (pag-usab!) kung giunsa ang paggamit sa discretization sa praktis sa iyang artikulo Snapshot Compression.

Mga algorithm sa compression

Ang sunod nga teknik mao ang lossless compression algorithms.

Dinhi, sa akong opinyon, mao ang tulo nga labing makapaikag nga mga algorithm nga kinahanglan nimo mahibal-an:

  • Huffman coding uban sa precomputed code, nga hilabihan ka paspas ug makahimo og maayong mga resulta. Gigamit kini sa pag-compress sa mga packet sa Quake3 network engine.
  • zlib mao ang usa ka kinatibuk-ang katuyoan compression algorithm nga dili gayud nagdugang sa gidaghanon sa mga data. Unsaon nimo pagkakita dinhi, kini gigamit sa lain-laing mga aplikasyon. Alang sa pag-update sa mga estado, kini mahimong sobra. Apan kini mahimong magamit kung kinahanglan nimo nga magpadala mga kabtangan, taas nga mga teksto o terrain sa mga kliyente gikan sa server.
  • Pagkopya sa gitas-on sa dagan mao tingali ang pinakasimple nga compression algorithm, apan kini mao ang kaayo episyente alang sa pipila ka mga matang sa data, ug mahimong gamiton ingon nga usa ka pre-processing lakang sa atubangan sa zlib. Kini labi ka angay alang sa pag-compress sa yuta nga gilangkuban sa mga tile o voxels diin daghang mga silingan nga elemento ang gisubli.

delta compression

Ang katapusan nga teknik sa compression mao ang delta compression. Kini nahimutang sa kamatuoran nga ang mga kalainan lamang tali sa kasamtangan nga kahimtang sa dula ug sa katapusang estado nga nadawat sa kliyente ang gipasa.

Kini unang gigamit sa Quake3 network engine. Ania ang duha ka artikulo nga nagpatin-aw kung giunsa kini paggamit:

Gigamit usab kini ni Glenn Fiedler sa ikaduhang bahin sa iyang artikulo. Snapshot Compression.

Encryption

Dugang pa, kinahanglan nimo nga i-encrypt ang pagpadala sa kasayuran tali sa mga kliyente ug sa server. Adunay daghang mga hinungdan niini:

  • Pagkapribado/Pagkompidensyal: Ang mga mensahe mabasa lamang sa nakadawat ug walay laing network sniffer nga makabasa niini.
  • authentication: ang usa ka tawo nga gustong modula sa papel sa usa ka magdudula kinahanglang mahibalo sa iyang yawe.
  • paglikay sa paglimbong: mas lisud alang sa mga malisyosong magdudula ang paghimo sa ilang kaugalingon nga mga pakete sa paglimbong, kinahanglan nila nga kopyahon ang laraw sa pag-encrypt ug pangitaon ang yawe (nga nagbag-o sa matag koneksyon).

Kusganon nakong girekomendar ang paggamit ug library para niini. Gisugyot ko nga gamiton libsodium, tungod kay kini labi ka yano ug adunay daghang mga panudlo. Ilabi na nga makapaikag mao ang tutorial sa key exchange, nga nagtugot kanimo sa pagmugna og bag-ong mga yawe sa matag bag-ong koneksyon.

Application Protocol: Konklusyon

Kini nagtapos sa protocol sa aplikasyon. Nagtuo ko nga ang compression hingpit nga opsyonal ug ang desisyon sa paggamit niini nagdepende lamang sa dula ug sa gikinahanglan nga bandwidth. Ang pag-encrypt, sa akong opinyon, gikinahanglan, apan sa unang prototype mahimo nimo nga wala kini.

Logic sa Aplikasyon

Nahimo na namon nga i-update ang estado sa kliyente, apan mahimo kami nga adunay mga isyu sa latency. Ang magdudula, pagkahuman maghimo usa ka input, kinahanglan maghulat alang sa usa ka update sa estado sa dula gikan sa server aron makita kung unsa ang epekto niini sa kalibutan.

Dugang pa, tali sa duha ka pag-update sa estado, ang kalibutan hingpit nga static. Kung ang rate sa pag-update sa estado gamay, nan ang mga lihok mahimong grabe.

Adunay daghang mga pamaagi aron maminusan ang epekto sa kini nga problema, ug hisgotan ko kini sa sunod nga seksyon.

Delay Smoothing Techniques

Ang tanan nga mga teknik nga gihulagway niini nga seksyon gihisgutan sa detalye sa serye. Paspas nga Multiplayer Gabriel Gambetta. Girekomenda nako nga basahon kining maayo kaayo nga serye sa mga artikulo. Naglakip usab kini sa usa ka interactive nga demo aron makita kung giunsa kini nga mga pamaagi molihok sa praktis.

Ang unang teknik mao ang paggamit sa resulta sa input direkta nga walay paghulat sa tubag gikan sa server. Gitawag kini panagna sa bahin sa kliyente. Bisan pa, kung ang kliyente makadawat usa ka update gikan sa server, kinahanglan nga pamatud-an nga husto ang panagna niini. Kung dili ingon niini, kinahanglan na lang niyang usbon ang iyang estado sumala sa iyang nadawat gikan sa server, tungod kay ang server awtoritarian. Kini nga teknik unang gigamit sa Quake. Mahimo nimong mabasa ang dugang bahin niini sa artikulo. Pagrepaso sa code sa Quake Engine Fabien Sanglars [hubad sa Habré].

Ang ikaduha nga hugpong sa mga teknik gigamit aron hapsay ang paglihok sa ubang mga entidad tali sa duha nga pag-update sa estado. Adunay duha ka paagi sa pagsulbad niini nga problema: interpolation ug extrapolation. Sa kaso sa interpolation, ang katapusang duha ka estado gikuha ug ang transisyon gikan sa usa ngadto sa lain gipakita. Ang disbentaha niini mao nga kini hinungdan sa usa ka gamay nga bahin sa paglangan, tungod kay ang kliyente kanunay nga nakakita kung unsa ang nahitabo sa nangagi. Ang extrapolation mao ang mahitungod sa pagtagna kung asa ang mga entidad kinahanglan nga ibase karon sa katapusang estado nga nadawat sa kliyente. Ang disbentaha niini mao nga kung ang entidad hingpit nga magbag-o sa direksyon sa paglihok, nan adunay usa ka dako nga sayup tali sa forecast ug sa tinuud nga posisyon.

Ang katapusan, labing abante nga teknik, mapuslanon lamang sa FPS, mao lag kompensasyon. Kung gigamit ang bayad sa lag, gikonsiderar sa server ang mga paglangan sa kliyente kung kini nagpabuto sa target. Pananglitan, kung ang usa ka magdudula naghimo og usa ka headshot sa ilang screen, apan sa tinuud ang ilang target naa sa lahi nga lokasyon tungod sa paglangan, nan dili patas nga ihikaw sa magdudula ang katungod sa pagpatay tungod sa pagkalangan. Mao nga gibalik sa server ang oras balik kung kanus-a nagpabuto ang magdudula aron i-simulate kung unsa ang nakita sa magdudula sa ilang screen ug susihon kung adunay bangga tali sa ilang shot ug target.

Si Glenn Fiedler (sama sa kanunay!) misulat ug artikulo niadtong 2004 Network Physics (2004), diin iyang gibutang ang pundasyon alang sa pag-synchronize sa mga simulation sa pisika tali sa server ug sa kliyente. Niadtong 2014 nagsulat siya og bag-ong serye sa mga artikulo pisika sa networking, diin iyang gihulagway ang ubang mga teknik sa pag-synchronize sa mga simulation sa pisika.

Adunay usab duha ka mga artikulo sa wiki ni Valve, Tinubdan nga Multiplayer Networking и Latency Compensating Methods sa Client/Server In-game Protocol Design and Optimization pag-atubang sa bayad sa pagkalangan.

Paglikay sa paglimbong

Adunay duha ka nag-unang pamaagi sa paglikay sa paglimbong.

Una, nagpalisud sa mga mangingilad nga magpadala og mga malisyoso nga pakete. Sama sa gihisgutan sa ibabaw, ang usa ka maayong paagi sa pagpatuman niini mao ang pag-encrypt.

Ikaduha, ang awtoritatibo nga server kinahanglan ra makadawat mga mando / input / aksyon. Ang kliyente kinahanglan dili makahimo sa pag-usab sa estado sa server gawas sa pagpadala sa input. Dayon ang server, sa matag higayon nga makadawat kini og input, kinahanglang susihon kini alang sa pagkabalido sa dili pa kini gamiton.

Lohika sa Aplikasyon: Konklusyon

Girekomenda ko nga imong ipatuman ang usa ka paagi aron masundog ang taas nga latency ug mubu nga rate sa pag-refresh aron masulayan nimo ang pamatasan sa imong dula sa dili maayo nga mga kahimtang, bisan kung ang kliyente ug server nagdagan sa parehas nga makina. Gipasimple niini pag-ayo ang pagpatuman sa mga pamaagi sa pagpahapsay sa paglangan.

Ubang Makatabang nga mga Kapanguhaan

Kung gusto nimong usisahon ang ubang mga kapanguhaan sa modelo sa network, makit-an nimo kini dinhi:

Source: www.habr.com

Idugang sa usa ka comment