DNS – Procedura tłumaczenia nazwy domeny

  DNS, Domeny i DNS, Teoria DNS

Dla lepszego zrozumienia procedurę tłumaczenia nazwy domeny na konkretny adres IP (tj. rekord A) zaprezentujemy na przykładzie domeny „www.mff.cuni.cz„. Tłumaczenie rozpoczyna się u podstawy całej hierarchii i polega na pytaniu każdego z węzłów, w którym kierunku powinniśmy kontynuować nasze poszukiwania.  Rozpoczynamy więc u domeny korzeniowej, której autorytatywnymi serwerami DNS są:

  • a.root-servers.net
  • b.root-servers.net
  • c.root-servers.net
  • d.root-servers.net
  • e.root-servers.net
  • f.root-servers.net
  • g.root-servers.net
  • h.root-servers.net
  • i.root-servers.net
  • j.root-servers.net
  • k.root-servers.net
  • l.root-servers.net
  • m.root-servers.net

O obsługę, dostępność i zawartość wymienionych powyżej korzeniowych serwerów DNS dba organizacja ICANN. Nazwy serwerów (a także ich adresy) są wszech obecnie znane, ich listą musi dysponować każde urządzenie w sieci Internet, które chce tłumaczyć nazwy domen (musi na czymś bazować). Wymienione korzeniowe serwery DNS przechowują listę istniejących subdomen (w tym przypadku listę istniejących TLD) wraz z ich autorytatywnymi serwerami DNS. Jeśli, do któregoś z nich wyślemy zapytanie o domenę www.mff.cuni.cz, otrzymamy informację, że nie zna całej domeny, ale zna domenę .cz, której autorytatywnymi serwerami są:

  • ns.tld.cz
  • nss.tld.cz
  • ns-cz.ripe.net
  • ns-ext.isc.org
  • c.ns.nic.cz
  • e.ns.nic.cz

W ten sposób korzeniowy serwer DNS wskazał nam kierunek, którym mamy podążać, aby otrzymać pożądaną odpowiedź. Tym samym na drzewie DNS przesuwamy się do węzła cz, wybieramy jeden z jego autorytatywnych serwerów DNS (np. ns.tld.cz) i ponownie wysyłamy zapytanie o domenę www.mff.cuni.cz. Ponownie otrzymujemy odpowiedź, że serwer nie zna całej nazwy, ale zna domenę cuni.cz, której autorytatywnymi serwerami DNS są ns.ces.net i golias.ruk.cuni.cz. Nasze zapytanie kierujemy do serwera ns.ces.net, który w odpowiedzi przekazuje nam autorytatywne serwery DNS domeny mff.cuni.cz. W kolejnym kroku docieramy do celu.

Opisaną procedurę należy uzupełnić o kilka wyjaśnień. Przede wszystkim  wspomniano, że zapytanie można skierować do dowolnego, autorytatywnego serwera DNS, dostępnego w węźle domeny, w którym aktualnie się znajdujemy. Dla każdej domeny dostępnych jest kilka serwerów (zazwyczaj minimalna wymagana liczba to 2 serwery). Pierwszym z powodów jest redundancja, tj. przy awarii jednego serwera nie dochodzi do ograniczenia dostępności całej domeny (a tym samym i całego poddrzewa), ale do zastąpienia go przez pozostałe serwery (wynika to z mechanizmu działania protokołu DNS). Dlatego zwyczajem stało się (a niektórzy administratorzy domen wręcz tego wymagają, i w ramach możliwości kontrolują, np. DE.NIC), czy serwery danej domeny znajdują się w różnych lokalizacjach i są połączone przez różnych dostawców Internetu. Pomimo że umieszczenie wszystkich serwerów w jednej serwerowni, połączenie ich do jednego przełącznika i jednego gniazdka sprawia, że system kilku serwerów traci swój efekt, tego typu rozwiązanie jest często stosowane w praktyce. Administratorzy domen zerowego i pierwszego poziomu nie mogą dopuścić do takiej sytuacji, dlatego też 13 korzeniowych serwerów DNS zostało rozmieszczonych po całym świecie (i dodatkowo zabezpieczonych technologią Anycast).

Drugim argumentem, który przemawia za kilkoma autorytatywnymi serwerami DNS dla jednej domeny, jest rozłożenie obciążenia. Mechanizm protokołu DNS działa w ten sposób, że jedno urządzenie cyklicznie odpytuje daną grupę serwerów, przez co w globalnej skali obciążenie serwerów jest równomierne.

Kolejnym istotnym faktem jest to, że na każdym z poziomów zapytanie wysyłane któremuś z serwerów dotyczy całej nazwy „www.mff.cuni.cz”, tj. nigdy nie pytamy serwera ns.tld.cz tylko o „cuni.cz”. Dzieje się tak dlatego, że nie wiemy, który z serwerów posiada wszystkie wymagane informacje. To, że korzeniowe serwery DNS znają jedynie domeny pierwszego poziomu, a autorytatywne serwery DNS na pierwszym poziomie znają tylko domeny drugiego poziomu, jest tylko regułą, która nie zawsze ma zastosowanie – na przykład wszystkie korzeniowe serwery DNS znają już adres IP dla nazwy „ns.tld.cz”. Ma to związek z tzw. glue adresami IP. Zapytanie jest więc zawsze wysyłane w całości, a serwer DNS będzie próbował dostarczyć nam najbardziej szczegółowe informacje, jakie posiada. W przypadku serwerów DNS dla domen drugiego poziomu jest to bardzo wariabilne.