Hoppa yfir í efnið

Bakhönnun netforrita

Sum forrit taka ekki aðeins við inntaki á skipanalínu eða úr skrá heldur eiga samskipti við önnur forrit um net. Þá þurfum við bæði að skilja kóðann og hvernig skilaboð fara á milli forritanna.

Einangrum óþekkt netforrit

Óþekkt forrit getur bæði tekið við tengingum og reynt að tengjast öðrum tölvum. Við keyrum það í sérstakri sýndarvél án mikilvægra gagna og takmörkum netaðgang hennar við það sem verkefnið krefst.

Biðlari, þjónn og samskiptaregla

Biðlari (e. client) tengist þjóni (e. server) og sendir honum beiðni. Þjónninn vinnur úr beiðninni og sendir svar. Samskiptareglan (e. protocol) segir til um hvernig skilaboðin eru byggð upp og í hvaða röð þau fara á milli forritanna.

sequenceDiagram
    participant Client as Biðlari
    participant Server as Þjónn
    Client->>Server: Beiðni
    Server-->>Client: Svar

Þjónn hlustar venjulega á tiltekið tengi (e. port) og biðlari tengist því. Sum forrit nota þekkta samskiptareglu á borð við HTTP en önnur skilgreina eigið texta- eða tvíundasnið.

Fyrstu skref

Við byrjum á sömu aðferðum og í öðrum bakhönnunarverkefnum:

  1. Við könnum skrána með file og strings og opnum hana síðan í bakþýðanda.
  2. Við leitum að netföllum á borð við socket, bind, listen, accept, connect, recv og send.
  3. Við finnum hvar skilaboð eru lesin, túlkuð og mynduð.
  4. Við keyrum forritið í einangruðu umhverfi og berum raunveruleg samskipti saman við kóðann.

Ekki er víst að öll föllin birtist. Forrit getur notað bókasafn sem felur kerfisköllin eða látið annað ferli annast samskiptin.

Að skoða tengingar

Skipunin ss sýnir hvaða TCP-gáttir eru opnar:

ss -ltnp

Ef forritið notar HTTP getum við skoðað beiðnir og svör með curl:

curl -v http://127.0.0.1:8080/

Fyrir einföld textasamskipti yfir TCP getum við tengst með nc:

nc 127.0.0.1 9000

Við getum einnig notað strace -e trace=network til að sjá netkerfisköll eða Wireshark og tcpdump til að skoða pakkana sem fara um netið.

Sérsniðin skilaboðasnið

Sérsniðin samskiptaregla getur sett nokkur svið í hvert skeyti, til dæmis tegund, lengd og gögn:

block-beta
    columns 4
    Type["tegund"] Length["lengd"] Data["gögn"]:2

Við þurfum þá að komast að:

  • hversu mörg bæti hvert svið notar;
  • hvaða bætaröð er notuð fyrir tölur;
  • hvort lengdarsvið telur allt skeytið eða aðeins gögnin;
  • hvaða röð skilaboða þjónninn býst við.

Bakþýðandinn sýnir okkur hvernig sviðin eru lesin. Kvik greining staðfestir síðan hvort túlkun okkar samræmist raunverulegum samskiptum.


Æfingar

Verkefni til að æfa bakhönnun netforrita:

  • Speakeasy: Við greinum forrit sem tekur við beiðnum frá biðlara og könnum hvernig það bregst við þeim.
  • Smoke Signals: Við skoðum samskipti milli biðlara og þjóns þegar skilaboðasniðið er óþekkt.