Avant d'entrer dans le vif du sujet, cette section propose d'expliquer le principe de fonctionnement du DNS. Comme on l'a vu, pour des raisons de commodité, il est plus facile de manipuler pour un humain des noms significatifs, tels que www.linux-france.org, et des adresses codées sur plusieurs octets pour une machine (comme 216.167.114.128).
Au début des années 1970, un système centralisé à Stanford avec un fichier global HOST.TXT global a fonctionné. On pouvait récupérer la version la plus récente de ce fichier par ftp, ce qui n'était pas pratique. Avec l'explosion du nombre de machines connectées à l'Internet (on estime que plusieurs machines dans le monde apparaissent chaque minute), ce système est devenu totalement ingérable. Un modèle centralisé sur un serveur est donc impossible à mettre en place, du au nombre d'hotes et le nombre de mise à jour nécessaires à apporter.
Le DNS (Domain Name System, Systeme de Nom de Domaine en français) a été conçu pour résoudre ce problème, en proposant un modèle hiérarchisé.
Chaque machine (imprimante, terminal, serveur ...) reliée à un réseau se voit attribuer un petit nom. Ce nom est unique dans le domaine auquel elle appartient. Ainsi, pour les domaines domaine1.com et domaine2.com, on peut avoir deux machines portant des noms similaires ou différents. Par exemple, esmeralda.domaine1.com et esmeralda.domaine2.com désignent deux machines dofférentes, d'adresses IP différentes.
On peut comparer cette adresse à une adresse postale : pour trouver un domicile de façon certaine, on commence par chercher le pays, puis la ville, puis la rue et enfin le numéro. Ici le pays est un nom de domaine de haut niveau. Ils sont bien connus de tous les internautes : .com, .net, .fr ... Le nom de sous domaine peut-être assimilé au nom de la ville dans ce pays. Il peut y avoir plusieurs villes dans le monde ayant le même nom, mais dans un même pays un nom de ville doit être unique, pour pouvoir l'identifier de façon certaine. Eventuellement, si la ville est petite, on peut se contenter de ne préciser que le nom d'une personne : le facteur saura à coup sûr où habite la personne. Pour un sous domaine, on peut également le diviser en sous resaux ou non.
Comme un nom d'hôte complet est ordonné de façon logique, du plus précis au plus vague, le plus simple pour hiérarchiser la recherche est de le faire sur chaque partie du nom. Chaque serveur ne connait que les noms de ses fils (le serveur pour .com sait comment atteindre www.linux-france.com mais pas www.linux-france.org), et renvoie à la racine les requettes qu'il ne sait résoudre. Celle-ci à son tour tente de résoudre une adresse IP en nom en renvoyant l'adresse du serveur pouvant répondre à cette demande (figure 1).
hierarchie.epsHiérarchie du DNS
La hiérarchie DNS est donc divisée en zones. Une zone représente un domaine (fr, org, linux-france.org). Une zone parente peut déléguer une zone fille à un ou plusieurs serveurs de noms, et chaque zone est gérée par un serveur maître et éventuellement plusieurs serveurs secondaires dont le contenu est recopié à partir du serveur maître.
Prenons un cas pratique : résoudre le nom d'hôte machine.division.domaine.fr.
Il y aura donc eu 3 interrogations pour les 3 serveurs de noms par défaut, 1 pour celui de la zone .fr, 1 pour celui de la zone domaine.fr, et 1 pour celui de la zone division.domaine.fr, soit au total 6 serveurs de noms interrogés. Chacun de ces serveurs de noms ne renvoie à chaque fois que l'adresse du DNS mieux à même de répondre.
De plus, chaque serveur DNS garde en mémoire les dernières requettes. Ainsi, si un nom est souvent demandé, il a toute les chances de figurer dans la mémoire du serveur qui n'aura pas besoin d'interroger les autres serveurs : la réponse sera directe.
On voit tout de suite l'avantage de cette méthode : au lieu d'avoir un serveur indexant toute les machines du Web, il y a des milliers de machines indexant un petit bout de l'Internet, en l'occurence leur sous domaine. Cela répartit les informations et les charges sur ces milliers de machines. Il est donc nécessaire de configurer son propre DNS pour son réseau, si on veut que les noms des machines de son propre domaine soient résolus par d'autes hôtes.