Vyšlo v týdeníku Computerworld č. 45/92 v roce 1992
Vytištěno z adresy: http://www.earchiv.cz/a92/a245c110.php3

Jména v TCP/IP sítích - II.

V minulém dílu jsme se zabývali otázkou symbolických jmen počítačů a bran v TCP/IP sítích a dospěli jsme k tomu, jakým způsobem se přidělují doménová jména v Internetu. Nyní se budeme věnovat otázce, jak na základě symbolických jmen získávat odpovídající IP adresy.

Připomeňme si ještě jednou, že otázku doménových jmen v TCP/IP sítích řeší standard DNS (Domain Name System), který má dvě základní části: první z nich určuje syntaxi doménových jmen a pravidla pro delegování pravomoci a odpovědnosti za jejich přidělování, zatímco druhá část se týká implementace mechanismu pro převod doménových jmen na jim odpovídající IP adresy.

Obrázek 52.1.
Obr. 52.1.: Část adresového prostoru doménových jmen
Jestliže pravomoc a odpovědnost za přidělování doménových jmen je distribuována na jednotlivé domény a subdomény, je vcelku přirozené očekávat, že také mechanismus pro převod těchto doménových jmen na IP adresy bude obdobně distribuován - že bude tvořen soustavou vzájemně spolupracujících částí, nazývaných servery jmen (name servers), jejichž uspořádání bude odrážet hierarchickou strukturu domén a subdomén. Základní myšlenka takovéhoto řešení je založena na tom, že s každou doménou a subdoménou bude spojen prostředek (zmíněný server jmen), který všechna jména z příslušné domény či subdomény buď umí převést sám, nebo alespoň zná jiný server jmen, který to dokáže.

Obrázek 52.2.
Obr. 52.2.: První představa struktury serverů jmen
Představme si příklad na obrázku 52.1., který ukazuje malou část adresového prostoru doménových jmen Internetu se třemi doménami nejvyšší úrovně - edu (pro vzdělávací instituce v USA), com (pro komerční instituce v USA), a cs (pro celé Československo), s některými jejich subdoménami. Dále si představme stejně strukturovaný systém serverů jmen pro jednotlivé domény a subdomény dle obrázku 52.2. a předpokládejme, že některý hostitelský počítač potřebuje odeslat zprávu počítači s adresou aviion.mff.cuni.cs. Obrátí se proto nejprve na server jmen domény cs, který jej odkáže na server jmen domény cuni.cs, a ten pak zase na server jmen domény mff.cuni.cs. Ten již je schopen odpovědět na dotaz, jaká je IP adresa počítače aviion.mff.cuni.cs.

Jak je tomu ve skutečnosti

Právě naznačený příklad je samozřejmě dosti zjednodušený, ale jinak dobře vystihuje celkovou filosofii převodu symbolických doménových jmen na IP adresy.

Prvním praktický problém vyvstává hned v okamžiku, kdy je třeba se obrátit na server jmen domény nejvyšší úrovně - každý potenciální tazatel by totiž musel znát adresy serverů jmen všech domén nejvyšší úrovně. Proto se všem těmto serverům nejvyšší úrovně nadřazuje ještě jeden, tzv. kořenový server (root server), a pouze tento kořenový server musí být znám všem potenciálním žadatelům o převod doménových adres. V praxi je tento kořenový server několikanásobně zálohován.

Obrázek 52.3.
Obr. 52.3.: Realističtější představa struktury serverů jmen
Další odlišností skutečné realizace od naší ideální představy je hloubka výsledného stromu serverů jmen, v jehož kořeni je právě zmíněný kořenový server. Jednotlivé servery jmen totiž mohou obsahovat potřebné informace o doménových jménech pro více různých domén a subdomén - velice často totiž různé organizace soustřeďují informace o jménech ze všech svých subdomén v jediném serveru jmen. Kořenový server naopak obsahuje informace i o všech doménách nejvyšších úrovních, takže výsledný strom serverů jmen bývá v praxi mnohem "mělčí" (viz obr. 52.3.), než naše původní představa na obrázku 52.2.

