Domeeninimede lahendamine

Allikas: Kuutõrvaja

Resolver

Nimeserverid moodustavad internetis hajusa, kooskõlaliselt toimiva andmebaasi. Lisaks andmete säilitamisele saab sellesse andmebaasi teha päringuid.

Enamus internetikasutajaid tarvitavad nimesüsteemi andmebaasi koguaeg ise seda selgelt teadvustamata. Kui näiteks kasutaja sisestab brauserisse veebikoha nime, näiteks www.neti.ee, siis esmalt peab brauser saama teada, milline IP-aadress sellele domeeninimele vastab. Reeglina ei tegele rakendusprogrammid nimede lahendamisega vahetult ise, vaid kasutavad selleks spetsiaalset operatsioonisüsteemi koosseisu kuuluvat nimelahendajat ehk resolverit.

Resolver on iseseisev programm või selle osa, mis esitab nimeserverile päringu ning mõistab saadud vastusega midagi peale hakata (näiteks tagada, et brauser seda vastust kasutada saaks).

Üldiselt võib resolver vajaliku vastuse saada ka mujalt (mitte nimeserverilt), kuid seda vaatleme edaspidi. Antud juhul eeldame, et resolver on otsustanud asuda suhtlema nimeserveritega.

Kõige levinumad päringud on sellised, kus resolver saadab nimeserverile päringu domeeninime kohta ning ootab vastuseks domeeninimele vastavat IP-aadressi.

Näiteks sisestades brauseri aadressireale Neti veebikoha aadressi http://www.neti.ee/, pöördub brauser resolveri poole domeeninime www.neti.ee lahendamiseks, mille IP-aadressi on tal andmevahetuseks tarvis. Resolver hakkab suhtlema kliendi arvuti konfiguratsioonis näidatud nimeserveriga ning vastab brauserile nõutud IP-aadressiga.

Protsessi, mille käigus leitakse domeeninimega seotud andmed, näiteks IP-aadress, nimetatakse domeeninime ehk nime lahendamiseks.

Nime lahendamine

Kuna domeeninimede andmebaas on hajus ja jagatud paljude nimeserverite vahel, siis nime lahendamine toimub sammhaaval.

Soovigu resolver lahendada nime kala.tiik.aed.

  1. Resolver saadab kliendi arvuti konfiguratsioonis näidatud nimeserverile vastava päringu.
  2. Kuna kliendi nimeserver ei tea midagi nimest kala.tiik.aed., aga nagu kõik nimeserverid teab ta juurnimeserveri aadressi, siis küsib ta 
     juurnimeserverilt nime kala.tiik.aed. kohta.
  3. Juurnimeserver peab kindlasti teadma domeeni aed. teenindava nimeserveri aadressi ning saadab selle kliendi nimeserverile
  4. Olles saanud teada domeeni aed. nimeserveri aadressi pöördub kliendi nimeserver domeeni aed. nimeserveri poole ja küsib andmeid nime 
     kala.tiik.aed. kohta. Kuna ka see nimeserver ise ei tea midagi kala.tiik.aed. kohta, siis vastab ta domeeni tiik.aed. nimeserveri aadressiga.
  5. Lõpuks, klient küsib domeeni tiik.aed. jaoks pädevalt nimeserverilt nime kala.tiik.aed. kohta ja saab soovitud vastuse.


  juur                 aed.              tiik.aed.
nimeserver          nimeserver          nimeserver
     \                  |                  /
         \              |              /
             \          |          /
                kliendi nimeserver
                        |
                        |
                        |
                     resolver

Nii nagu resolver on kliendiks kliendi nimeserverile, on kliendi nimeserver kliendiks juurnimeserverile ning domeenide aed. ja tiik.aed. nimeserverile. Erinevus on vaid selles, et võrreldes resolveriga onnimeserver teise nimeserveri jaoks suhteliselt intelligente klient.

Oluline on märgata, et resolveri küsimusele peab nimeserver vastama IP-aadressiga. Seesugune päring on rekursiivne, kuna resolveri eest hakkab tegutsama klendi nimeserver.

