я задал этот вопрос на 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 элементов в кеше.
Я в тупике. Я не знаю, каков ответ, но полагаю, что это один из следующих случаев:
ipconfig
не показывает мне все записи в кеше. Может ли кто-нибудь сказать мне, можно ли настроить размер кеша распознавателя DNS в Windows XP, Vista или Server 2008?
Другой способ проверить - посмотреть на трафик DNS, проходящий по сети. т.е. если ваше приложение делает запрос для домена X в 14:00, а вы не видите соответствующий пакет DNS в 14:00 в трассировке, то это имя было разрешено с использованием кеша на стороне клиента.
Я знаю, это своего рода запутанный способ подтвердить размер кеша. Я согласен, что должен быть лучший способ подтвердить это.
Попробуйте задать вопрос на официальных форумах Microsoft или отправьте электронное письмо в сетевую группу.
Дайте этому кружку:
HKLM \ System \ CurrentControlSet \ services \ Dnscache \ Parameters \ MaxCacheSize
Я не могу найти для него документацию, но служба Dnscache проверяет наличие этого значения реестра при запуске, поэтому стоит проверить.
Значение, вероятно, указано в килобайтах. Как я уже сказал, поскольку это недокументировано, вам придется протестировать.
Я не пробовал изменять настройки DNS-клиента, поэтому я не могу говорить об этом, но я предлагаю запустить processmon (www.sysinternals.com), пока вы перезапускаете службу. Вы должны увидеть все попытки чтения ключей реестра. Он сообщит вам, к какому разделу реестра и элементам он пытается получить доступ. Это должно совпадать с документацией, но если нет, то, надеюсь, вы узнаете, что не так.