Rekurzivní a iterativní převod

Iniciátorem převodu doménového jména na IP adresu (anglicky: name resolution) je vždy programová entita hostitelského počítače (tzv. name resolver), která vůči celé soustavě serverů jmen vystupuje jako klient. Se svým požadavkem na převod doménového jména se tato entita obrací na některý ze serverů, který může postupovat dvojím způsobem: pokud není schopen převod zajistit, sám se obrátí na jiný server jmen, který převod zajistí, výsledek vrátí prvním serveru, a ten jej pak vrátí původnímu žadateli. Pak jde o tzv. rekurzivní převod (recursive resolution). Alternativou je tzv. iterativní převod (iterative resolution), při kterém dotázaný server jmen buď provede převod sám, nebo pouze vrátí adresu jiného serveru jmen, na který se pak musí žadatel o převod znovu obrátit sám.

Zajímavou otázkou je to, kam se má žadatel o převod obrátit nejprve - zda má začít shora, a obrátit se na kořenový server, nebo má naopak postupovat naopak odspodu, a obrátit se nejprve na "místní" server jmen? Ve prospěch druhé možnosti hovoří hned několik skutečností: kdyby se všichni obraceli přímo na kořenový server, tento by byl brzy zahlcen. Navíc požadavky na převod doménových jmen se nejčastěji týkají právě "místních" jmen, které dokáže převést místní server. Ten je kromě toho schopen fungovat i v případě eventuálního výpadku vyšších vrstev celého stromu name serverů (i když to je vzhledem k jejich zálohování nepříliš pravděpodobné).

Použití vyrovnávacích pamětí (caching)

Kdyby se každý hostitelský počítač musel obracet na soustavu serverů jmen pokaždé, kdy potřebuje převést některé doménové jméno na jemu odpovídající IP adresu, byla by to pro celou síť neúnosně velká zátěž. Pro zefektivnění celého mechanismu převodu se proto počítá s tím, že hostitelské počítače si po určitou dobu pamatují výsledky dříve uskutečněných převodů. Každý hostitelský počítač si proto bude udržovat ve vhodné vyrovnávací paměti (paměti cache) databázi symbolických jmen a jim odpovídajících IP adres. Aby tuto svou databázi udržel v konzistentním stavu, odpovídajícím skutečnosti, bude každá položka této databáze "zastarávat" - po určité době ztratí svou platnost, a příslušný převod bude muset být v okamžiku potřeby vyvolán znovu.

Podobně postupují i servery jmen. Kromě doménových jmen, které jsou schopny (přesněji: oprávněny) převádět samy, se při rekurzivních převodech dozvídají i odpovídající IP adresy k jiným doménovým jménům. Také ty si udržují ve své vyrovnávací paměti, a v případě žádosti o převod je mohou poskytnout - ovšem s poznámkou, že nejsou k jejich převodu kompetentní (tj. že jde o tzv. neautoritativní (nonauthoritative) převod). Současně s tím poskytnou žadateli o převod i odkaz na ten server jmen, který je k převodu kompetentní. Iniciátor převodu pak naloží s touto informací podle vlastního uvážení. Jde-li mu o rychlost, použije tento neautoritativní převod, jde-li mu naopak o spolehlivost, obrátí se na příslušný server jmen, který je pro daný převod kompetentní.

Ještě většího zefektivnění celého mechanismu převodu doménových jmen na IP adresy lze pak dosáhnout tím, že jednotlivé hostitelské počítače si v okamžiku svého spuštění vyžádají od místního serveru jmen celou jeho databázi doménových jmen a jim odpovídajících IP adres. Z té pak vychází, a na server jmen se obrací jen při její aktualizaci (po "zastarání" některé položky) či pro její doplnění o nové doménové jméno, jehož odpovídající IP adresa ještě v databázi není.