为了更好的帮助大家理解整个解析过程,我做了一张DNS域名解析的分步图,如下:
(责任编辑:admin)在这个图里,通过8个步骤的解析过程就使得客户端可以顺利访问www.163.com 这个域名,但实际应用中,通常这个过程是非常迅速的,主要由几个方面的原因所决定。1、客户端网络状况是否良好,2、与本地DNS连接的速度是否优秀,3、本地DNS上是否有访问地址的缓存等等,如果以上的因素答案都是肯定的,那么访问就会很迅速,上图的步骤也会骤减至2个,因为有缓存,所以本地DNS服务器会很快告之域名对应的IP而实现迅速访问。
上图中出现了2个陌生的列表,下面就说说这两张表的来历。这里我们结合第九章的内容继续讲解DNS的高级属性,如下图:
可以看到,在【根提示】选项卡中列出了13台根服务器,分别是
(a~m).root-servers.net和对应的IP地址,有的是2个IP,后面那个是备选地址,我们可以手动修改这些地址,但一般情况下,建议不要去动它。如果不小心更改或者删除,我们还是有几个办法修复的。因为这些服务器的地址列表是整个互联网共享的,所以我们可以在网络上找到最新的根服务器列表。通常在这个链接里:
ftp://rs.internic.net/domain/named.root ,也可以通过直接从网络上复制。如下图:
在服务器IP地址里,我们可以输入13个地址中的任意一个,确定后系统会自动连接到该服务器上更新列表。也并非13个地址中的一个,如果同网段内有冗余DNS,这里就可以输入那台DNS的地址,也是可以更新的。前提是,两台DNS服务器都必须连接到互联网。当然在DNS的安装目录下的CACHE.DNS文件中也是可以找到的,具体路径如下:C:\WINDOWS\system32\dns\CACHE.DNS。以上的方法都可以恢复这个列表。
在回到第一个图中,当本地DNS服务器向根DNS查询时,它会搜索自己的根DNS服务器列表,找到一个连接的地址,比如d.root-servers.net,这样就联系到了根服务器,当然,连接其他的也可以,没有太大区别。根服务器检测到是.com域名后,就返回给本地DNS服务器一个IP地址,这个IP就是负责.com顶级域名的其中一个服务器,我这里选的是c.gtld-servers.net,同样的,一共有13台这样的服务器负责.com域名的解析,即(a~m).gtld-servers.net。可能有的朋友疑问,这个是这么知道?OK,要解这部分内容,我们需要用到另一个工具dig,这个原本是Linux下的DNS服务器的调试工具,类似windows下的nslookup,但功能上比后者强很多,我们先做个演示,至于如何使用,后面会有章节来描述。
我们用dig命令来跟踪一下到www.163.com网站的整个过程,如下图:
图中提到的gTLD,其实这是顶级域名的一个分类,除此之外还有ccTLD,也就是国家及地区代码顶级域名,即CountryCodeTLD,比如.cn表示中国.hk,表示香港等。上图的4个过程其实就是我们从提交请求,到正常访问的过程。上图中还有很多参数没有说明,这部分会再后面章节有详述。
现在我们再来说一下递归查询和迭代查询。
在本节的第一张图中,当本地的DNS服务器帮助客户端解析www.163.com这个地址的IP地址的过程中,其实有已经包含了这2类查询。从客户端到本地DNS服务器是属于递归查询。而DNS服务器之间就是的交互查询就是迭代查询。
我们模拟一个场景。比如你的老板要去喜来登大酒店,但不知道怎么走,于是问你(你是他的秘书),此时你也不知道,于是问张三,张三也不清楚,让说让你去问李四,于是你问李四,李四正好知道,然后把线路告诉你,然后你把结果告诉你老板,这样整个问询就完成了。那么这就是个递归的过程。在这个过程中,老板始终在等待你的答案,而自己却丝毫不关心这档子事,而你就充当了一个代理和中间人的角色,来全权负责此时,你的目的是要把答案找到并反馈给老板。
你、张三、李四这三个人之间的信息传递,就是迭代的过程,因为你在问张三的时候,张三并没有像你代替你老板一样去问别人,而只是返回给你一个参考答案。这样的问询方式,我们就称之为迭代查询。
在默认情况下DNS服务器可以接受来自其他客户机(或其他DNS服务器)的迭代或递归查询,如果流量较大的服务器通常都只接受迭代查询,比如13台根服务器。因为如果它们对每一个解析请求都代为查询的话,那将会消耗极大的服务器资源,可能会导致服务器过载甚至崩溃。
关于DNS的迭代和递归查询我们先聊到这里。下节继续讨论DNS服务器高级属性的其他选项卡,敬请期待!
本文内容比较集中,如果有未讲到的地方,请大家指出,我会及时补充,谢谢!
|