我正在尝试弄清楚有关 DNS 客户端缓存的一些事情。具体来说,我想知道当客户端首次解析记录时,特定域的缓存了多少个名称服务器,以及如果缓存的名称服务器在将来发出请求时不可用会发生什么。此外,有没有办法在 Windows 服务器上的客户端缓存中显示名称服务器。ipconfig/displaydns 似乎只显示缓存的 A 和 CName,而不是名称服务器。
答案1
名称服务器不会被缓存。它们提供的是记录。
名称服务器是按每个连接分配的。在 Windows 中,通常为每个网络连接分配两个名称服务器,但可以分配的上限要大得多。按顺序尝试配置的 DNS 服务器 - 首先查询第一个,如果不可用,则查询第二个,依此类推。
ipconfig /all
将显示连接当前配置的名称服务器,就像通过 GUI 进入连接属性一样,但您将无法找到“名称服务器缓存”,因为不存在该缓存。
答案2
服务器未缓存。每个 DNS 记录(DNS 到 IP 分配)都有一个 TTL(生存时间)属性(以秒为单位)。因此,当您首次通过名称连接服务器时,您会要求 DNS 服务器为 DNS 名称提供 IP 地址,您会获得此 DNS 到 IP 分配记录,该记录由操作系统缓存一段时间(取决于此记录的 TTL)。此外,您从缓存中的 DNS 获取此记录的时间以及此记录的 TTL。
如果您再次连接,操作系统会检查之前的请求是否超过 TTL 秒之前。
- 如果 TTL 已通过,则操作系统清除此 DNS 到 IP 分配的缓存记录并再次请求 DNS 服务器
- 如果 TTL 尚未通过,操作系统将返回从缓存分配的 DNS-to-IP。
你可以使用以下命令强制操作系统忘记所有缓存的 DNS 到 IP 分配ipconfig /flushdns