Kliendi nimeserveri ja teise skeemil kujutatud nimeserverite suhtlemine on aga iteratiine. Kliendi nimeserver küsib nime kala.tiik.aed. kohta, kuid ei saa mitte vastust, vaid viite teisele nimeserverile jne kuni ta jõuab huvipakkuva domeeni jaoks pädeva nimeserverini välja.

Kui nimeserverile tehakse iteratiivne päring, siis peab ta vastama järgmise nimeserveri aadressiga, mis viib domeeninimesüsteemis küsija lähemale teda huvitava tsooni suhtes pädevale nimeserverile. Rekursiivse päringu puhul vastab nimeserver küsitud nimele vastava IP-aadressiga või mitmega, kui nimele vastab mitu aadressi.

Vahelaostamine

Toodud kirjelduse järgi oleks nimesüsteemi toimimine kohmakas, sest iga päringu puhul oleks vajalik pöörduda juurnimeserveri ja kõigi nimeserverite poole kuni huvipakkuva domeeni omani välja. Süsteem muutub efektiivsemaks, kui nimeserverid tehtud päringute käigus saadud andmed oma vaheladudes (ingl. k. cache) alles hoiavad.

Näiteks, kui peale kala.tiik.aed. nime lahendamist küsib resolver järgmisena nimele kahv.tiik.aed. vastavat aadressi, siis selle asemel, et alustada taas juurnimeserverist, otsib kliendi nimeserver esmalt oma vahelaost nime kahv.tiik.aed., seejärel domeeni tiik.aed. nimeserveri aadressi ning leidnud selle, kasutab seda. Kui mitte, siis otsib ta oma vahelaost domeeni aed. nimeserveri aadressi ja kasutab seda ning alles viimases hädas pöördub ta juurnimeserveri poole. Selline järk-järguline ehk lähimate teadaolevate (ingl. closest known) nimeserverite otsimine vähendab juurnimeserverite koormust, kusjuures iga nimeserver otsib ainult oma vahelaost!

Nime lahendamisel antakse alati edasi kogu algselt küsitud nimi. Näiteks, kui resolver küsib kliendi nimeserverilt nime kahv.tiik.aed. kohta, siis ei asu kliendi nimeserver otsima teiste nimeserverite käest domeeni tiik.aed. nimeserverit, vaid küsib kahv.tiik.aed. nime kohta, sest

  1. Kui näiteks kliendi nimeserver leiab oma vahelaost domeeni aed. nimeserveri aadressi, siis on tõenäoline, et tolle nimeserveri vahelaos on juba olemas nimele kahv.tiik.aed. vastav aadress, kuna keegi on palunud domeeni aed. nimeserveril sama nime kahv.tiik.aed. juba lahendada. Esitades muutmata kujul küsimuse edasi, saab kliendi nimeserver sel juhul juba aed. nimeserveri käest vastuse teada. Kui aga kliendi nimeserver soovib jonnakalt küsida vastust domeeni tiik.aed. nimeserverilt otseselt, siis peaks ta esmalt tegema kindlaks domeeni tiik.aed. nimeserveri aadressi ja alles siis saaks hakata esitama päringut. Nii kuluks selleks aga rohkem aega.
  2. Täiesti korrektne on olukord, kus domeen eksisteerib, aga vastavat tsoon mitte. Näiteks nime punane.kahv.tiik.aed. lahendades on ekslik asuda otsima domeeni kahv.tiik.aed. ja vastavat tsooni teenindavat nimeserverit. Sellist nimeserverit ei pruugi leiduda ning nimi on defineeritud tsoonis tiik.aed.

Arusaadavalt ei saa nimeserver hoida oma vahelaos lõputult andmeid. Sel juhul ei kehtestuks domeeninimedes tehtud muudatused. Iga tsooniga on seotud eluaeg (ingl. TTL - time to live) ja ilma uuendamata vahelaos andmeid ei säilitata kauem sellest ajast.


Kui on caja cachest mingit domeeni kaotada nt on tal liiga pikk ttl seatud kuid tahetakse kiiremini rakendada muudatusi siis aitab käsk rndc flushname näiteks

rndc flushname zoo.loomaaed.ee

Kui tsooni eluaeg on liiga pikk, siis kulub kaua aega muudatuste klientideni jõudmiseks. Kui see aeg on aga liiga lühike, siis aegub vaheladu liiga ruttu ja vahelaostamisest ei ole kasu.