URLs et Résolution de noms

Message 1, par Elzen

§ Posté le 25/03/2013 à 1h 21m 59

Ça fait un moment que je vous devais cet article, le voici enfin. Son but est donc de vous expliquer un peu comment fonctionnent les adresses que vous tapez, par exemple, dans votre navigateur. Note : ma description des différents niveaux du nom de domaine était erronnée. Je viens donc de mettre à jour cet article, incluant certains exemples et liens que je ne connaissais pas à la date de rédaction initiale et dont certains sont sans doute plus récents.



À la base, les différentes ordinateurs sur le réseau sont identifiés par un code chiffré appelé « adresse IP » (« IP » signifie « Internet Protocol »).

Actuellement, nous utilisons encore principalement la version 4 de ces adresses, qui est composée de quatre nombre entre 0 et 255, séparés par des points. Par exemple, l'adresse IPv4 de ce serveur est « 82.233.208.64 ».

Ce n'est pas forcément facile à retenir, hein ? Comme le disait clément dans notre conférence commune, paraphrasant une tristement célèbre remarque(1), « quand il y a une IP à retenir, ça va ; c'est quand il y en a plusieurs que ça pose problème ».

Et le problème risque fort de ne faire qu'augmenter, parce que nous arrivons actuellement à saturation du nombre d'adresses IP disponibles (il y a tellement de machines connectées aux réseau que presque toutes les adresses disponibles(2) sont occupées).

Du coup, nous passons, progressivement, à la version 6 des adresses IP, qui offre beaucoup plus de possibilité, mais du coup forme des adresses beaucoup plus dures à retenir.



Pour rendre la chose utilisable par des êtres humains, les gens qui ont inventé Internet ont donc décidé que ce serait intéressant d'utiliser un autre mécanisme pour identifier les machines. C'est ainsi qu'a été mis au point le système de noms de domaine, désigné en anglais par l'acronyme DNS (pour « Domain Name System », tout simplement(3)).

Comment marche ce système ? À l'envers, et par niveaux.


En effet, les domaines de premier niveau sont les quelques lettres qui marquent la fin de l'adresse de la machine. Le plus courant d'entre eux est « .com », qui était au départ censé servir à nommer les sites commerciaux, mais qui est maintenant utilisé pour tout et n'importe quoi.

Il en existe un grand nombre d'autres, dont « .org » (organisations, associations, et ce genre de choses) ou « .net » (comme « network » (réseau), c'est le plus neutre), mais aussi tout un tas de codes spécifiques à un pays donné, comme « .fr » pour la France, « .be » pour la Belgique, etc.(4)(5)

Il en existe un grand nombre, mais tout de même un nombre limité. L'ICANN, l'organisme qui chapotte le système de noms de domaines(6), en a ouvert un certain nombre, mais un nombre tout de même limité, ce qui explique qu'on ne croise pas souvent d'adresses en « .ouistiti », par exemple. Note : Kanor me rappelle que l'ICANN est actuellement en train d'ouvrir un nombre un peu plus important de domaines de premier niveau. Voir, notamment, ici.

La gestion de ces domaines de premier niveau est ensuite délégué à d'autres entités (par exemple, le domaine « .fr » et quelques autres sont géré par l'AFNIC).


Ensuite vient le domaine de deuxième niveau, qui doit être réservé (par une personne physique ou morale(7)) auprès d'un registrar, un organisme mandaté à ce sujet par les gestionnaires des différents domaines de premier niveau… à condition que celui-ci soit ouvert, ce qui n'a rien d'obligatoire. Wikipédia liste les domaines de premier niveau, en précisant lesquels sont ouverts et lesquels ne le sont pas.

La réservation d'un domaine de second niveau coûte, approximativement, entre dix et vingt euros pour les domaines de premier niveau les plus classiques (mais cela peut grimper considérablement pour d'autres), pour une durée d'un an. Si vous en avez un, pensez donc à le renouveler tous les ans, ou à réserver plusieurs années d'un coup, faute de quoi vos noms de domaines expireront passée la date fatidique(8).


