12.1 DNS 简介
域名系统 ( Domain Name System , DNS ) 是由 Paul Mokapetris 开发的 , 在 Internet 建立的初级阶段 ( 19 世纪 80 年代初期 ), 他发现需要做一个后来成为 DNS 的系统 , 这个系统将 Web 地址转换为 4 个 8 位位组的 IP 地址 , 网络上的机器使用 IP 地址在 TCP/IP 上通信 ( 在第 10 章讨论过 ) 。 Mokapetris 提出,一个分层的域名空间可给机器分配用户友好的名字,并且把这些名字与 IP 地址关联起来。这些机器的组被细分为域,并且每个域都负责管理自己。
DNS 对于存储在 LDAP 数据库中的项目的位置也有帮助。 DNS 是客户 / 服务器模式的读取普通文件(类似于今天有时看到的 HOSTS 文件)的进程。在 Windows 操作系统里, DNS 可以回溯到 NT 4 ,而且在 Windows 2000 中才成为操作系统的组成部分。这主要是因为 Microsoft 将其默认的域名解析方式,从 NetBIOS 域名和 WINS 改变为 FQDN 和 DNS 。 Active Directory 与 DNS RFC 2136 (动态的记录更新)一起仍然进一步改变了事情。根据 DNSSEC 扩展( RFC 2541 )表中的提议,有很多内容已经改变,而更多的将要改变。 DNS 仍然是一个服务,分为服务器和客户(解析器)两部分。它与 Active Directory 之间的相互作用是相互依赖的,建议使用一个系统代替两个系统。
Active Directory 集成听起来像是必须的,但是它不是,除非计划创建域和林(关于这些内容的更多信息在第 19 章讨论)。即使它不是必须的,但是如果你想最小化管理,那么也应该集成这两者。可以运行 UNIX 机器;如果你是个完美主义者或者不需要 / 不想在邻近有个域,那么也可以以标准的主要和次要 DNS 配置的形式使用 Microsoft 机器之上的 DNS 。然而,首选的方法是林 / 域的结构,并且使用 Active Directory 通过域控制器传播。
本章的目标就是给出一个一般而言的、对于域名解析的理解,特别是对于 DNS 的理解,重点在于 Windows 2000 和 2003 之间的对比。也将学到另一种域名解析方法,即 Microsoft 早期使用的域名解析形式 NetBIOS 域名解析,它作为 WINS 提供的服务。
域名解析的起源
一切都是从 HOSTS 文件开始的。这些 HOSTS 文件是包含一行行记录的普通 ASCII 文本文件。实际上,除了 IP 地址到机器名的关联之外,这些记录中什么别的内容都没有,例如, 192.168.1.1 Trucker.Truckstp.com 。其想法就是 Trucker 是个容易记住的机器名字(人类很好记),并且解析器(客户系统上的一段软件和库)将读取这个文件,找到机器名字,提取其 IP 地址,并找到它。
仍然可以使用这些 HOSTS 文件。它们通常在 %SYSTEMROOT\ system32\drivers\etc 子目录下。你可以使用记事本编辑它们,并将你需要的任何机器添加到文件中,只要获得正确的机器名和 IP 地址,并且意识到网络上可能影响这些记录的改变。使用 HOSTS 文件很有可能犯错误,例如,重复的域名或地址。这个方法不好扩展。只要想到维持这些文件的大环境会有多么麻烦,就理解了其难度。每一台机器都要维护!没有安全!灾难的暗示都不可想象!
一般的域名解析
HOSTS 文件是一个危险的工作方式,所以域名解析功能必须以一种可靠的方式实现。 DNS 就是答案。它带有自己的数据库和工具,再加上它具有分布式本质。一个好的 DNS 设计应确保域名解析冗余性、一致性以及准确性。在任何具有一个以上网段的网络上都有一些域名解析方法。如果局域网只是一个没有域名解析的网段,那么使用广播。在网络上,计算机使用广播来找到其他计算机。遗憾的是,源计算机不知道目标计算机的位置,所以源计算机为了找到目标就广播,就好像在拥挤的房屋中要找到一个朋友,就要大叫那个人的名字一样。在房间里的所有人就像在本段上的所有计算机一样,都将听到广播,但是只有目标计算机响应广播。一旦目标计算机与源计算机之间建立了联系,然后它们之间的通信就以直接数据报的形式实现。
如果计算机在一个小的无路由的局域网上,那么它们也做广播。局域网不会永远保持很小,当它们变大时,广播就是它们被路由的原因之一。域名解析几乎总是涉及 IP 地址和机器名的关联,目的是为了定位并连接该机器提供的一些服务。在 TCP/IP 中,连接是对机器的,然后是对协议栈中消息要定向到的端口(例如,端口 80 ,用于访问 Web 站点)。因此,你要有一个容易记住的机器名,像 www.skillet.com 一样。还记得解析器吗?下面看一下对 www.skillet.com 的整个解析过程。
你想买一个新的长柄锅( skillet )。而你正在线,则启动浏览器并在上面输入 www.skillet.com ,浏览器将这个地址传递到解析器,解析器的工作就是调查并查找 Skillet 服务器。解析器是一系列库,它获取友好的名字 www.skillet.com ,并到 DNS 服务器。解析器对于做事的方式有特定的顺序。它将首先查看本地的(也就是首先查看你的系统),所以如果你在 HOSTS 文件中有内容,则不论好坏都将被处理。
解析器下一步将查看你的 TCP/IP 配置,发现首选的 DNS 服务器是谁,然后再查询该服务器。运行低版本操作系统的客户不以这种方式工作,基于 Windows 9 x (DOS) 的产品将首先查找 NetBIOS 域名。如果 NetBIOS 失败,则尝试 DNS ,但是在一些情况下,等待 NetBIOS 超时将显著增加延迟。原因很简单,这些系统被创建以主要运行 WINS 提供的 NetBIOS 域名解析服务。 DNS 及时地流行起来了,并且那些低版本操作系统的查找顺序现在过时了,再也无法反应出 TCP/IP 网络是如何解析主机名的。
NT 4 将仍然以这种方式解析,除非 NetBIOS 域名超过 15 个字符或者它在要查找的名字中找到一个点。如果这两种情况有一种成立,那么它首先尝试 DNS 。此时,我们还没有到达 Skillet.com 。
还记得我们的解析器吗?它在忙于查询首选的 DNS 服务器是否可以转换这个域名。 DNS 服务器检查它的区域和高速缓冲存储器,发现不匹配,则解析域名失败。然后,这个 DNS 服务器将寻找另一个 DNS 服务器并查询它。 DNS 服务器通常被安装在公司网络的边缘,并且它所做的所有事情就是将查询转发到外面的 DNS 服务器。这种类型的 DNS 服务器称为转发器。内部的 DNS 服务器查询转发器,转发器首先查看它是否可以解析这个域名。如果不能够解析,则将这个查询传递到 Internet 上的其他 DNS 服务器,直到成功匹配或者查询失败。成功的域名解析返回到本地的 DNS 服务器的高速缓冲存储器,因此,当其他的访问 Skillet Web 站点的尝试时,解析将更快。
好的!长柄锅现在订上了。感谢 DNS ,我们找到了到达 Skillet.com 的路,并且在我们上路的同时,看到了域名解析的过程。 DNS 是一个神奇的工具,而且它具有查找它要知道的东西的方法,这就是查询。下面是它能执行的查询类型:
· 递归查询。解析器创造了一个 DNS 服务器的查询,并且希望在尝试找到答案中不再有更多的交互。 DNS 服务器负责完成查找,并且它将开始使用其他的 DNS 服务器、发出进一步的查询、作为解析器的代理者继续查询。这些进一步的查询就是迭代查询。
· 迭代查询。迭代查询与递归查询相反(也称为非递归查询)。它向 DNS 服务器查询最好的答案, DNS 服务器必须响应,而不查询任何其他的 DNS 服务器。
· 反向查询。这种类型的查询由查找主机名的机器发出,它发出 IP 地址,希望得到对应的主机名。这个查询与众不同, DNS 服务器只检查它自己的区域。不管是否成功,搜索过程会在 DNS 服务器那儿得出结论。这种查询很少,并且仅由 Windows DNS 支持,以提供与更老的 DNS 版本的兼容性。
· 仅用于缓存服务器。这个 DNS 功能在技术上不是查询,但是它必须利用查询。这个服务器没有权限,也没有任何区域。它从客户接收查询并将查询传递到 DNS 网络进行解析。一旦它接受这个解析,它就将解析结果存储在缓存中一段时间,以防止其他客户重复相同的查询。这种方法加速了域名解析。
通过这些方法, DNS 服务器将顽强地从你的浏览器提供给解析器的 URL ( Uniform Resource Locator )中找出 IP 地址。它将返回两种结果中的一种:你要查找的东西或者错误。只要把它当作警犬就好理解了。
|