Vyšlo v týdeníku Computerworld č. 11/95,
Vytištěno z adresy: http://www.earchiv.cz/a95/a511c504.php3

Ať žije DNS!

Tento článek vyšel v počítačových novinách Computerworld č. 11/95, v rámci tzv. tématu týdne, jako součást série článků věnovaných problematice Internetu.


Jednotné adresy, používané v TCP/IP sítích na úrovni síťové vrstvy - neboli tzv. IP adresy - postačují pro jednoznačnou identifikaci kteréhokoli jednotlivého uzlu, i kterékoli dílčí sítě jako takové. To samozřejmě platí i v rámci celého Internetu, jako soustavy vzájemně propojených dílčích sítí na bázi protokolů TCP/IP. V principu by tedy bylo možné používat tyto adresy univerzálně, i na úrovni vyšších vrstev, například pro potřeby vytváření adres pro elektronickou poštu, pro specifikaci adres uzlů, na kterých se nachází nejrůznější druhy serverů apod. V praxi se tak ale neděje, protože IP adresy mají i některé méně výhodné vlastnosti. Kvůli nim se pak na úrovni vyšších vrstev (a zejména pak na úrovni samotných aplikací a jejich uživatelských rozhraní) používají jiné druhy adres.

Jednou z výrazných nevýhod IP adres je jejich číselný charakter. Ten je "šit na míru" potřebám programů, ale pro člověka je tento číselný tvar málo mnemonický. Schválně, komu by se chtělo pamatovat něco jako 193.84.252.190, 194.50.17.139 apod.? Lidé si mnohem snáze pamatují symbolické zápisy typu frode.dcit.cz nebo kki.ms.mff.cuni.cz.

Další výraznou nevýhodou číselných IP adres je skutečnost, že neříkají vůbec nic ani o fyzickém umístění daného uzlu či sítě, ani o jeho případném začlenění do určité organizační či jiné hierarchie. Poznáte, kde se nachází počítač s IP adresou 194.50.17.139? V Evropě, někde v Americe, či ještě jinde? A komu vlastně patří, jaké organizaci, instituci či firmě? IP adresa vám v tomto ohledu neřekne nic. Symbolický zápis typu kki.ms.mff.cuni.cz už může být sdílnější - alespoň pro toho, kdo zná pravidla jeho tvorby. Takovémuto člověku již může napovědět, že daný počítač by měl být v České republice (podle části "cz"), na pražské Karlově univerzitě (dle "cuni"), na její Matematicko-fyzikální fakultě ("mff"), v budově na Malostranském náměstí ("ms"), a jmenuje se KKI (po dnes již neexistující katedře). Pravidla pro tvorbu výše uvedených symbolických adres, která se dnes používají v rámci Internetu, vůbec nezaručují něco takového, jako v námi použitém příkladu - sledují poněkud jiný cíl, než vypovídat o skutečném umístění či začlenění konkrétního uzlu do organizační či geografické hierarchie. Proto mohou, ale také nemusí vypovídat více, než čistě číselné IP adresy. V každém případě ale jde o adresy symbolického charakteru, které jsou pro člověka mnohem srozumitelnější a snáze zapamatovatelné, než čistě číselné IP adresy. A to je hlavní důvod, proč se na úrovni vyšších vrstev používají takovéto symbolické adresy.

DNS jako převodní mechanismus

Zastavme se nyní podrobněji u techniky přidělování symbolických jmen uzlovým počítačům. Základním požadavkem zde zřejmě bude to, aby i symbolická jména byla stejně jednoznačná (v případě Internetu celosvětově), jako jsou jednoznačné IP adresy. Tomuto požadavku by přitom bylo možné snadno vyhovět, kdyby existovala jednoznačná korespondence mezi symbolickými adresami a číselnými IP adresami. Pak by bylo možné vymyslet a implementovat mechanismus, který by dokázal jednotlivé druhy adres mezi sebou na požádání převádět.

Takovýto mechanismus dnes existuje, a to dokonce s globální působností, pro celý Internet. Jmenuje se DNS, což je zkratkou od anglického Domain Name System (doslova: systém doménových jmen). Jak jsme si již uvedli v prvním tématu týdne o Internetu (v CW 4/95), jeho počátky se datují do roku 1984, kdy vznikl právě z potřeby převádění symbolických adres na adresy číselné a obráceně. Později se ale zjistilo, že systém DNS se velmi dobře hodí i k dalším účelům - například k tomu, aby specifikoval, kam a jakým způsobem má být doručována elektronická pošta pro určitý poštovní uzel apod.

