Résolution du nom d’hôte Windows

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:

  1. Le client vérifie si le nom demandé est le sien.
  2. Le client recherche ensuite un fichier Hosts local , une liste d’adresses IP et des noms stockés sur l’ordinateur local.
  3. Les serveurs DNS (Domain Name System) sont interrogés.
  4. Si le nom n’est toujours pas résolu, la séquence de résolution de noms NetBIOS est utilisée comme sauvegarde. Cet ordre peut être modifié en configurant le type de noeud NetBIOS du client.

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:

  1. Au démarrage du système, le mécanisme de résolution DNS Windows charge le fichier HOSTS une seule fois.
  2. Il valide une seule itération par-dessus qui sortinge le fichier. Une copie de travail est chargée en mémoire.
    Le fichier HOSTS original ne sera pas lu plus avant tout au long du processus de résolution.
  3. Tous les processus réseau (IE, Firefox, MSN …) fonctionnent via ce processus / mécanisme.
    Aucun autre processus n’interfère / lit directement le fichier HOSTS.
  4. À la réception d’une demande de résolution de nom, le processus vérifie son cache résidant en mémoire .
    S’il trouve l’adresse IP correcte, il répond correctement.
  5. Sinon (il n’est pas mis en cache), le processus de résolution continue vers le fichier HOSTS résidant en mémoire (sortingé) et effectue une recherche binary rapide dessus. À partir de là, le processus se poursuit comme décrit initialement.
    Le résultat de la résolution est mis en cache pour une utilisation ultérieure.

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.