Настройка кэша распознавателя Windows для Windows - PullRequest
7 голосов
/ 10 марта 2009

Обратите внимание, что я говорю о клиентском кеше распознавателя DNS. Это сообщение не относится к DNS-серверу Windows.

У меня есть программа на C #, которая выполняет множество разрешений DNS. Поскольку компонент HTTPWebRequest не позволяет мне изменять заголовок хоста, я не могу создать свой собственный внутренний кэш DNS. Поэтому я должен зависеть от DNS-кэша Windows, который не поддается изменению.

Есть довольно хорошая статья TechNet о настройках реестра DNS-кеша в Windows Server 2003, но я не смог доказать, что их настройка что-то делает. Все остальные страницы, которые я нашел в поиске Google, либо ссылаются на эту страницу, либо перефразируют ее, иногда неправильно.

Команда Windows ipconfig имеет параметр / displaydns, который выводит содержимое кэша. Насколько мне известно, это единственный способ определить размер кеша DNS. В моих экспериментах на 32-битном Windows XP с 2 ГБ памяти, независимо от того, на что я установил значения реестра DNS-кэша, я всегда получаю от 30 до 40 элементов в кэше - даже после тысяч разрешений DNS , На моем 64-разрядном компьютере с Windows 2008 с 16 ГБ памяти в кэш всегда помещается от 270 до 300 элементов.

Я в тупике. Я не знаю, каков ответ, но я полагаю, что один из следующих случаев:

  1. Невозможно изменить размер кэша распознавателя DNS.
  2. Возможно, но документация неверна.
  3. Документация верна, но она неполна.
  4. Документация правильная и полная, но я слишком тупой, чтобы понять ее.
  5. Документированные записи реестра фактически изменили размер кэша, но ipconfig не показывает мне все записи, которые находятся в кэше.

Кто-нибудь может мне сказать, можно ли настроить размер кэша распознавателя DNS в Windows XP, Vista или Server 2008?

Ответы [ 4 ]

1 голос
/ 23 августа 2012

Существует программа «Переносимый кэш DNS», которую вы можете использовать для просмотра кеша DNS, мониторинга активности распознавателя DNS и просмотра запросов, разрешенных с помощью кеша, и запросов, пересылаемых на DNS-сервер. В его настройках вы можете настроить максимальное количество элементов в кеше. Хотя кажется, что все элементы остаются в кеше до тех пор, пока вы не нажмете кнопку «Очистить кеш» или не достигнете предела кеша.

1 голос
/ 14 июня 2011

С этими настройками, через несколько минут в Интернете, я вижу 1517 кэшированных записей:

REGEDIT4

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ DNSCache \ Parameters]
"QueryIpMatching" = DWORD: 00000001
"NegativeCacheTime" = DWORD: 00000000
"NegativeSOACacheTime" = DWORD: 00000000
"CacheHashTableBucketSize" = DWORD: 00000001
"CacheHashTableSize" = DWORD: 00000180
"MaxCacheEntryTtlLimit" = DWORD: 00000e10
"MaxSOACacheEntryTtlLimit" = dword: 0000012c

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters]
"QueryIpMatching" = dword: 00000001

0 голосов
/ 23 марта 2009

Хак, который вы можете использовать, заключается в добавлении записей в файл hosts в Windows, что не позволяет DNS-запросам выполнять все записи в файле. Вы можете периодически запрашивать снова для подтверждения записей.

0 голосов
/ 10 марта 2009

По умолчанию минимальный TTL для кеша составляет 1 день, я играл с ним, но по умолчанию я считаю, что запись реестра не существует по умолчанию.

Это ключ, который вы ищете, по крайней мере, в XP:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters

Вам необходимо добавить DWORD MaxCacheTtl - Это изменит минимальный TTL для хранения в кэше распознавателя.

Поскольку по умолчанию он равен 86 400 (значение в секундах, по умолчанию = 1 день), все, что короче этого, просто не кэшируется. Если вы уменьшите его до 300, вы увидите, что на клиенте будет кешировано еще больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...