Primární funkcí systému DNS je ale stále převod mezi oběma druhy adres. Tomu, aby takovýto převod byl vůbec v principu možný, však muselo předcházet stanovení určitých pravidel pro tvorbu symbolických adres. Především bylo nutné zabránit tomu, aby docházelo ke globálním kolizím při přidělování symbolických adres - tedy k situacím takového typu, kdy jeden uživatel dá svému počítači určité konkrétní symbolické jméno (např. ALPHA), a tím zabrání komukoli dalšímu, aby svému počítači dal stejné jméno, resp. symbolickou adresu. K tomu by docházelo v případě, kdyby symbolické adresy byly jednosložkové, tj. tvořené jediným symbolickým jménem. Jednosložkové symbolické adresy by mohly být únosné v případě, že by se počty uzlů pohybovaly v desítkách či stovkách, ale jsou zcela nepoužitelné při milionech uzlů Internetu.

Řešení se našlo v použití vícesložkových symbolických adres, neboli takových adres, které jsou složeny z více jednotlivých částí. Pokud se mezi těmito složkami zavedou vhodné vztahy, je možné se účinně vypořádat s nebezpečím kolizí symbolických jmen. Dalším efektem, kterého lze tímto způsobem dosáhnout, je minimalizace nutné koordinace mezi subjekty, které symbolické adresy přidělují. Při současných rozměrech Internetu by bylo zcela nemyslitelné, kdyby se při zavádění nového symbolického jména resp. adresy muselo získávat souhlasné stanovisko jiných subjektů, které také přidělují symbolické adresy.

Hierarchický systém domén

Konkrétní řešení, přijaté pro potřeby systému DNS, spočívá v rozdělení symbolických adres na složky, které odpovídají tzv. doménám. Pod pojmem "doména" je nejlépe si představit organizační subjekt, oprávněný přidělovat nová symbolická jména v rámci přesně definovaného okruhu své působnosti - například v rámci České republiky. Každá takováto doména má své jméno (doména s působností na celou ČR má jméno cz ), a kromě práva přidělovat symbolická jména konkrétním uzlovým počítačům má také právo vytvářet "dceřinné" subjekty a delegovat jim část své pravomoci - neboli právo vytvářet tzv. subdomény, s užším okruhem působnosti než má jejich "mateřská" doména. Například v rámci domény cz takto existují subdomény cuni a dcit (odpovídající Karlově univerzitě a firmě DCIT). Tyto subdomény pak mají obdobné právo vytvářet své vlastní subdomény, a delegovat jim část své pravomoci. Takže například doména cuni (Karlova univerzita) si vytváří další subdomény, odpovídající jednotlivých fakultám (např. doménu mff pro Matematicko-fyzikální fakultu, doménu ff pro Filosofickou fakultu atd.). Obecně tak mohou vznikat celé hierarchicky uspořádané systémy domén a subdomén. Když pak kterákoli z těchto domén přidělí v okruhu své působnosti (jednosložkové) symbolické jméno určitému počítači, vznikne z tohoto jména symbolická adresa (tzv. plně kvalifikované doménové jméno) tak, že se k tomuto jménu zprava postupně připojí jména dané domény a všech jejích nadřízených domén. Ukažme si to na příkladu: když si ve firmě DCIT (vlastnící doménu dcit.cz) koupí nový počítač, a dají mu jméno ALPHA, pak internetová adresa tohoto počítače bude alpha.dcit.cz. Podobně když si na Matematicko-fyzikální fakultě (v budově na Malostranském náměstí, tj. v doméně ms.mff.cuni.cz) pořídí nový počítač, mohou mu dát stejné jméno ALPHA, a s ním pak adresu alpha.ms.mff.cuni.cz. Díky způsobu konstrukce symbolických adres (resp. plně kvalifikovaných doménových jmen) přitom nedochází k žádné kolizi, a žádná z námi uvažovaných domén se nemusí ohlížet na to, jaká jména přiděluje svým počítačům a svým subdoménám jiná doména, na kterékoli úrovni hierarchie domén.

Geografické, nebo organizační členění?

Systém DNS neklade žádná omezení na to, kolik má existovat domén, resp. jak hluboké mají být úrovně jejich hierarchického uspořádání. V tomto ohledu mají konkrétní domény naprostou svobodu. Systém DNS dokonce nepředepisuje ani to, zda domény mají odpovídat organizačnímu, geografickému či ještě jinému členění. Proto není stanoveno například to, čemu mají odpovídat domény nejvyšší úrovně - v dosud uváděných příkladech jsme předpokládali, že odpovídají spíše geografickému členění, a tedy že každý stát by měl mít vlastní "národní" doménu nejvyšší úrovně. Taková skutečně je současná praxe při připojování nových zemí a států k Internetu.