Ce domaine de second niveau peut alors être utilisé directement (par exemple, hauteresolution.net), ou avoir lui-même des sous-domaines, qui peuvent être gérés directement par la personne ayant réservé le nom, ou délégués à leur tour (ce que fait, par exemple, « eu.org »). On peut ainsi avoir un troisième niveau, ou plus.

Toutefois, ces niveaux supplémentaires peuvent en pratique désigner des choses distinctes : plusieurs machines (par exemple, YunoHost propose un sous-domaine de « nohost.me » ou « noho.st » pour toute machine sur laquelle on installe ce système), plusieurs composantes différentes, gérées par une ou plusieurs machines (par exemple, Wikipédia associe un domaine différent par langue), ou simplement plusieurs « alias » permettant de joindre la même chose avec plusieurs noms différents(9) (par exemple, www.fadrienn.irlnc.org est un alias pour ce site.

(Pourquoi « www. » ? Parce que c'est un préfixe fréquemment utilisé pour le nom de domaines de sites sur le world wide web. Mais ce n'est qu'une conviention, d'où le fait que je n'ai pas choisi ça par défaut).


En ce qui me concerne, j'ai ainsi réservé « irlnc.org » pour le collectif IRLNC, et j'ai attribué le nom « fadrienn » à la machine qui vient de vous envoyer cette page. (Pourquoi ce nom-là ? Voyez par là). En quelque sorte, c'est un peu comme si « fadrienn » était le prénom de mon serveur, et « irlnc.org » son nom de famille. D'ailleurs, si vous auto-hébergez votre site et que vous voulez, un domaine en « .irlnc.org », faites-moi signe 😉

Je ne vais pas m'attarder plus longtemps sur la configuration avancée des noms de domaines maintenant (ça viendra peut-être, si j'en ai l'utilité un jour, dans un article dédié dans mes notes d'installation) ; mais les personnes souhaitant davantage d'informations sur le sujet peuvent consulter le blog d'un spécialiste. Le principal à retenir est qu'un nom de domaine pleinement qualifié est consituté de l'ensemble de ces informations, de la plus spécifique à la plus générale.

Comme le soulignait Gee dans cette B.D., il est important de faire attention à l'ordre de ces informations : jouer sur les noms de domaines est une manière courante de tenter de tromper les gens. Précisons toutefois que cette B.D. (comme l'ancienne version de cet article) repose sur une distinction trop catégorique entre les différents niveaux (ce type de simplification étant, malheureusement, souvent nécessaire à la vulgarisation).


Bref, voilà donc comment se forme l'adresse de la machine. Quand vous demandez un nom, par exemple « fadrienn.irlnc.org », votre machine à vous contacte le serveur DNS le plus proche, et lui demande « je voudrais parler à cette machine, tu la connais ? »

Si c'est la première fois qu'on lui demande, il va répondre que non, mais qu'il connaît un autre DNS qui, lui, disposera peut-être de l'information. La demande remonte ainsi de proche en proche, jusqu'à tomber sur quelqu'un qui sache quelque chose. (Il existe un « serveur DNS primaire », géré par l'ICANN (et qui a plusieurs clônes un peu partout dans le monde), qui connaît les serveurs DNS gérant les domaines de premier niveau, et qui voit passer un certain nombre requêtes par jour, auxquels il répond « je ne sais pas directement, mais par contre, c'est machin qui gère ça, va le voir, lui il saura).

L'information est ensuite « mise en cache » (c'est-à-dire, mémorisée un certain temps (la durée souhaitée est spécifiée par le serveur DNS qui gère le domaine en question)) par les intermédiaires, qui espèrent par là avoir l'air moins ignares la prochaine fois qu'on leur demandera. Ce qui fait que la liaison est toujours un peu plus rapide les fois suivantes.



Ça, c'est donc pour le nom de la machine. Vous pouvez taper indifféremment l'adresse IP ou le nom de domaine(10), ça marchera de la même façon (ce sera juste un poil plus rapide avec l'adresse IP, parce qu'il n'y aura pas besoin de se demander d'abord où est la machine, le réseau saura déjà ; mais c'est à peu près tout).

Mais l'URL (l'adresse que vous tapez dans votre navigateur (ou ailleurs). Ça veut dire « Uniform Resource Locator, soit « localisateur uniforme de ressource ») ne contient pas que ça.


