Назад | Перейти на главную страницу

Настройка кеша распознавателя DNS Windows

я задал этот вопрос на Stack Overflow несколько месяцев назад и не получил никаких полезных ответов. Возможно, у кого-то здесь есть информация получше.

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

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

Есть достаточно хороший Статья в TechNet о настройках реестра DNS-кеша в Windows Server 2003, но я не смог доказать, что их установка что-то делает в XP, Server 2003, Vista или Server 2008. Все другие страницы, которые я нашел через поиск 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?

Другой способ проверить - посмотреть на трафик DNS, проходящий по сети. т.е. если ваше приложение делает запрос для домена X в 14:00, а вы не видите соответствующий пакет DNS в 14:00 в трассировке, то это имя было разрешено с использованием кеша на стороне клиента.

Я знаю, это своего рода запутанный способ подтвердить размер кеша. Я согласен, что должен быть лучший способ подтвердить это.

Попробуйте задать вопрос на официальных форумах Microsoft или отправьте электронное письмо в сетевую группу.

Вот. http://blogs.msdn.com/wndp/

Дайте этому кружку:

HKLM \ System \ CurrentControlSet \ services \ Dnscache \ Parameters \ MaxCacheSize

Я не могу найти для него документацию, но служба Dnscache проверяет наличие этого значения реестра при запуске, поэтому стоит проверить.

Значение, вероятно, указано в килобайтах. Как я уже сказал, поскольку это недокументировано, вам придется протестировать.

Я не пробовал изменять настройки DNS-клиента, поэтому я не могу говорить об этом, но я предлагаю запустить processmon (www.sysinternals.com), пока вы перезапускаете службу. Вы должны увидеть все попытки чтения ключей реестра. Он сообщит вам, к какому разделу реестра и элементам он пытается получить доступ. Это должно совпадать с документацией, но если нет, то, надеюсь, вы узнаете, что не так.