文章转自Live空间(http://delxu.spaces.live.com/blog/cns!D04F87F9ED029F69!2583.entry)和51cto技术博客(http://delxu.blog.51cto.com)首发。转发时务必表明出处,顺便给博主做个广告,文章写的真的很好,深入浅出,期待看到更好的博文,再次表示对博主的感谢!!!
Windows 名字解析顺序

(注:本文涉及的都是多年前的Windows产品。仅做培训教材之用)

Windows中名字解析的顺序是怎样的?很多中文的技术文章或者前后矛盾,或者语焉不详,是他们错了么?不是,只是没有把特定的条件说清楚了罢了。

比如这个常见的说明名字解析顺序的图片:
Windows 名字解析顺序_名字
但是这个顺序一定正确吗?回答应该是,在特定的场合下,是正确的。这个特定场合指的是1)OS是Windows 2000或更新版本,2)采用了H-Mode的节点模式。但是这些,很多引用了这张图片的文档都没有解释。
决定名字解析顺序的2个重要的因素:第一,OS版本,第二,节点模式
OS版本决定了名字解析优先DNS还是优先查询NetBIOS。节点模式决定了先查WINS还是先广播。
Windows 2000以后(包括2000、XP、Vista、Win7、2003、2008)都先查DNS,后查NetBIOS。
Windows 9x/NT以前的,都先查NetBIOS,后查DNS。
节点模式见后文解释。

接下去我们用问答的方式来解释一些常见问题。

Q: DNS名的查询顺序:
DNS cache --> HOSTS 文件 --> DNS Server

Q: NetBIOS名的查询顺序:
如果是H-mode的话: NetBIOS cache --> WINS Server --> 广播 --> LMHOSTS 文件
如果是其他模式,WINS和广播的顺序会有不同,见下文。

Q: HOSTS 和LMHOSTS文件的位置
%SystemRoot%\System32\drivers\etc
%SystemRoot%通常都是C:\Windows,NT下是C:\WINNT
(查看SystemRoot的路径,可以在cmd下输入set命令)
缺省情况下, lmhosts 文件并不存在,系统有一个 lmhosts 样本文件 lmhosts.sam ,您可以仿照 lmhosts.sam 文件来编写您的 lmhosts
Q: 如何看当前节点模式?
ipconfig /all
Windows 名字解析顺序_Windows_02
Q: 有那些mode?
有四种mode:b,p,m,h
Q: 每种mode的具体含义?
B-mode:Broadcast Mode,只广播
P-mode: Point-to-point mode,只查WINS
M-mode: Mixed mode,先广播,后WINS
H-mode: Hybrid mode,先WINS,后广播
Q: 默认mode是什么?
设置了WINS时,默认mode是H-mode,没设置WINS默认mode是B-mode
Q: 各个mode的Reg键值
B-mode:0x1
P-mode: 0x2
M-mode: 0x4
H-mode: 0x8
Q: mode的动态设定
通过DHCP分配地址的时候,可以配置NodeType,在注册表中
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netbt\Parameters
DHCPNodeType的值说明了从DHCP获得的Node Type
Q: 如何改mode?
通常情况下,不需要改Mode!使用默认的H-mode即可!

在注册表中添加或者修改NodeType键值。
默认情况下,不存在NodeType键值,可以手工创建。
NodeType键值覆盖(优先级高于)DHCPNodeType的键值。
NodeType的位置在:

Windows 2000 and Windows NT

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netbt\Parameters
Key: NodeType
Value Type: REG_DWORD - Number
Valid Range: 1,2,4,8 (b-node, p-node, m-node, h-node)

Windows 9x
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP
Key: NodeType
Value type: DWORD
Valid range: 1, 2, 4, or 8

Q: 如何显示DNS Cache
ipconfig /displaydns
Q: 如何手工清空DNS Cache
ipconfig /flushdns
Q: DNS Cache有效期多少时间?
10分钟。
Q:如何停用DNS Cache?
在Windows服务中的DNS Client服务(短名dnscache)负责DNS Cache任务,只要停用这个服务,就可以停用DNS Cache。
注意,即使关掉DNS Client服务,计算机仍然可以通过DNS服务器来解析DNS名。
关掉DNS Client服务的办法,可以输入命令:
  net stop dnscache
  或
 
sc servername stop dnscache
或者在图形界面,services.msc控制台中关闭该服务。
Q:如何查看NetBIOS Cache?
 nbtstat –c
Q: 如何清空NetBIOS Cache?
 nbtstat -R
注意R必须大写

总结
最后总结一下,一台加入AD的Windows XP电脑的名字解析顺序默认应该是:
DNS cache --> HOSTS 文件 --> DNS Server –> NetBIOS cache --> WINS Server --> 广播 --> LMHOSTS 文件
如果是一台Win95的工作组电脑,并且没有WINS,(还记得吗?没有配WINS,默认用B模式)则是:
NetBIOS cache --> 广播 --> LMHOSTS 文件 --> DNS cache --> HOSTS 文件 --> DNS Server


参考文档和相关阅读

1) 理解Windows网络中的名字解析
http://www.winsvr.org/info/info.php?sessid=&infoid=1&page=1
2) Windows操作系统上的一些名字解析
http://read.newbooks.com.cn/info/132528.html
3) How to Disable Client-Side DNS Caching in Windows XP and Windows Server 2003
http://support.microsoft.com/kb/318803
4) NetBIOS over TCP/IP Name Resolution and WINS
http://support.microsoft.com/kb/119493
5) NetBIOS Name Resolution Using DNS and the HOSTS File
http://support.microsoft.com/kb/142309
6) Default Node Type for Microsoft Clients
http://support.microsoft.com/kb/160177