Juste avant le nom de la machine, vous précisez un protocole, c'est-à-dire une manière de communiquer avec la machine (dans votre navigateur, ce sera probablement « http:// » (ou « https:// » pour la version sécurisée). Pour IRC, c'est « irc:// ». Pour SSh, « ssh:// ». etc.)

Juste après le nom de la machine, vous pouvez, optionnellement, préciser un numéro de port, qui désigne l'une des portes d'entrées possibles de la machine. Si vous ne le précisez pas, le port par défaut associé au protocole (80 pour http ou 443 pour https, par exemple) sera utilisé. Essayez d'ajouter, dans l'adresse de cette page, « :80 » juste après le « .org », et vous arriverez au même endroit.


Ensuite, vient un « / », qui indique, comme dans un chemin d'accès dans les systèmes Unix(11), la racine (bon, il s'agit ici de la racine du site, pas de la véritable racine du système de fichiers, mais le principe est le même).

Après cette racine, vous précisez l'adresse de la ressource qui vous intéresse sur la machine. Sur un serveur web à peu près classique, c'est censé représenter l'adresse réelle des fichiers auxquels vous accédez. En pratique, ce n'est pas forcément exactement le cas, surtout quand vous avez affaire à des sites dont le contenu est géré dynamiquement, mais je passe sur ces réglages bizarres (chez moi, c'est bien l'adresse des fichiers qui est utilisée).


Après l'emplacement de la ressource, vous pouvez utiliser des paramètres (et vous le faites très souvent quand vous vous adressez à un site à contenu généré dynamiquement, comme un moteur de recherche ou bien la plupart des forums).

Les paramètres sont séparés du reste de l'adresse par un caractère « ? », et sont constitués d'une suite de « clefs=valeurs », séparées les unes des autres par un « & ».

Comme il y a ici quelques caractères réservés, il faut échapper ces éléments, c'est-à-dire convertir les caractères problématiques en éléments qui ne poseront pas de problème(12).


Enfin, en dernier, vous pouvez préciser une ancre, après un caractère « # »(13), qui sert à repérer une position particulière dans la page.



Autre chose : il est possible de préciser, même en HTTP, un nom d'utilisateur et un mot de passe, lorsque le serveur est configuré pour en demander. Ça se fait en précisant, entre le nom du protocole et celui de la machine, quelque chose comme « utilisateur:mot_de_passe@ » (le mot de passe n'était pas forcément requis, selon le cas).

Par exemple, pour passer l'authentification que j'utilise en mode sécurisé, et arriver au premier message de cette page, vous pouvez cliquer sur l'adresse suivante :

https://guest:guest@fadrienn.irlnc.org/articles/informatique/dns#m0

Récapitulons ce que nous venons de voir : cela vous permettra donc d'accéder à la machine dont le nom qualifié est « fadrienn.irlnc.org » (en l'occurrence, la machine « fadrienn » du domaine « irlnc.org », mais ce n'est pas obligatoire), par le protocole HTTPS (sur le port par défaut de ce protocole, donc le 443), en tant que l'utilisateur « guest » et avec le mot de passe « guest », pour charger le fichier situé à l'adresse « articles/informatique/dns » (en partant de la racine du site) ; et à l'intérieur de cette page, vous ciblerez plus spécifiquement l'élément ayant l'identifiant « m0 » (c'est-à-dire, le premier message de cette page).


Voilà. J'espère que ça rendra votre navigation un peu moins mystérieuse ; mais n'hésitez pas à poser des questions si je n'ai pas été assez clair sur certains points.


(Suite au décès inopiné de mon précédent serveur, je profite de mettre en place une nouvelle machine pour essayer de refaire un outil de blog digne de ce nom. J'en profiterai d'ailleurs aussi pour repasser un peu sur certains articles, qui commencent à être particulièrement datés. En attendant, le système de commentaires de ce blog n'est plus fonctionnel, et a donc été désactivé. Désolé ! Vous pouvez néanmoins me contacter si besoin par mail (« mon login at ma machine, comme les gens normaux »), ou d'ailleurs par n'importe quel autre moyen. En espérant remettre les choses en place assez vite, tout plein de datalove sur vous !)