学以致富在线语音阅读:DNS解析故障排除方法

来源:百度文库 编辑:中财网 时间:2024/04/28 20:44:12
DNS解析故障排除方法

在Windows系统中,名称解析有两种类型。一种是基于主机名称的名称解析,另一种是基于NetBios名称的名称解析。

这两种类型的名称解析顺序是不一样的,在具体说明两种类型的名称解析顺序之前,先要理清主机名称和NetBios名称的概念。那么,主机名称和NetBios名称分别是什么概念,两者之间又有什么异同?下面就这个问题做出解释:

我们知道,Windows系统有两种名称解析服务,分别是DNS和WINS名称解析服务,其中DNS中使用的是主机名称,WINS中使用的是NetBios名称。两种名称最直观的区别是:NetBios名称没有层次结构,是一种平坦名称(Flat Name),NetBios名称最大长度为16个字符,可以包含空格,但不能包括以下字符:/\[]":;|<>+=,?*,不包含".",形如:Knight,而主机名称是具有层次结构的名称,最大长度为255个字符,形如:Knight.21cn.com。

默认情况下,Windows系统中用Hosts文件来保存由IP地址和主机名称组成的静态查询表,用Lmhosts文件来保存由IP地址和NetBios名称组成的静态查询表。两个文件均保存在"%SystemRoot%\System32\drivers\etc"目录下,分别用于DNS和Wins名称解析。

明确了主机名称和NetBios名称后,接下来的问题是,在一次名称解析过程中,计算机是如何选择以哪一种方式进行解析呢?

答案是依据应用程序所使用的网络协议。如果应用层使用基于微软内部使用的SMB协议,那么就会对要解析的名称进行分析。如果要解析的名称是平坦名称,就使用NetBios名称解析,如果名称中包括".",或者长度超过16个字符,就会使用DNS名称解析。总之一句话,就是先分析名称,然后再决定按哪种方式解析。而对于通用的基于Windows Socket的应用程序,会并行发起基于DNS的名称解析和基于NetBios的名称解析,但以DNS名称解析为主。

同时,对于DNS名称解析和Wins名称解析,两者的解析顺序有所不同。

DNS名称解析过程是:

  1. 用户输入一个名称地址
  2. PC首先查询这个名称是不是就是本机
  3. 读本机的Hosts文件
  4. 查找DNS服务器
  5. 查找NetBios名称缓存
  6. 查找Wins服务器
  7. 进行广播
  8. 查找LMHosts文件

NetBios名称解析过程:

  1. 用户输入一个名称地址
  2. 查找NetBios名称缓存
  3. 查找Wins服务器
  4. 三次广播
  5. 查找LMHosts文件
  6. 读本机的Hosts文件
  7. 查找DNS服务器

注意:上述步骤中,如果中间某一步查询成功,解析过程立即结束,否则进入下一步。

对于NetBios名称解析过程的最后一步,平坦名称是不能直接提交给DNS服务器。在提交给DNS服务器之前,要将平坦名称转换为DNS结构的名称。

具体转换如下:如果名称中没有一个包含".",且名称长度少于16个字符,客户端会将计算机的DNS后缀附加到名称上,再将其发送给DNS服务器解析。

对于域用户来说,具体附加的DNS后缀可以在"右击我的电脑->属性"中看到,对于工作组用户来说,可以手动在"网络连接->本地连接->属性->TCP/IP协议->属性->高级->DNS设置"中添加要附加的DNS后缀。

如果名称中包含".",但没有最未尾的".",解析器会追加未尾的".",并将其发送给DNS服务器,如果查询失败,解析器会追加完整的域名后缀,再发送给DNS服务器。如果第一个DNS后缀无法获得主机记录,解析器会依次将事先配置好的所有备用的DNS后缀追加后发送给DNS服务器进行查询。

如果所有的备用后缀查询都失败,解析器就会停止查询,返回提示信息!

一、什么是DNS解析故障?

一般来说像我们访问的"www.icbc.com.cn"、"www.163.com"这些地址都叫做域名,而网络中的任何一个主机都是用IP地址来标识的,也就是说只有知道了这个站点的IP地址才能够成功实现访问操作。

不过由于IP地址信息不太好记忆,所以网络中出现了域名这个名字,在访问时我们只要输入这个好记忆的域名即可,网络中会存在着自动将相应的域名解析成IP地址的服务器,这就是DNS服务器。能够实现DNS解析功能的机器可以是自己的计算机也可以是网络中的一台计算机,不过当DNS解析出现错误,例如把一个域名解析成一个错误的IP地址,或者根本不知道某个域名对应的IP地址是什么时,我们就无法通过域名访问相应的站点了,这就是DNS解析故障。

出现DNS解析故障最大的症状就是直接访问站点对应的IP地址时没有问题,然而访问他的域名就会出现错误。

二、如何解决DNS解析故障?

当我们的计算机出现了DNS解析故障后不要着急,解决的方法也很简单。

1、用nslookup命令来判断是否真的是DNS解析故障

