L'autodidacte

DNS, le premier mensonge du web

DNS, le premier mensonge du web
Partager l'article

Tu déploies une nouvelle version, tu fais pointer le domaine vers le nouveau serveur, tu rafraîchis : c'est en ligne, ça marche. Trois bureaux plus loin, un collègue ouvre exactement la même URL et tombe sur l'ancienne version, celle que tu viens de remplacer. Même réseau, même navigateur. Toi tu vois la vérité, lui voit un fantôme. Et pendant les heures qui suivent, selon l'endroit d'où on tape ton adresse, on obtiendra l'une ou l'autre, sans logique apparente.

Le coupable n'est pas ton code. C'est le DNS, et la façon dont il t'arrange la vérité.

Quand tu tapes une adresse, tu crois demander au web où se trouve un site, maintenant. Tu ne demandes rien de tel. Tu interroges un empilement de mémoires, dont chacune a le droit de te répondre avec une version un peu périmée, tant qu'un compte à rebours n'est pas écoulé. L'adresse que ton navigateur obtient n'est presque jamais la vérité en direct. C'est la dernière vérité que quelqu'un a pris la peine de retenir. Voilà le premier mensonge du web, et c'est un mensonge organisé.

L'enquête

Reprenons depuis le début. Tu tapes exemple.com. Ton navigateur, lui, ne sait pas parler à un nom : il lui faut une adresse IP, une suite de chiffres, la seule chose qu'une machine sait joindre. Le nom de domaine n'est qu'une politesse pour les humains. Quelqu'un doit donc traduire exemple.com en son IP. Cette traduction, c'est la résolution DNS. Et elle ressemble moins à une consultation d'annuaire qu'à un interrogatoire de témoins, où chacun peut te répéter une vieille information au lieu d'aller vérifier.

Premier témoin : ton navigateur lui-même. Il garde un cache de ce qu'il a résolu récemment. S'il a demandé exemple.com il y a deux minutes, il ne redemande à personne, il te ressort son souvenir. Premier endroit où l'information peut être périmée sans que tu le saches.

Deuxième témoin : ton système d'exploitation, qui tient son propre cache, juste derrière.

Troisième, le personnage clé : le résolveur. C'est lui qui fait le vrai travail d'enquête à ta place, en général celui de ton fournisseur d'accès, ou un résolveur public. Et lui aussi a un cache, partagé par des milliers d'utilisateurs. S'il a résolu exemple.com pour un voisin il y a cinq minutes, il te sert la même réponse sans bouger. C'est très probablement ce qui est arrivé à ton collègue : son résolveur avait encore l'ancienne adresse en mémoire.

Ce n'est que si personne n'a de réponse fraîche que l'enquête remonte à la source. Le résolveur interroge alors un serveur racine, qui ne connaît pas exemple.com mais sait qui gère les .com. Il redirige vers les serveurs du .com, qui ne connaissent pas le site mais savent quel serveur fait autorité sur exemple.com. Le résolveur interroge enfin ce serveur d'autorité : la source de vérité, celle qui détient les vrais enregistrements.

Là, il obtient deux choses. Un enregistrement : un A, qui associe le nom à une IP, ou un CNAME, qui dit « ce nom est l'alias d'un autre nom, recommence la traduction avec celui-là ». Et surtout, collé à cette réponse, un nombre : le TTL. « Cette réponse est valable N secondes. »

Le TTL, ce permis de mentir

Le TTL (time to live) est le cœur de l'affaire. C'est la durée pendant laquelle chaque témoin de la chaîne a le droit de garder la réponse et de te la resservir sans rien vérifier. Un TTL d'une heure, et ton résolveur répétera la même IP pendant une heure à tous ceux qui demandent, même si tu as changé l'adresse à la source entre-temps.

C'est exactement pour ça que ton collègue voyait un fantôme. Tu avais changé l'enregistrement, mais son résolveur tenait encore l'ancienne réponse, valide jusqu'à l'expiration de son TTL. La nouvelle vérité et l'ancienne coexistaient, servies par des caches différents, jusqu'à ce que les comptes à rebours s'éteignent un à un. C'est ce qu'on appelle la propagation DNS, et ce n'en est pas une : c'est une expiration.

La vérité en direct, pour le DNS, n'existe pas. Ce que tu obtiens, c'est une réponse qui était vraie quand un cache est allé la chercher, et qu'on suppose encore vraie tant que son TTL tient. Le système entier repose sur un mensonge borné et assumé. Et c'est une bénédiction : sans ces caches, le moindre clic déclencherait toute l'enquête jusqu'aux serveurs racine, et le web ramperait. Ici, le mensonge est ce qui rend le web rapide.

Ce que j'écoute vraiment en entretien

Je pose souvent le grand classique : « que se passe-t-il quand tu tapes une URL et appuies sur Entrée ? ». Ce que je n'écoute pas, c'est la récitation. Navigateur, DNS, TCP, HTTP, rendu : tout le monde connaît la liste, et une IA te la déroule mieux que n'importe quel candidat.

Ce que j'écoute, c'est un seul mot : cache. Le candidat qui dit « le navigateur regarde d'abord son cache, le résolveur a le sien, et il y a un TTL sur chaque réponse » ne récite pas des étapes, il a compris un mécanisme. Il sait que la résolution n'est pas une consultation en direct mais une cascade de mémoires, chacune avec le droit d'être en retard. Et celui-là, le jour où la moitié des utilisateurs tombent sur l'ancien serveur à trois heures du matin, saura où regarder pendant que les autres redémarrent l'application au hasard.

C'est ce que l'IA a rendu précieux. La liste des étapes ne vaut plus rien, elle se génère gratuitement. Ce qui vaut, c'est de savoir où le mécanisme te ment, parce que c'est là que vivent les vrais bugs, et ça, aucun résumé ne te le donnera à ta place.

Ce que je te conseille

La prochaine fois que « ça marche chez moi mais pas chez lui », soupçonne un cache avant de soupçonner ton code. Et avant une migration, regarde le TTL de l'enregistrement que tu vas changer : c'est la durée pendant laquelle ton ancienne adresse continuera de hanter le web. Abaisse-le la veille, à quelques minutes, et le jour où tu bascules, le mensonge sera court.

Le web ne te montre jamais le présent. Il te montre un passé récent qu'il n'a pas encore pris la peine de rafraîchir. Le jour où tu intègres ça, la moitié des bugs « impossibles » deviennent évidents.

Ce satellite fait partie du dossier Navigateur. Le vocabulaire à emporter : le DNS, le résolveur, le TTL, les enregistrements A et CNAME et le cache DNS.