V době, kdy celý systém DNS teprve vznikal, však byla praxe poněkud jiná. Tehdy se zřejmě moc nepočítalo s tím, že by se Internet významněji rozšířil i mimo USA. Proto první domény nejvyšší úrovně, které kdy vznikly, odpovídaly nikoli geografickému uspořádání, ale spíše členění organizačnímu, navíc poplatnému tehdejšímu spektru uživatelů Internetu:

  • doména edu zastřešovala všechny akademické a vzdělávací instituce,
  • doména gov zastřešovala vládní instituce
  • doména mil instituce vojenské
  • doména com zastřešovala vědeckovýzkumné části komerčních organizací, které v té době měly možnost přístupu k Internetu
  • doména net zastřešovala instituce, starající se o provoz Internetu jako sítě, a konečně
  • doména org zastřešovala všechny ostatní organizace, které nebylo možné zařadit pod jiné domény nejvyšší úrovně.
Teprve poté, co se Internet dostal ve větší míře i za hranice USA, začaly vznikat i národní domény nejvyšší úrovně, včetně národní domény Spojených států - domény us. Nadále se však používají i výše uvedené "negeografické" domény, i když prakticky výlučně jen pro organizace, instituce a další subjekty z USA. V souvislosti s otevřením Internetu komerčním organizacím je zcela jistě největší "tlačenice" v doméně com, kde si své subdomény registrují komerční firmy.

Jak funguje DNS

Jak jsme si již uvedli výše, je systém DNS především nástrojem, resp. mechanismem, který má zajišťovat vzájemný převod mezi symbolickými doménovými adresami a číselnými IP adresami. Naznačme si nyní princip, na jakém funguje převod symbolických adres na číselné, který je zdaleka nejčastější. Budeme se přitom pohybovat na úrovni zjednodušené představy, vhodné pro pochopení principu celého mechanismu. Na závěr se pak zmíníme o tom, že praktická implementace je poněkud odlišná, a je uzpůsobená požadavku, aby vše fungovalo dostatečně efektivně.

Základní představou, ze které je vhodné vyjít, je představa o existenci tzv. name serveru pro každou z existujících domén. Pod pojmem "name server" je pak vhodné chápat především subjekt, který zná všechny uzly, kterým byla v rámci dané domény přidělena symbolická jména, a také jím odpovídající číselné IP adresy. Name server (doslova: server jmen) je tedy autoritou, která je oprávněna odpovídat na dotazy typu "jakou IP adresu má uzel frode.dcit.cz?". Každý ovšem jen za svou doménu, pro kterou realizuje funkci name serveru - pokud je dotázán na číselnou adresu uzlu z jiné domény, musí být schopen se obrátit na jiný name server, který by mu měl být schopen pomoci.

Pro jednoduchost si lze představit, že všechny name servery jsou uspořádány hierarchicky do stromu, který přesně kopíruje hierarchii jednotlivých domén. Kořenem tohoto stromu pak je jediný (kořenový) name server, který sice neodpovídá přímo žádné doméně, ale zato zná všechny name servery domén nejvyšší úrovně, a dokáže na ně poskytnout odkazy.

Nyní již se můžeme vrátit k představě toho, jak se postupuje při konkrétním převodu symbolické doménové adresy na číselnou IP adresu. V souladu s obrázkem předpokládejme, že jde o dotaz na IP adresu uzlu frode.dcit.cz. Tazatel by se měl obrátit nejprve na kořenový name server s dotazem na adresu name serveru domény cz. Na tento name server se pak obrátí s dotazem na adresu name serveru domény dcit.cz. Tím se tazatel dostane až k name serveru, který by již měl být způsobilý zodpovědět mu jeho dotaz na IP adresu uzlu frode.dcit.cz.

Teď si ale tuto zjednodušenou představu poněkud upravme. Tím, kdo se dotazuje, může být kterýkoli uzlový počítač. Se svým dotazem se může obrátit v zásadě na kterýkoli name server, o jehož existenci je informován (tj. který zná). Pokud je tento name server oprávněn poskytnout odpověď, učiní tak. Pokud ne, buďto sám zprostředkuje kontakt s oprávněnými name servery ve výše naznačeném smyslu, nebo alespoň poskytne tazateli odkaz na jiný name server, na který se má se svým dotazem obrátit (zde záleží na konkrétní formulaci původního dotazu).