要想准确判断是否为DNS解析故障就需要通过系统自带的NSLOOKUP来解决了。

  1. 确认系统是Windows 2000和Windows XP以上操作系统,然后通过"开始->运行->CMD"进入命令行模式。
  2. 输入nslookup命令后回车,将进入DNS解析查询界面。
  3. 命令行窗口中会显示出当前系统所使用的DNS服务器地址,例如笔者的DNS服务器IP地址为202.106.0.20。
  4. 接下来输入你无法访问的站点对应的域名。例如笔者输入www.icbc.com.cn,假如不能访问的话,那么DNS解析应该是不能够正常进行的。我们会收到"DNS request timed out,timeout was 2 seconds"的提示信息。这说明我们的计算机确实出现了DNS解析故障。

小提示:如果DNS解析正常的话,会返回正确的IP地址,例如笔者用www.163.com这个地址进行查询解析,会得到"name:ciidnet.com,addresses:61.135.133.103,61.135.133.104"的信息。

2、查询DNS服务器工作是否正常

这时候我们就要看看自己计算机使用的DNS地址是多少了,并且查询他的运行情况。

  1. 确认系统是Windows 2000和Windows XP以上操作系统,然后通过"开始->运行->CMD"进入命令行模式。
  2. 输入"ipconfig /all"命令来查询网络参数。
  3. 在显示信息中我们能够看到一个地方写着"DNS Servers",后面的地址就是我们的DNS服务器地址。例如笔者的是"202.106.0.20"和"202.106.46.151"。从这个地址可以看出是个外网地址,如果使用外网DNS出现解析错误时,我们更换成其他的DNS服务器地址即可解决问题。
  4. 如果在DNS服务器处显示的是自己公司的内部网络地址,那么说明本公司的DNS解析工作是交给公司内部的DNS服务器来完成的,这时我们需要检查这个DNS服务器,在DNS服务器上进行nslookup操作看是否可以正常解析。解决DNS服务器上的DNS服务故障,一般来说问题也能够解决。

3、清除DNS缓存信息

当计算机对域名访问时并不是每次访问都需要向DNS服务器寻求帮助,一般来说当解析工作完成一次后,该解析条目会保存在计算机的DNS缓存列表中,如果这时DNS解析发生变动的话,由于DNS缓存列表信息没有改变,在计算机对该域名访问时仍然不会连接DNS服务器获取最新解析信息,系统会根据自己计算机上保存的缓存对应关系来解析,这样就会出现DNS解析故障。这时我们应该通过清除DNS缓存的命令来解决故障。

  1. 通过"开始->运行->CMD"进入命令行模式。
  2. 在命令行模式中我们运行"ipconfig /?",可以看到有一个"/flushdns"的参数,这个就是清除DNS缓存信息的命令。
  3. 执行"ipconfig /flushdns"命令,当出现"Successfully flushed the DNS Resolver Cache."的提示时就说明当前计算机的缓存信息已经被成功清除。
  4. 接下来我们再访问域名时,就会到DNS服务器上获取最新解析地址,再也不会出现因为以前的缓存造成解析错误故障了。

4、修改HOSTS文件

修改HOSTS就是把HOSTS文件中的DNS解析对应关系进行修改,从而实现正确解析的目的。因为在本地计算机访问某域名时会首先查看本地系统中的HOSTS文件,HOSTS文件中的解析关系优先级大于DNS服务器上的解析关系。

这样当我们希望把某个域名与某IP地址绑定的话,就可以通过在HOSTS文件中添加解析条目来实现。

  1. 通过"开始->搜索->文件或文件夹",查找名叫hosts的文件。
  2. 对于已经知道文件路径的朋友可以直接进入"c:\windows\system32\drivers\etc"目录中找到HOSTS文件。如果你的系统是Windows 2000,那么应该到"c:\winnt\system32\drivers\etc"目录中寻找。
  3. 双击HOSTS文件,然后选择用"记事本"程序将其打开。
  4. 现在我们可以看到HOSTS文件的所有内容了,默认情况下只有一行内容"127.0.0.1 localhost"。(其他前面带有#的行都不是真正的内容,只是注释信息而已)
  5. 将你希望进行DNS解析的条目添加到HOSTS文件中,具体格式是先写该域名对应的IP地址,然后空格,接着是域名信息。例如笔者添加了"80.37.241.5 corporbank.icbc.com.cn"与"80.37.241.2 www.icbc.com.cn"两个条目。这是内网中企业网银的地址,添加以后,我们就可以直接输入"https://corporbank.icbc.com.cn"登录企业网银了。

总结

通过上面介绍的几个步骤,我们就可以解决大部分DNS解析问题了,这几个方法中前三个是循序渐进的一步步解决DNS解析故障,而最后一个修改HOSTS文件则是在实在没有办法的时候采取的权宜之计。当然不管是通过哪种方法,我们都可以解决因为DNS解析错误带来的网络故障。

冷月冰秋 yc_zch@live.cn