Netkerfi: hvernig tölvur tala saman
Í Linux-kaflanum skoðuðum við hvernig við getum notað skelina til að tala við netið með tólum eins og curl, wget, dig og nc. Í þessum kafla förum við dýpra: hvað er eiginlega að gerast þegar tölvan okkar sendir gögn til annarrar tölvu?
Markmiðið er ekki að læra alla netfræði í einu. Markmiðið er að byggja upp góða mynd í huganum: tölvur senda litla pakka, pakkarnir fara í gegnum nokkur millistig, og báðir endar þurfa að vera sammála um reglur samtalsins.
Hvað er netkerfi?
Netkerfi (e. network) er hópur tækja sem geta send gögn sín á milli. Tækin geta verið fartölvur, símar, þjónur, prentarar, beinar eða nánast hvað sem er.
Í einfældustu mynd:
Tölvan þín ─── beinir ─── önnur tölva
Í raunveruleikanum er þetta oft flóknara, en grunnmyndin er sú sama: gögn ferðast frá einum stað til annars.
Gögnin ferðast yfirleitt ekki sem ein risastór sending. Þau eru brotin niður í litla pakka (e. packets). Hver pakki inniheldur hluta af gögnunum og upplýsingar um hvert hann á að fara.
Vissir þú?
Hugmyndin um pakkamiðlun (e. packet switching) var ein af lykilhugmyndunum á bak við internetið. Í stað þess að panta eina fasta línu milli tveggja tölva má senda marga litla pakka sem geta jafnvel farið ólíkar leiðir.
Lög, án þess að gera þau of formleg
Netkerfi eru oft útskýrð með „lögum“ (e. layers). Við þurfum ekki að læra formlegt líkan strax, en hugmyndin er gagnleg: hvert lag leysir eitt afmarkað vandamál.
Hugsum þetta eins og að senda pakka í pósti:
| Lag | Spurning | Dæmi |
|---|---|---|
| Vír/Wi‑Fi | Hvernig fara bitarnir milli næstu tveggja tækja? | Ethernet, Wi‑Fi |
| Staðarnet | Hvernig tölum við við tæki nálægt okkur? | tölvan þín ↔ beinirinn |
| Internetlag | Hvert á pakkinn að fara í heiminum? | IP-tölur |
| Flutningslag | Hvernig tala tvö forrit saman? | TCP eða UDP |
| Forritalag | Hvaða reglur notar samtalið sjálft? | HTTP, DNS, SSH |
Þegar þú skrifar:
curl https://example.com
þá sérðu bara eina skipun. Á bak við tjöldin vinna samt mörg lög saman: DNS finnur vistfangið, TCP býr til tengingu, TLS dulkóðar ef notað er HTTPS, HTTP biður um síðuna og IP sér um að koma pökkum milli staða.
Við tökum þetta í skrefum
Það er eðlilegt að þetta virðist flókið fyrst. Við byrjum á stóru myndinni og notum svo skipanir til að sjá litla hluta af henni í verki.
Staðarnet og internetið
Staðarnet (e. local area network, LAN) er net sem nær yfir lítið svæði: heimili, skólastofu eða skrifstofu. Tölvan þín, síminn þinn og prentarinn heima eru líklega á sama staðarneti.
Internetið er risastórt net netkerfa. Það tengir saman staðarnet, þjónustuver, gagnaver, háskóla, fyrirtæki og heimili út um allan heim.
Heimanetið þitt ── netþjónustuaðili ── mörg önnur net ── þjónn úti í heimi
localhost: tölvan sjálf
Sérstaka nafnið localhost merkir „þessi sama tölva“. IP-talan er oftast:
127.0.0.1
Þegar við keyrum lítinn vefþjón á eigin tölvu erum við að tala við forrit á sömu vél, án þess að fara út á internetið.
Að skoða eigin vistföng
Á Linux má skoða netviðmót og IP-tölur með:
ip addr
Úttakið getur verið langt. Leitaðu að línum sem innihalda inet. Þær sýna IPv4-tölur.
ip addr | grep inet
Prófaðu: finndu localhost
Notaðu ip addr til að finna 127.0.0.1.
Lausn
ip addr | grep 127.0.0.1
IP-tölur, lén og tengi
IP-tala (e. IP address) er vistfang tölvu á neti. Dæmi:
93.184.216.34
En við menn viljum frekar muna nöfn eins og:
example.com
Þess vegna notum við DNS: kerfi sem þýðir lén yfir í IP-tölur.
dig +short example.com
Tengi: hvaða dyr?
Ein tölva getur keyrt mörg netforrit í einu: vefþjón, SSH-þjón, gagnagrunn o.s.frv. Tengi (e. port) segir hvaða forrit eða þjónustu við viljum tala við.
Tengi er tala frá 0 upp í 65535. Hún er ekki líkamleg hurð, heldur númer sem stýrikerfið notar til að koma gögnum til rétta forritsins.
Hugsum okkur fjölbýlishús:
- IP-talan er heimilisfang hússins.
- Tengið er íbúðarnúmerið.
- Forritið sem hlustar á tenginu er íbúinn sem tekur á móti póstinum.
127.0.0.1:8000
│ └── tengi
└───────── IP-tala
Algengar tengi
Sumar tengi eru hefðbundnar (e. well-known ports). Vefþjónar nota oft 80 fyrir HTTP og 443 fyrir HTTPS.
| Tengi | Algeng þjónusta |
|---|---|
22 |
SSH |
53 |
DNS |
80 |
HTTP |
443 |
HTTPS |
IP + tengi
IP-talan segir hvaða tölvu við viljum tala við. Tengið segir hvaða þjónustu á þeirri tölvu við viljum tala við.
Hopp: leiðin milli tölva
Pakkar fara oft í gegnum mörg millistig áður en þeir komast á áfangastað. Hvert millistig er oft kallað hopp (e. hop).
Skipunin traceroute reynir að sýna þessi hopp:
traceroute example.com
Þú gætir séð eitthvað á þessa leið:
1 beinir.local
2 10.0.0.1
3 netthjonusta.is
4 ...
Hver lína er eitt skref á leiðinni. Stjörnur (* * *) þýða oft að tæki á leiðinni svaraði ekki mælingunni. Það er algengt og þýðir ekki endilega að eitthvað sé bilað.
ping: svarar einhver?
ping sendir litla spurningu og bíður eftir svari:
ping -c 4 example.com
Þetta sýnir hvort svar berst og hversu langan tíma það tók.
Ping segir ekki alla söguna
Ef ping svarar ekki getur vefsíða samt verið í lagi. Sum net og þjónar hunsa ping. Ef ping svarar, þá vitum við samt að einhver leið er til baka frá hinum endanum.
Samskiptareglur: reglur samtalsins
Samskiptareglur (e. protocols) eru samkomulag um hvernig gögn eru send og túlkuð.
Þær svara spurningum eins og:
- Hver byrjar samtalið?
- Hvernig lítur beiðni út?
- Hvernig lítur svar út?
- Hvernig vitum við að skilaboð séu búin?
- Hvað gerum við ef eitthvað vantar eða kemur í rangri röð?
Við notum samskiptareglur alls staðar, líka í daglegu lífi. Símtal hefur reglur: einhver segir „halló“, hinn svarar, fólk skiptist á að tala, og að lokum er kvatt. Ef báðir tala stöðugt í einu verður samtalið erfitt. Netforrit þurfa svipaðar reglur.
TCP og UDP
Tvær mjög algengar leiðir fyrir forrit til að senda gögn eru TCP og UDP.
TCP: tengt og áreiðanlegt
TCP (e. Transmission Control Protocol) býr til tengingu milli tveggja forrita. Það reynir að tryggja að gögn berist í réttri röð og að týndir bitar séu sendir aftur.
Góð líking: símtal.
- Fyrst er tenging búin til.
- Báðir endar geta sent og tekið við.
- Gögnin koma sem samfelldur straumur.
- TCP sér um röð og endursendingar.
HTTP, SSH og margt annað notar TCP.
UDP: stök skeyti
UDP (e. User Datagram Protocol) er einfaldara. Það sendir stök skeyti, oft kölluð gagnaskeyti (e. datagrams), án þess að búa fyrst til langa tengingu.
Góð líking: póstkort.
- Þú sendir skeyti.
- Það er ekki tryggt að það berist.
- Það er ekki tryggt að skeyti berist í sömu röð.
- Það er lítið aukakerfi, svo það getur verið hratt og einfalt.
DNS notar oft UDP, sérstaklega fyrir stuttar fyrirspurnir.
| Eiginleiki | TCP | UDP |
|---|---|---|
| Tengir fyrst? | Já | Nei, ekki á sama hátt |
| Röð gagna tryggð? | Já | Nei |
| Endursendir týnd gögn? | Já | Nei |
| Algeng notkun | HTTP, SSH | DNS, streymi, leikir |
UDP er ekki „verra“ TCP
UDP er einfaldara, en það er ekki gagnslaust. Stundum er betra að fá nýjustu gögn fljótt en að bíða eftir gömlum gögnum sem týndust. Þess vegna er UDP mikið notað í rauntímakerfum.
DNS: dæmi um samskiptareglur yfir UDP
DNS er gott dæmi um samskiptastaðal. Þegar við spyrjum:
dig +short example.com
sendir tölvan DNS-fyrirspurn. Hún spyr í grófum dráttum: „Hvaða IP-tala tilheyrir example.com?“ DNS-þjónn svarar með einni eða fleiri IP-tölum.
DNS getur líka flett upp öðrum tegundum gagna:
* A: IPv4-tala.
* AAAA: IPv6-tala.
* MX: póstþjónar fyrir lén.
* TXT: textaupplýsingar tengdar léninu.
HTTP: dæmi um samskiptareglur yfir TCP
HTTP er samskiptareglan sem vefurinn byggir á. Þegar vafri sækir vefsíðu sendir hann HTTP-beiðni og fær HTTP-svar.
Skoða HTTP með curl
curl -i https://example.com
-i lætur curl sýna bæði hausa og innihald.
HTTP/2 200 OK
Content-type: text/html
... sjálf síðan ...
Hausarnir eru lýsigögn um svarið. Tóma línan skilur hausana frá sjálfu innihaldinu.
Hvernig vitum við hvort vandinn sé DNS, tenging eða samskiptareglur?
Þegar eitthvað virkar ekki er gott að spyrja í skrefum:
- Get ég flett upp nafninu?
dig +short example.com. Ef það virkar ekki er vandinn líklega DNS. - Svarar tölvan?
ping example.com. Ef engin svör berast gæti tölvan verið niðri eða lokuð. - Er tengið opin?
nc -zv example.com 443. Þetta athugar hvort hægt sé að búa til tengingu á tiltekna tengi. - Fæ ég svar frá forritinu?
curl -v https://example.com. Sýnir nákvæmlega hvað gerist í samtali forritanna.
Hvað annað er gott að vita?
IPv4 og IPv6
Þú munt sjá tvær tegundir IP-talna:
* IPv4: 93.184.216.34 (hefðbundnar fjögurra talna runur).
* IPv6: 2606:2800:220:1:248:1893:25c8:1946 (lengri runur með bókstöfum).
IPv6 var búið til vegna þess að heimurinn þurfti miklu fleiri vistföng en IPv4 gat boðið upp á.
Einkavistföng og Netnúmerstúlkun (NAT)
Á staðarnetum sérðu oft IP-tölur sem byrja á 192.168.x.x eða 10.x.x.x. Þetta eru einkavistföng (e. private addresses).
Netnúmerstúlkun (e. Network Address Translation, NAT) er aðferð þar sem heimabeinir lætur margar tölvur á staðarneti deila einni opinberri IP-tölu út á internetið. Þetta er eins og ef mörg herbergi á hóteli deildu sama póstkassanum niðri í móttöku.
Vissir þú?
Táknið fyrir pípu (|) er oft kallað „lóðrétt strik“ (e. vertical bar). Á mörgum lyklaborðum er það staðsett vinstra megin við Z eða við hliðina á Enter. Í Bash er þetta tákn bókstaflega galdrastafur sem gerir tölvunni kleift að vinna eins og færiband í verksmiðju.
Smá samantekt
Eftir þennan kafla ættirðu að geta:
- útskýrt muninn á staðarneti og internetinu,
- sagt í grófum dráttum hvað pakkar, IP-tölur, lén og tengi eru,
- notað
pingeðatraceroutetil að skoða leiðir, - útskýrt muninn á TCP og UDP,
- útskýrt hvað samskiptareglur eru og af hverju þær skipta máli,
- notað
curl,digognctil að sjá þessi hugtök í verki.