Pro praktické fungování celého systému by však zcela jistě nebylo únosné obracet se s každým jednotlivým dotazem vždy na kořenový name server, a pak postupně na další name servery, dokud se nedojde na takový name server, který je kompetentní k zodpovězení příslušného dotazu. Name servery proto fungují tak, že si po určitou dobu pamatují odpovědi na dotazy, které jim byly předloženy - je totiž velmi pravděpodobné, že je budou moci využít pro zodpovídání dotazů, které jim budou předloženy v blízké budoucnosti. Budou to sice jen tzv. neautoritativní odpovědi, neboli odpovědi od ne zcela kompetentního subjektu, ale pro drtivou většinu situací plně vyhoví. Navíc i tazatel bude informován o případné neautoritativní povaze odpovědi, takže se může sám rozhodnout, jestli se s ní spokojí, nebo zda si vynutí odpověď autoritativní. Poskytování neautoritativních odpovědí je ovšem významným prostředkem pro zefektivnění celého převodního mechanismu, a rozumným kompromisem mezi maximální možnou aktuálností odpovědí na jedné straně, a rychlostí odezvy a režií převodu na straně druhé.

Dalším aspektem, ve kterém se skutečná implementace systému DNS liší od naší zjednodušené představy, je skutečná hierarchie name serverů. Až dosud jsme předpokládali, že přesně kopíruje hierarchii domén, a že pro každou doménu existuje právě jeden name server. V praxi je ale požadováno, aby pro každou doménu existovaly name servery nejméně dva, jeden hlavní a jeden záložní. Přitom name server je především funkce, kterou vykonává určitý konkrétní počítač, a je docela dobře možné, aby jeden a tentýž počítač fungoval jako name server pro více různých domén. Skutečná hierarchie name serverů proto nemusí přesně odpovídat hierarchii domén. Ve skutečnosti je mnohem více "plochá", tak aby při zodpovídání konkrétních dotazů bylo co nejméně postupných kroků. Také jediný kořenový name server, který jsme si v naší zjednodušené představě zavedli, ve skutečnosti neexistuje. Jeho roli plní hned několik kořenových name serverů, které jsou vzájemně zastupitelné, a zčásti i přebírají některé funkce konkrétních name serverů nejvyšší úrovně.

Další funkce systému DNS

Systém DNS se v praxi velmi osvědčil, a stal se jedním ze základních mechanismů, na kterých je založen dnešní obrovský úspěch Internetu. Časem se ale ukázalo, že je možné jej využít i k dalším účelům, než jen ke vzájemným převodům mezi symbolickými a číselnými adresami.

Zajímavé možnosti skýtá například již samotná existence name serverů pro každou jednotlivou doménu. Zatím jsme se na ně dívali jako na výkonné články obrovského soukolí převodního mechanismu, ale stejně tak dobře bychom je mohli považovat za obrovskou distribuovanou databázi, v rámci které jsou pro každou existující doménu uchovávány různé důležité údaje - především IP adresy jednotlivých uzlů. Proč ale nevyužít tuto distribuovanou databázi i k jiným účelům, například pro potřeby elektronické pošty? Zatím ale netušíme, k čemu by to mohlo být dobré - proto si nejprve udělejme malou exkurzi do světa elektronické pošty.

Autor tohoto článku si zvykl přijímat svou elektronickou poštu na počítači frode.dcit.cz, na kterém je veden jako uživatel pet. Jeho adresa pro elektronickou poštu by proto měla být pet@frode.dcit.cz. Pokud by ale počítač se jménem frode v doméně dcit.cz přestal fungovat, nebo by dokonce přestal existovat, musel by autor obeslat všechny, se kterými si koresponduje, a oznámit jim změnu své poštovní adresy. Rozumnější alternativou je používat adresu pet@dcit.cz, která nespecifikuje žádný konkrétní počítač. Má-li však být elektronická pošta na takovouto adresu úspěšně doručována, musí být nějaký konkrétní počítač coby její příjemce určen. Informace o tomto počítači však již není přímou součástí poštovní adresy, ale může být součástí informací, které jsou v rámci systému DNS uchovávány pro doménu dcit.cz na příslušných name serverech. Zde pak může být stanoveno, na který počítač se má přijímat veškerá pošta pro doménu dcit.cz , případně i v závislosti na konkrétních uživatelích - ve smyslu: "poštu pro uživatele pet s adresou pet@dcit.cz posílej na adresu pet@frode.dcit.cz.

Výsledný efekt je pak takový, že když bude chtít uživatel pet přijímat svou poštu na jiném počítači v rámci domény dcit.cz (nebo i jinde), jeho poštovní adresa pet@dcit.cz se nebude měnit, a nebude tedy ani nutné případnou změnu avizovat ostatním uživatelům. Místo toho bude stačit jediná změna v záznamech, které definují způsob doručování pošty v rámci domény dcit.cz.