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:
- Við könnum skrána með
fileogstringsog opnum hana síðan í bakþýðanda. - Við leitum að netföllum á borð við
socket,bind,listen,accept,connect,recvogsend. - Við finnum hvar skilaboð eru lesin, túlkuð og mynduð.
- 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.