Rakenduskihi protokollid
Eelmises praktikumis vaadeldud marsruutimine moodustab vundamendi, mille peale on ehitatud rakenduskihi protokollid. Rakenduskihi protokollid on need, mis panevad võrgu tegema reaalselt midagi kasulikku. Praktikumis vaatleme järgmisi protokolle:
- DNS (domain name system) - nimede teisendamine IP-aadressideks
- HTTP (hypertext transfer protocol) - veeb
- SMTP (simple mail transfer protocol) - e-mail
Töö toimub Ubuntus.
DNS (domain name system)
Võrgukihi tasemel toimub kõikide arvutite adresseerimine IP-aadressidega. Hulga numbrite nagu 193.40.5.67 ja 213.168.24.212 meelespidamine on inimese jaoks tülikas. Selle lahenduseks ongi välja mõeldud nimesüsteem, mis võimaldab vastavate arvutite poole pöörduda nimedega mail.ut.ee või www.postimees.ee.
Staatilised nimed
Algne viis nimedega teiste arvutite poole pöördumiseks oli kirjutada kõik teadaolevad nimed ja aadressid /etc/hosts
faili (Windowsi all C:\Windows\System32\drivers\etc\hosts
). Näiteks kirjuta sellesse faili järgmine rida:
193.40.5.73 www.libaeenet.ee
Nüüd avaneb Veebilehitsejas (näiteks Firefoxis) www.libaeenet.ee nime alt www.delfi.ee lehekülg (küll vigadega, aga sellest allpool). Hosts faili ülekirjutamist kasutavad mõned viirused ja pahavarad, selleks et tuntud lehekülgi (nt www.swedbank.ee) suunata oma serverisse.
Nimelahendus
Kõikide maailma arvutite ülesloetlemine hosts failis pole reaalne. Seetõttu DNS ongi protokoll, mille abil on võimalik serveri käest küsida nimele vastavat IP-aadressi. Nimele vastava IP-aadressi leidmist kutsutakse nime lahendamiseks (resolving a name, name resolution), vastavat serverit nimeserveriks. Süsteemi nimeserveri aadress on seadistatud failis /etc/resolv.conf
.
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 127.0.1.1 search lan
Nimeserveri enda aadress tuleb loomulikult anda IP-aadressina, mitte nimena. Antud juhul on Ubuntus seadistatud nimeserveriks arvuti ise, mis edastab päringud tegelikule nimeserverile. Seadistus search
määrab ära domeeni, mida püütakse liita lahendatava nime lõppu, kui esialgse nime lahendamine ei õnnestu.
Nimelahenduse testimiseks on käsk nslookup
:
tambet@tambet-VirtualBox:~$ nslookup www.ut.ee Server: 127.0.1.1 Address: 127.0.1.1#53 Non-authoritative answer: Name: www.ut.ee Address: 193.40.5.73 Name: www.ut.ee Address: 2001:bb8:2002:500::42
DNS süsteemis on võimalik nime tähistada ka aliasena, st lahendada nimi samaks IP-aadressiks, nagu see teine nimi.
tambet@tambet-VirtualBox:~$ nslookup mail.ut.ee Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: mail.ut.ee canonical name = mailhost.ut.ee. Name: mailhost.ut.ee Address: 193.40.5.66 Name: mailhost.ut.ee Address: 193.40.5.67
Antud vastus ütleb, et mail.ut.ee kanooniline nimi (põhinimi) on mailhost.ut.ee ja mailhost.ut.ee-l on kaks võimalikku aadressi: 193.40.5.66
ja 193.40.5.67
. Nendest võib kasutada ükskõik kumba, mitme aadressi omistamist samale nimele kasutatakse koormuse jaotamise eesmärgil. Vaata näiteks, mitu IP-aadressi on www.delfi.ee
-l!
Nimekirjed
DNS andmebaasis hoitakse lisaks IP-aadressidele ka mitmesugust muud infot domeenide kohta:
- A
- nimele vastav IP-aadress
- NS
- domeeni nimeserver
- CNAME
- tegemist on aliasega, tuleb lahendada samamoodi nagu see teine nimi (kanooniline nimi)
- MX
- domeeni meiliserver (mail exchanger)
- TXT
- vaba tekstiline kirjeldus
- SPF
- spämmi vastu võitlemise reeglid
Täieliku nimekirja DNS kirjete tüüpidest leiab siit.
Näiteks domeeni meiliserveri küsimine nslookup
-ga interaktiivses režiimis saab toimuda nii ( NB! sisesta ainult domeen ilma www
või mõne muu prefixita) :
tambet@tambet-VirtualBox:~$ nslookup > set type=MX > server 193.40.0.12 Default server: 193.40.0.12 Address: 193.40.0.12#53 > ut.ee Server: 193.40.0.12 Address: 193.40.0.12#53 Non-authoritative answer: ut.ee mail exchanger = 10 frida.it.da.ut.ee. ut.ee mail exchanger = 10 berta.it.da.ut.ee. Authoritative answers can be found from: ut.ee nameserver = ns2.ut.ee. ut.ee nameserver = ns.ut.ee. ut.ee nameserver = ns2.EENet.ee. berta.it.da.ut.ee internet address = 193.40.5.141 berta.it.da.ut.ee has AAAA address 2001:bb8:2002:500::141 frida.it.da.ut.ee internet address = 193.40.5.80 frida.it.da.ut.ee has AAAA address 2001:bb8:2002:500::80 ns.ut.ee internet address = 193.40.5.99 ns2.ut.ee internet address = 193.40.5.76 ns2.ut.ee has AAAA address 2001:bb8:2002:500::76 > exit
või käsurea parameetritena
nslookup -type=mx ut.ee 193.40.0.12
Eelnevast võib välja lugeda, et ut.ee domeeni ametlikud meiliserverid on frida.it.da.ut.ee
ja berta.it.da.ut.ee
, kusjuures frida
ja berta
mõlemad on prioteediga 10. Allpool olevad kirjed tähistavad ut.ee domeeni nimeservereid, kelle käest saab autoriteetse (lõpliku, kindla) vastuse päringule, sest praegune vastus on vahendatud mõne teise serveri poolt.
Lõpetuseks - eelnevas kasutasime DNS-i testimiseks nslookup
käsku, kuna see on olemas ka Windowsis. Linuxis on veidi kompaktsema väljundiga samaväärsed käsud host
ja dig
.
Ülesanne 1
Lisa oma praktikumi wikileheküljele ekraanivaated:
- oma lemmikveebilehe IP-aadress(id)
- vastava domeeni meiliserver(id) (
MX kirje
) - eelmises punktis leitud vähemalt ühe meiliserveri IP-aadress.
TCP (transmission control protocol)
Kui DNS põhines paketipõhisel UDP transpordiprotokollil, siis järgnevad protokollid on voopõhised ja baseeruvad TCP transpordiprotokollil. Voopõhine protokoll tähendab seda, et tegemist on justkui toruga kahe arvuti vahel, kus ühest otsast lükkad andmeid sisse ja teisest võtad välja. TCP tegeleb andmevoo jagamisega pakettideks, nende ärasaatmise ning teises otsas õiges järjekorras kokkupanemisega.
Et kahe arvuti vahel saaks olla rohkem kui üks ühendus, tuleb neid kuidagi eristada. Selleks kasutatakse pordi mõistet. Serveri teenustel on kindlaksmääratud numbritega pordid, nt http on 80, https 443, smtp 25, ssh 22 jne. Kõikide teenuste nimekirja koos neile vastavate portide numbritega leiab /etc/services
failist.
NB! Antud port tähistab serveri porti, klient võib serveriga ühenduda mis tahes pordilt! Ühe serveri pordiga võib olla mitu ühendust mitmest erinevast arvutist või ka mitmest sama arvuti erinevast pordist, st unikaalne peab olema komplekt <serverarvuti aadress, serverarvuti port, klientarvuti aadress, klientarvuti port>.
Aktiivsete võrguühenduste nimekirja näitab käsk netstat
. Seda pole tänapäeval enam vaikimisi installitud, seega netstati saamiseks paigaldage pakk net-tools
:
sudo apt install net-tools
Alternatiivina võib kasutada ka programmi ss
, mis on tänapäeval netstati asendajaks - süntaks on sama, väljund erineb veidi paigutuselt. Näiteks võite kasutada käske ss -tr
või ss -trpi
.
Näiteks kõiki aktiivseid TCP ühendusi (-t
võti tähistab TCP-d ja -n
asendab nimekuju numbrilise kujuga (IP-dega)) saab vaadata nii:
tambet@tambet-VirtualBox:~$ netstat -t -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 1 0 tambet-VirtualBox:36298 185.31.17.185:http CLOSE_WAIT tcp 1 0 tambet-VirtualBox:45682 185.31.17.184:http CLOSE_WAIT tcp 1 0 tambet-VirtualBox:36300 185.31.17.185:http CLOSE_WAIT tcp 1 0 tambet-VirtualBox:45684 185.31.17.184:http CLOSE_WAIT tcp 1 0 tambet-VirtualBox:45679 185.31.17.184:http CLOSE_WAIT tcp 28 0 tambet-VirtualBox:50036 productsearch.ubu:https CLOSE_WAIT tcp 1 0 tambet-VirtualBox:45680 185.31.17.184:http CLOSE_WAIT
Millistel portidel võetakse vastu serveripoolseid ühendusi (-l võti tähistab kuulatavaid (listen) porte):
tambet@tambet-VirtualBox:~$ netstat -tl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 tambet-VirtualBo:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 localhost:smtp *:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN tcp6 0 0 ip6-localhost:smtp [::]:* LISTEN
Käsk telnet
loob kõige puhtamal kujul TCP ühenduse etteantud pordiga ja võimaldab TCP-põhiseid teenuseid lihtsasti testida.
Ülesanne 2
Loo teises terminali aknas ühendus courses.cs.ut.ee serveriga käsuga telnet courses.cs.ut.ee 80
. Pane oma wikilehele ühenduse kliendipoolse pordi number (vihje: local address) ja vastav netstat
käsu väljund (ekraanivaatena).
Telnetist saab välja, kui vajutada eesti paigutusega klaviatuuril Ctrl+AltGr+], seejärel Enter
ja siis sisestada quit
.
HTTP (hypertext transfer protocol)
HTTP on protokoll veebilehtede (hüperteksti dokumentide) ja nendega seotud failide allalaadimiseks Internetist. Lihtsaim HTTP päring on järgmine (päisekäskude sisestamise järel vajuta veel korra Enter
nuppu, kuna nende käskude saatmiseks peab päise järel olema tühi rida):
GET / HTTP/1.1
- GET - tähistab siin meetodit, et soovime saada (alla laadida) dokumenti. Alternatiivid on POST, HEAD, DELETE jne, aga neid detaile me siin ei vaata.
- / - dokumendi või faili teekond, antud juhul juurkataloog. (Väärtus peaks olema
/alamleht
kui on soov mingit alamlehekülge pärida) - HTTP/1.0 - kliendi poolt toetatud protokolli versiooni tähis, võib olla ka uuem HTTP/1.1.
Kui seda käsklust rakendada www.eenet.ee peal, siis saame järgmise tulemuse:
tambet@tambet-VirtualBox:~$ telnet www.eenet.ee 80 Trying 193.40.0.131... Connected to www.eenet.ee. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.1 302 Found Date: Mon, 04 Dec 2017 07:34:35 GMT Server: Apache Location: http://www.eenet.ee/EENet/ Content-Length: 272 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="http://www.eenet.ee/EENet/">here</a>.</p> <hr> <address>Apache Server at www.eenet.ee Port 80</address> </body></html> Connection closed by foreign host.
Vastuse esimene rida
- HTTP/1.1 - serveri protokolli versioon.
- 302 - ümbersuunamise kood, teisi koode vaata siit.
- Moved Permanently - päringu staatuse tekstiline kirjeldus.
Järgnevatel ridadel on päised kujul nimi: väärtus
, millele järgneb tühi rida ning siis dokumendi sisu ise. Päised annavad mitmesugust metainfot serveri ja dokumendi kohta, nt serveris kasutatav tarkvara, dokumendi tüüp, dokumendi suurus, viimase muutmise aeg jne.
Antud juhul on dokument ühe lingiga HTML ümber suunamiseks neile veebilehitsejatele, mis päises olevat ümber suunamist ignoreerivad. Ümbersuunamise põhjuseks on see, et server ei ole päris kindel, et me pöördume www.eenet.ee poole - samalt IP-aadressilt võidakse serveerida mitmeid veebilehti. Korrektse vastuse saamiseks tuleb päringule lisada Host:
päis, mis määrab veebiserveri nime. Lisaks pange tähele URLi kohalikku osa /EENet/
.
tambet@tambet-VirtualBox:~$ telnet www.eenet.ee 80 Trying 193.40.0.131... Connected to www.eenet.ee. Escape character is '^]'. GET /EENet/ HTTP/1.0 Host: www.eenet.ee HTTP/1.1 200 OK Date: Mon, 04 Dec 2017 07:35:47 GMT Server: Apache Set-Cookie: etomite_avalikharu_web=80tin3ba0nrr6vmc2nl30tpq66; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Connection: close Content-Type: text/html; charset=UTF-8 <!DOCTYPE html> ... </html>Connection closed by foreign host.
Tulemuseks ongi see HTML dokument, mida veebibrauser näitab.
Ülesanne 3
- Lisa oma wikilehele ekraanivaade, millist serveritarkvara kasutab sinu lemmikveebilehe server. Kui veebileht
Server:
päist ei väljasta, siis proovi mõnda teist serverit. Pane tähele, et osad populaarsed serverid suunavad kasutaja automaatselt ümberhttps
URL-idele, mis kasutavad krüptograafiat ja pole käsitsi telneti abil kasutatavad. Sellisel juhul on vastus301 Moved Permanently
ka piisav vastus kuiServer:
päise rida on siiski olemas - Tee telnetiga päring http://www.eenet.ee/sinunimi (vihje: vaata juhendis näidete 1 ja 2 erinevust). Selleks tuleb kõigepealt sisestada käsk telnet www.eenet.ee 80 ja siis teha vastav päring koos
Host:
päisega. Lisa oma wikilehele päringu logi (ekraanivaade), vastuse kood (vihje:Not Found) ja selgitus eesti keeles, mida see kood tähendab. NB! GET päringu vastus ei tohi olla400 Bad Request
.
SMTP (Simple Mail Transfer Protocol)
PS! Antud ülesannet saate teha ainult ülikooli võrgust (kaabliga ühendatuna, eduroam (ühiselamu eduroam ei sobi) või Andmeturve wifist) (ut-public
ja ühiselamute eduroam
ei ole sobiv). Väljastpoolt TÜ sisevõrku võite luua kõigepealt ssh
ühenduse math.ut.ee
serveriga siis seal vastavad tegevused sooritada, aga see ei ole nii efektne kui TÜ sisevõrgust, sest SSH ühendust luues küsitakse teilt autentimist (TÜ sisevõrgus mitte), samas võimaldab see siiski teil tegevuse edukalt ära sooritada.
SMTP on protokoll meili saatmiseks. SMTP protokolli port on 25. Ühendus tuleks luua selle arvutiga, mis on märgitud DNS-s e-maili saaja domeeni meiliserveriks. Tavaliselt jõuab e-mail kohale ka siis, kui võtta ühendust suvalise koduvõrgu SMTP serveriga, nt mail.ut.ee või mail.neti.ee - sel juhul need serverid vahendavad (relay) e-maili õigele serverile (kui neil vahendamine lubatud on). Tüüpiline meili saatmise sessioon näeb välja järgmine:
tambet@tambet-VirtualBox:~$ telnet mail.ut.ee 25 Trying 193.40.5.67... Connected to mailhost.ut.ee. Escape character is '^]'. 220 smtp2.it.da.ut.ee ESMTP Postfix HELO minasiin 250 smtp2.it.da.ut.ee MAIL FROM:<eesnimi.perenimi@gmail.com> 250 2.1.0 Ok RCPT TO:<alo.peets@ut.ee> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> From: Eesnimi Perenimi <eesnimi.perenimi@gmail.com> To: Alo Peets <alo.peets@ut.ee> X-Mailer: telnet Subject: e-maili test Content-Type: text/plain; charset=UTF-8 Näe, test töötabki. . 250 2.0.0 Ok: queued as 3434E73E7C9 QUIT 221 2.0.0 Bye Connection closed by foreign host.
Käskude selgitused:
- HELO
- sesiooni algust tähistav käsk, parameetriks klientarvuti nimi, praktikas nime sageli ignoreeritakse, kuid vahel nõutakse et see peab DNS mõttes lahenduv nimi olema.
- MAIL FROM
- parameetriks saatja meiliaadress.
- RCPT TO
- parameetriks saaja meiliaadress.
- DATA
- järgneb meili sisu - kõigepealt päised, siis tühi rida ja meili tekst. Lõpetamiseks punkt eraldi real.
- QUIT
- lõpetab sessiooni.
Päised:
To:
saaja aadress,From:
saatja aadress,Subject:
määrab e-maili teema,Content-Type:
ütleb, et tegemist tavalise tekstilise e-mailiga (vastandina HTML e-mailile), milles täpitähed on UTF-8 kodeeringus.
Silma torkab, et nii saatja kui saaja aadressi on topelt - nii MAIL FROM/RCPT TO käsus, kui ka From/To päistes. MAIL FROM/RCPT TO moodustavad kirja "ümbriku" (envelope). RCPT TO on e-maili tegelik saaja, To:
päises on esialgne saaja, nt listi puhul listi e-maili aadress. Praktikas meiliserver päiseid ei vaata vaid juhindub ainult ümbrikuaadressidest. Ja vastupidi - meilide lugemise programm ei tea midagi ümbrikuaadressidest. Nii on võimalik pimekoopia saatmine - pimekoopia saaja on ümbrikus saajana kirjas, aga päistes teda pole.
Nagu näha, ei nõua SMTP oma algsel kujul mitte mingit tõestust, et sul on õigus saatja nimel e-maili saata. See teebki lihtsaks e-maili ärakasutamise spämmerite ning viiruste poolt. Selle vastu võitlemiseks rakendatakse mitmesuguseid piiranguid:
- IP-aadresside piiramine, kust on SMTP ühendused lubatud (nt mail.neti.ee lubab ainult Elioni aadressiruumist).
- kasutajanime ja parooli ning krüpteeritud ühenduse (SSL/TLS) nõudmine (mitmed veebimajutusteenuse pakkujad).
- SPF reeglid DNS-s, mis loetlevad, millistelt IP-aadressidelt on lubatud antud saatja aadressiga e-maile saata.
- DKIM - e-mailide allkirjastamine serverile teadaoleva privaatse võtmega, mille avalik võti on DNS-s.
Ülesanne 4
Saada iseenedale telnetiga e-mail praktikumijuhendaja nimel, pane saatjaks <praktikumijuhendaja_e-mail@ut.ee>
ja lisa päisesse X-Mailer:
rida väärtusega telnet
. E-mail peab sisaldama korrektset teemarida (pealkiri) ja täpitähti. Lisa aruandesse pilt enda postkasti saabunud praktikumijuhendaja kirjast koos vaikimisi peidetud X-Mailer:
reaga (vihje: meilikliendis Gmail settings näita algset, Show original). Kui on probleem ülikooli võrguga ühendumisel võite luua kõigepealt ühenduse math.ut.ee
serveriga siis seal e-maili koostada ja saata.
- Rühm 1,2,3,8 - alo.peets@ut.ee
- Rühm 4,6,7 - lauri.ratsep@ut.ee
- Rühm 5,10 - ott.oopkaup@ut.ee
- Rühm 9 - rasmus.soome@ut.ee
Tulemus
14. Praktikum 14 - Rakenduskihi protokollidAega esitamiseks 2 nädalat