Je me demandais comment fonctionne le système de résolution des noms d’hôte Windows.
Plus précisément, je m’interroge sur l’utilisation ou l’absence de mise en cache locale dans le processus.
Selon l’ ordre de résolution du nom d’hôte Microsoft TCP / IP , le processus est le suivant:
Ce que je me demandais, c’est si l’étape (2) est mise en cache d’une manière ou d’une autre.
L’intérêt soudain est apparu ces derniers jours, car j’ai installé une protection contre les logiciels malveillants (SpyBot) qui utilise le fichier HOSTS
. En fait, il y a maintenant 14 000 entrées de plus, et en comptant …
Le fichier est actuellement sortingé en fonction du nom d’hôte, mais ce n’est bien sûr pas nécessaire.
lg (14K), signifie 14 étapes à travers le fichier pour chaque demande de résolution. Ces requêtes arrivent probablement à un rythme de quelques secondes, et généralement à quelques centaines d’hôtes (tops).
Ma vision de la façon dont cela devrait fonctionner est la suivante:
Bien que je ne sois pas sûr de leur importance, j’apprécierais vraiment une réponse.
Je veux juste voir si mon raisonnement est juste et si non, pourquoi?
Je suis conscient du fait qu’à l’époque des PC toujours connectés, le cache doit être périodiquement (ou progressivement) purgé. J’ignore cela pour le moment.
Dans le service client DNS (dnsrslvr), vous pouvez voir une fonction appelée LoadHostFileIntoCache
. Ca fait plutot comme ca:
file = HostsFile_Open(...); if (file) { while (HostsFile_ReadLine(...)) { Cache_RecordList(...); ... } HostsFile_Close(...); }
Alors, comment le service sait-il quand le fichier hosts a été modifié? Au démarrage, un thread est créé qui exécute NotifyThread
et appelle CreateHostsFileChangeHandle
, qui appelle FindFirstChangeNotificationW
pour commencer à surveiller le répertoire drivers\etc
Lorsqu’il y a un changement, le thread efface le cache en utilisant Cache_Flush
.
Votre méthode ne fonctionne pas lorsque l’adresse IP d’un nom d’hôte connu est modifiée dans les hosts
sans append ou modifier le nom.
Technet dit que le fichier sera chargé dans le cache de résolution du client DNS.
IMO c’est la plupart du temps sans importance: une recherche dans un fichier local (une fois dans le cache du disque) sera toujours de plusieurs ordres de grandeur plus rapide que de demander aux serveurs DNS de votre FAI.
Je ne pense pas que chaque processus conserve son propre cache. S’il existe un cache, il existe probablement dans la stack ou le kernel TCP / IP quelque part, et même dans ce cas, pour un très court moment.
J’ai eu des situations où je bricolerai avec mon fichier hosts, puis utiliserai les adresses dans un navigateur Web et cela mettra à jour les noms résolus sans que je doive redémarrer le navigateur.