【发布时间】:2011-04-14 04:51:11
【问题描述】:
我想知道 Windows 主机名解析系统是如何工作的。
更准确地说,我想知道在此过程中是否使用了本地缓存。
根据Microsoft TCP/IP Host Name Resolution Order,流程如下:
- 客户端检查查询的名称是否是自己的。
- 客户端然后搜索本地 Hosts 文件,即存储在本地计算机上的 IP 地址和名称列表。
- 查询域名系统 (DNS) 服务器。
- 如果名称仍未解析,则使用 NetBIOS 名称解析序列作为备份。可以通过配置客户端的 NetBIOS 节点类型来更改此顺序。
我想知道的是,阶段 (2) 是否以某种方式缓存。
最近几天突然产生了兴趣,因为我安装了一个利用HOSTS 文件的恶意软件保护 (SpyBot)。事实上,它现在有 14K 条目,而且还在增加......
该文件当前是根据主机名排序的,但当然不是必须的。
lg(14K),表示每个解析请求在文件中执行 14 步。这些请求可能以每秒几个的速度到达,并且通常到达相同的几百个主机(顶部)。
我对这个应该如何工作的看法是这样的:
- 在系统启动时,Windows DNS 解析机制会一次性加载 HOSTS 文件。
- 它提交对文件进行排序的单次迭代。工作副本被加载到内存中。
原始 HOSTS 文件在决议的整个生命周期内不会被进一步阅读。 - 所有网络进程(IE、Firefox、MSN...)都通过此进程/机制工作。
没有其他进程直接连接/读取 HOSTS 文件。 - 收到名称解析请求后,进程会检查其驻留内存的缓存。
如果它找到了正确的 IP,那么就是正确的答案。 - 否则(未缓存),解析过程将继续到内存驻留(已排序)HOSTS 文件,并对其进行快速二进制搜索。从这里开始,该过程将按照最初的描述继续进行。
解析结果将被缓存以供进一步使用。
虽然我不确定这些的重要性,但我非常感谢您的回答。
我只是想看看我的推理是否正确,如果不是,为什么会这样?
我知道在这个永远在线的 PC 时代,必须定期(或增量)清除缓存。我暂时忽略这个。
【问题讨论】:
-
好吧,让我们看看 Windows 源代码......哦,等等,废话 :-(
标签: windows networking dns localhost