通信网络/DNS
域名标识了互联网资源所在的区域或域名。
应用层包含各种应用程序。其中之一是 DNS,代表域名系统。第一个问题出现:’为什么需要这个应用程序?’ 首先让我们从一个现实世界的例子开始。世界上有许多标识可以用来识别一个独特的个人,例如社会安全号码、姓名和护照号码以及签发护照的国家/地区等。类似地,世界上每台计算机或主机和路由器都有一个唯一的 32 位 ‘IP’ 地址。假设我们需要世界其他地方的一些信息。我们需要知道该机器的 IP 地址。记住 IP 地址很困难,因为它包含所有数字。记住多个主机的 IP 地址会变得很麻烦。因此,几乎每个 IP 地址都被分配了一个名称,这使得人类更容易记忆。DNS 提供 IP 地址和域名的映射。(IP 地址的更多详细信息将在后面的部分中介绍。)
这种映射的频率如何?
答案:每次主机需要将域名转换为 IP 地址时,都会发出 DNS 查询。
1. 主机名到 IP 地址的转换
DNS 的主要目的是提供主机名到 IP 地址的转换,反之亦然。反向功能(将 IP 地址转换为域名)称为反向 DNS。
2. 主机别名
主机别名是指网络上同一台机器的另一个名称。它的使用是因为主机名可能有一个复杂的名称,而一个简单的术语可能会被使用。例如,relay.eastcost.rediff.com 可能有一个别名 rediff.com
3. 邮件服务器别名
电子邮件地址包含简单的字母或易于记忆的内容非常可取。例如,[email protected] 很容易记住,但如果使用原始邮件服务器地址,比如 la4.mail1.google.com,则很难记住
4. 负载分配
一组 IP 地址被提供给一个规范名称,以防止负载仅出现在一台服务器上。“当请求到达 DNS 服务器以解析域名时,它以循环顺序提供多个规范名称中的一个。这将请求重定向到服务器组中的多个服务器之一。一旦 DNS 的 BIND 功能将域名解析为服务器之一,来自同一客户端的后续请求将被发送到同一服务器。”[1]
当我们尝试集中 DNS 时会出现的问题。
- 单点故障
- 流量增加
- 远程集中式数据库
- 维护
由于上述原因,集中式 DNS 无法扩展,因此需要以分布式方式实现 DNS。DNS 是一个分布式系统,在许多命名服务器的层次结构中实现。通过委派实现去中心化管理。
Fig. Structure of Domain Name System (DNS)
DNS 的结构类似于 Unix 文件系统的结构。它是一个树状结构,其中根被称为根 DNS 服务器。树中的每个节点都与一个资源记录相关联,该资源记录包含与其相关联的信息,并且可以有任意数量的分支。树中最多可以有 127 个级别;但是,你永远不会找到这么长的域名。树中的每个节点都代表域名的一部分,该部分最多可以包含 63 个字符。
树中任何节点的完整域名是从该节点到根的路径中每个节点的序列。域名从节点到根读取,路径中的名称之间用点隔开。当且仅当两个节点具有相同的父节点时,它们才不能具有相同的名称。这保证了 DNS 树中的每个域名都对应于整个 DNS 结构中的唯一域名。例如,你不能在一个目录中拥有多个名为“Program Files”的目录,但如果你愿意,可以在 C 盘的根目录和“C:\Windows”目录(或任何数量的独立目录位置)中拥有名为“Program Files”的目录。
“域名只是域名空间的子树。域名的域名与该域名最顶端节点的域名相同。”[2] 考虑下图
Fig. sjsu.edu domain
如上图所示,“sjsu”域名是 edu 域名的一部分。类似地,“sjsu”域名中可以有许多域名。“子树中的任何域名都被认为是该域名的一部分。因为域名可以位于多个子树中,所以它可以位于多个域名中。”
Fig. Subdomain (domain under domain)
在了解了所有这些细节之后,第一个问题就出现了:如果域名内部还有域名,那么所有主机都在哪里?如果你还记得我们之前讨论过域名被索引到 DNS 中。一个域名可以拥有单个主机或一组主机。主机在逻辑上连接,并且可能分散到地理位置。你可能拥有 100 台连接到同一域名的主机,这些主机位于不同的国家/地区,或者所有这些主机也可能位于不同的网络中。通常,树中的叶子代表主机,并且可能指向单个网络地址、硬件信息和邮件路由信息。树的内部节点表示域名也可以用来表示网络上的主机。例如,在上图中,sjsu.edu 可以既是“圣何塞州立大学域名”,也是运行该域名的主机(更具体地说,是 Web 服务器)的名称。
一个域名可以在它内部包含许多子域名。要确定域名是否是另一个域名的子域名,你需要将域名与它的父域名进行比较。例如,se.sjsu.edu 是 sjsu.edu 域名的子域名。确定子域名的另一种方法是查看树的级别。
1. 首先,客户端查询根服务器以查找 edu(TLD - 顶级域名)DNS 服务器的 IP 地址。然后,
2. 客户端查询 edu(TLD)DNS 服务器以获取 sjsu.edu(权威服务器)DNS 服务器。然后,
3. 客户端查询 sjsu.edu DNS 服务器以获取 www.sjsu.edu(主机名)的 IP 地址。
根 DNS 服务器(根命名服务器)跟踪每个顶级域名 (TLD) 命名服务器的所有权威命名服务器。客户端查询根命名服务器以解析对给定域名的请求。作为响应,根命名服务器提供给定查询的 TLD 命名服务器的地址,该域名以该地址结尾。例如,如果客户端请求 google.com,根命名服务器将向客户端提供 com DNS 服务器的地址,以便解决其查询。顶级命名服务器保存其各自域名中权威命名服务器的列表。例如,com 域名包含 yahoo.com、google.com 等的地址。然后,查询器(由于存在两种解析请求的方法,迭代方法和递归方法,因此使用查询器一词)查询顶级命名服务器以解决返回权威命名服务器地址的查询。每个命名服务器查询都会向查询器提供所需的信息,或者使其朝着目的地迈出一步。
根命名服务器在解决任何 DNS 查询中发挥着关键作用。通常,DNS 提供缓存,这减少了根命名服务器上的负载。如果本地命名服务器无法在其缓存中找到给定的域名,则查询将到达根命名服务器。
Fig. 13 root name servers worldwide
全世界有 13 个根命名服务器。如果出现所有 13 个根命名服务器都无法访问的情况,互联网将无法正常运行。通常,主机向其最近的根命名服务器发送查询。如果这些服务器中的任何一个出现故障,请求将被转移到另一个最近的服务器。例如,如果你在印度,最近的根命名服务器在东京。如果东京的根命名服务器出现故障,所有 DNS 查询或流量将被转移到欧洲的服务器,这是印度的下一个最近的服务器。
正如之前讨论的那样,每个域名由一系列用点分隔的字符字符串(称为“标签”)组成。域名中最右边的标签被称为“顶级域名”(TLD)。每个 TLD 包含许多二级域名,例如 sjsu.edu。每个二级 TLD 可能包含许多三级域名,例如 se.sjsu.edu。这个过程可以继续下去。
请参考域名结构图,了解 TLD 在 DNS 层次结构中的确切位置。TLD 将互联网域名空间划分为多个域。最常用的域名是
1. com – 通常由商业机构使用。例如 Yahoo (yahoo.com)
2. edu – 通常由教育机构使用。例如 圣何塞州立大学 (sjsu.edu)
3. org – 由非营利组织使用。例如 IEEE (ieee.org)
4. mil – 由军事组织使用。例如 美国陆军 (army.mil)
5. net – 早些时候它被用来代表网络基础设施。如今它对任何商业机构开放。
6. gov – 用于代表政府组织。例如 NASA (nasa.gov)
除了上面提到的之外,还有许多其他域名可用。每个国家都有自己的域名空间,由国家名称表示。例如,美国有一个域名“us”,印度有一个域名“in”。
在深入了解权威域名服务器之前,我们先简要概述一下区域和委派。区域类似于域名,只是存在细微差异。顶级域名和顶级域名下的域名借助委派被划分为更小的单元。将这些域名划分为更小的单元的需要出现了,这样可以更容易地管理它们。这些小单元称为区域。例如,在根域名服务器下存在许多区域。它们可能是 com 区域、edu 区域、org 区域等。类似于子域的概念;这里我们也有区域存在于区域内。因此,我们在 com 区域、edu 区域、org 区域等内会有许多区域。例如,edu 区域可能包含区域名称 sjsu.edu、mit.edu 等。同样,com 区域可能包含 yahoo.com 区域、cisco.com 区域等。通过将 DNS 结构划分为区域,每个区域负责管理自己的域名。例如,如果 edu 域没有划分为不同的区域,那么 edu 域将负责管理 sjsu.edu、mit.edu 等,这对于管理 edu 域的人员来说将变得很麻烦,因此根据其责任将 edu 域划分为不同的区域是自然而然的。
请参考 DNS 结构图,查看权威域名服务器在 DNS 层次结构中的确切位置。所有组织(如 yahoo、msn、sjsu、ieee 等)都包含自己的权威服务器。权威域名服务器的目标是提供主机名到 IP 地址的映射。该组织的所有详细信息(如网页、邮件路由信息等)也在权威域名服务器中提及。每个权威域名服务器必须由其独立组织或该组织的服务提供商维护。
每个域或子域都有一个或多个权威 DNS 服务器,这些服务器发布有关该域的信息以及任何“下方”域的域名服务器。每个区域至少由一个权威域名服务器提供服务,该服务器包含该区域的完整数据。为了使 DNS 能够容忍服务器和网络故障,大多数区域都有两个或多个权威服务器。来自权威服务器的响应在响应数据包中设置了“权威答案”(AA)位。当我们进入资源记录部分时,我们将详细讨论权威答案。这使得它们在使用诸如“dig”之类的工具调试 DNS 配置时易于识别。
除了根 DNS 服务器、顶级 DNS 服务器和权威 DNS 服务器之外,我们还有一个本地 DNS 服务器。本地域名服务器不严格属于层次结构,这就是为什么您在域名系统结构图中找不到本地域名服务器的原因。然而,它在解析 DNS 查询时仍然间接发挥着重要作用。
每个 ISP 都有一个本地 DNS 服务器,有时被称为默认域名服务器。当主机连接到 ISP 时,ISP 通过 DHCP 机制(DHCP 的更多详细信息将在第 5.1 节中介绍)发布单个 IP 地址。您可以在 Windows 中使用“ipconfig”命令或在 Linux 中使用“ipconfig”命令来检查计算机的 IP 地址。
主机发出 DNS 请求,当它到达本地 DNS 服务器时,它首先检查缓存(有关 DNS 缓存的更多详细信息将在后面介绍),以查看它是否可以解决 DNS 请求。如果它在缓存中找到请求的信息,它会将响应返回给主机。它返回的响应称为非权威答案。如果在缓存中找不到请求的信息,则有两种方法可以解决给定的查询。
1. 迭代
2. 递归
简而言之,我们可以说本地 DNS 服务器是将查询转发到 DNS 层次结构的代理。通过层次结构解析查询的整个过程对用户来说是透明的。
让我们看看迭代方法是如何工作的。我们假设主机 se.sjsu.edu 正在请求 mail.yahoo.com 的 IP 地址。我们还假设 mail.yahoo.com 的权威 DNS 服务器是 dns.yahoo.com。DNS 解析请求的方式如下所示。
Fig. Host ‘se.sjsu.edu’ is requesting for IP address of mail.yahoo.com – Iterative Query
主机 se.sjsu.edu 向本地 DNS 服务器发送 DNS 查询,以将查询中提供的 hostname ‘mail.yahoo.com’ 转换为 IP 地址。作为响应,本地 DNS 服务器,即 dns.sjsu.edu,将查询转发到根 DNS 服务器。根 DNS 服务器找到后缀为“com”,并返回负责“com”的顶级 DNS 服务器的 IP 地址列表。然后,本地 DNS 服务器将相同的查询发送到从根 DNS 服务器提供的顶级 DNS 服务器之一。顶级 DNS 服务器找到后缀 yahoo.com,并返回本地 DNS 服务器,其中包含 Yahoo 的权威 DNS 服务器的 IP 地址,即 yahoo.com。最后,本地 DNS 服务器再次将相同的查询发送到权威 DNS 服务器 dns.yahoo.com,该服务器反过来会响应 mail.yahoo.com 的 IP 地址。
上述过程可以总结为
User's computer: "What is the IP Address of mail.yahoo.com?" Local name server: "I don't know that. But I'll check with a name server that does."
Local name server: "What is the IP Address of mail.yahoo.com?" Root name server: "Here are the addresses for the TLD name servers for .com."
Local name server: "What is the IP Address of mail.yahoo.com?" TLD .com name server: "Here are the addresses of the authoritative name servers for yahoo.com."
Local name server: "What is the IP address of mail.yahoo.com?" Authoritative mail.yahoo.com name server: "Here is the IP address for mail.yahoo.com, it's 205.139.94.60."
虽然上面提到了一种方法是迭代方法,但实际上它使用了迭代和递归。se.sjsu.edu 给 dns.sjsu.edu 的查询是递归查询,但是本地 DNS 服务器到根 DNS 服务器、顶级 DNS 服务器和权威 DNS 服务器的查询是迭代的,因为所有结果都返回给本地 DNS 服务器 (dns.sjsu.edu)。
我们刚刚了解了迭代查询如何解决任何 DNS 查询。现在让我们看看递归方法是如何工作的。
Fig. Host ‘se.sjsu.edu’ is requesting for IP address of mail.yahoo.com – Recursive Query
递归查询的完整流程如下所示
1. 请求主机“se.sjsu.edu”请求其本地 DNS 服务器“dns.sjsu.edu”解决 DNS 查询“mail.yahoo.com”并给出其 IP 地址
2. 本地 DNS 查询向根 DNS 服务器询问“mail.yahoo.com”的 IP 地址
3. 根 DNS 服务器在查询中找到“com”后缀,并请求负责 com 的顶级 DNS 服务器之一
4. com 顶级 DNS 服务器跟踪所有权威 DNS 服务器;它向 Yahoo 的权威 DNS 服务器 (dns.yahoo.com) 询问 mail.yahoo.com 的 IP 地址
5. Yahoo 的权威 DNS 服务器将 IP 地址返回给查询权威 DNS 服务器的 com 顶级 DNS 服务器
6. 顶级 DNS 服务器将此 IP 地址返回给根 DNS 服务器
7. 根 DNS 服务器反过来将 IP 地址返回给本地 DNS 查询。
8. 主机收到其所需查询的 IP 地址。
理论上,递归查询以上面解释的方式解析。但在实践中,递归查询不被使用,因为它效率不高,很快就会溢出其堆栈。
在上面解决查询的两种方法(迭代和递归查询)中,我们看到总共发送了 10 条消息。这降低了 DNS 的效率。因此,设计了一种缓存机制,以便减少网络空间中 DNS 数据包的泛滥。DNS 广泛使用缓存,以提高性能,否则通过根 DNS 服务器、TLD 服务器和权威 DNS 服务器会导致性能下降。缓存减少了互联网上的 DNS 数据包流量。
当 DNS 查询被解析并获得该域名的 IP 地址时,DNS 服务器会简单地缓存来自回复的必要信息。在上例(参见图 5)中,每次本地 DNS 服务器 dns.sjsu.edu 从任何 DNS 服务器收到 DNS 回复时,它都可以将任何必要的信息缓存到其缓存中以供将来使用。例如,如果与 IP 地址对应的主机名被缓存到本地 DNS 服务器中,则当将来收到该主机名的查询时,本地 DNS 服务器可以提供该主机名的 IP 地址,尽管它不是该主机名的权威服务器。本地 DNS 服务器可以存储或缓存 TLD 服务器的 IP 地址,从而避免了向根 DNS 服务器查询 TLD 服务器的 IP 地址的时间。
由于主机名到 IP 地址的映射可能会发生变化,因此 DNS 服务器会在一段时间后丢弃其缓存。
当向本地 DNS 服务器发出查询并在其缓存中找到映射时会发生的情况示例。
User's computer: "What is the IP address of mail.yahoo.com" Local DNS server: "I know that. The IP address is 209.73.168.74.
注意:迭代或递归查询之前已经执行过一次,在我们获得如此快速的响应之前。
更新/通知机制是在 RFC 2136 下设计的。许多公司,通常是所有 ISP,都使用 DHCP(DHCP 在第 5.1 节中有更详细的介绍)来为连接到它们的(服务器)主机分配 IP 地址。为此,DNS 需要支持资源记录(RR - 资源记录在后面的章节中有介绍)的动态添加和删除。这种机制称为 DNS 动态更新。
动态更新功能允许授权更新者向名称服务器具有权威性的区域添加或删除 RR。借助 NS 记录,授权更新消息被发送到该区域的主节点。如果名称服务器收到任何更新消息,并且该名称服务器不是该区域的主节点,那么该消息将向上游转发到其主服务器。如果接收该消息的服务器也是从属服务器,那么它将再次向上游转发。此过程称为“更新转发”,它将持续进行,直到更新消息被传送到该区域的主节点。
主服务器保持着区域数据的可写副本。从属节点会在直接或间接执行更新时收到通知。
每个域名,无论是顶级域名,还是权威服务器,或仅仅是单个主机,在 DNS 分布式数据库中都有一组与之关联的资源记录。这些 RR 提供主机名到 IP 地址的映射。RR 以二进制格式存储以供内部使用,但当 RR 在网络空间中传输时,它是文本格式。
当向 DNS 服务器发出查询时,查询者(发送该查询的主机/服务器)会收到一个响应,该响应就是与之关联的资源记录。
资源记录是一个 5 元组,包含以下内容:
( Name, Time to live, Class, Type, Value)
1. 名称:它是此资源记录所属的域名。同一个域可能存在多个资源记录。
2. 生存时间:这是一个 32 位整数。TTL 以秒为单位。值为零表示数据不应被缓存。
3. 类:该字段通常包含值“IN”,表示该记录是否用于互联网。
4. 类型:类型字段定义资源记录的类型 - 地址、名称服务、邮件交换、规范名称。
5. 值:该字段可以是数字、ASCII 字符串或任何域名。名称和值的语义取决于类型字段。
下面列出了各种类型字段及其详细信息。
1. 类型 = 'A'
‘A’ stands for address where Name = Hostname (e.g. yahoo.com) Value = IP address (e.g. 216.109.112.135)
因此,它可以提供主机名到 IP 地址的映射。
2. 类型 = 'NS'
‘NS’ stands for Name Service Name = Domain name (e.g. yahoo.com) Value = Host name of Authoritative DNS server (e.g. dns.yahoo.com)
3. 类型 = 'CNAME'
‘CNAME’ refers to canonical name. It is used to define alias hostname Name = Alias name (e.g. www.ibm.com) Value = Real name of that host (e.g. servereast.backup2.ibm.com)
4. 类型 = 'MX'
'MX’ stands for Mail Exchange. Name = Domain name (e.g. yahoo.com) Value = Name of mail server associated with that name. (e.g. mx.mail.yahoo.com)
我们已经完成了 DNS 的大部分内容,现在让我们看看 DNS 消息是什么样子的。下图提供了一个 DNS 消息格式。查询和响应都在同一个消息格式中。
Fig. DNS message
1. 标识 - 这是一个 16 位数字,通过它来识别查询。这个数字由客户端设置,当响应发送回客户端时,使用相同的标识号。
2. 标志由 16 位参数组成。
a) The first (0th)bit indicates query(0) or response(1) b) Next three bits (1-4) indicates ‘Standard Query (0)’, ‘Inverse Query (1)’ and ‘Server Status Request (2)’. c) The 5th bit field indicates Authoritative answer. The name server is authoritative for the domain in the question section. d) The 6th bit field is set if message was truncated. With UDP this means that the total size of the reply exceeded 512 bytes and only the first 512 bytes of reply were returned. e) The 7th bit field indicates Recursion Desired . This bit can be set in a query and is returned in the response. f) The 8th bit field indicates Recursion Available or not. g) The next 3 bits (9-11) has to be 0. h) The Next 4 bits (12-15) give a return code where 0 signifies No Error and 3 signifies Name Error.
3. 标记为“数量...”的字段,每个字段都给出消息中相应部分的条目数量。
4. 问题部分由客户端填写,包含有关正在发出的查询的信息。每个问题都有一个名称和一个类型与之关联。
5. 答案、权威和附加信息部分包含一组描述域名和映射的资源记录。
到目前为止,我们已经了解了 DNS 如何用于查找网络空间中任何主机的 IP 地址,以及它的用途。这里最重要的一个问题是:这些资源记录是如何插入到 DNS 数据库中的?为此,我们考虑一个现实世界的例子,假设一家名为 INetwork 的公司成立,并且想要在互联网上发布一个网站。
INetwork 公司联系注册商注册其域名“inetwork.com”。注册商负责维护域名的唯一性。
INetwork 公司向注册商提供了其主权威 DNS 服务器和从属权威 DNS 服务器的名称和 IP 地址。注册商将信息以资源记录的形式输入并存储到 DNS 数据库中。
( inetwork.com, NS , dns.inetwork.com ) ( dns.inetwork.com, A , 203.166.178.34 )
该公司需要确保其 Web 服务器 inetwork.com 的类型为“A”的资源记录和公司邮件服务器的类型为“MX”的资源记录被输入到其权威 DNS 服务器中,以确保其他人可以访问您的网站,而员工可以使用该系统发送邮件。
- ↑ Load_balance_dns.html
- ↑ DNS and BIND – Paul Albitz & Cricket Liu, Published by O’Reilly publicactions. Ch.2 Pg13, 14.
- Microsoft Technet,来自 Microsoft Windows 2000 TCP/IP 协议和服务技术参考的第 16 章,由 Microsoft Press 出版,作者为 Thomas Lee 和 Joseph Davies
- 计算机网络 - 以互联网为特色的自上而下的方法。J Kurose & K Ross
- 计算机网络 - Andrew Tanenbaum
- http://www.zytrax.com/books/dns/ch8/
- 来自 Cisco Systems 的资料 http://www.cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a0080094727.shtml#t6
- http://www.verisign.com.au/dns/fyi.shtml
- 我们了解了 DNS 的必要性。
- DNS 如何有用,以及 DNS 如何将 IP 与域名进行映射。
- 解决查询的方法 - 迭代和 dns... 两种方法的工作原理。
- 缓存如何有用。
- 什么是资源记录以及 DNS 的作用。
- 记录如何插入到 DNS 中。
1. 如何找到任何网站的 IP 地址,例如 google.com
答:C:\Documents and Settings\Richard>nslookup google.com
服务器:home
地址:192.168.1.254
非权威答案
名称:google.com
地址:72.14.207.99、64.233.167.99、64.233.187.99
2. 如果根名称服务器在解析 DNS 请求时出现大量流量,如果根名称服务器无法解析给定的查询,DNS 数据包会怎么样?
答:根名称服务器会简单地丢弃该数据包。
3. 当您 ping 网站(例如 yahoo.com)时,是否可能获得不同的 IP 地址?如果可能,请说明原因。
答:是的。这是因为 yahoo.com 在多台机器上运行,因此运行 yahoo.com 的不同机器被注册到 DNS 中。因此,存在多个类型为“A”的资源记录,它们包含不同的 IP 地址。
4. 在 DNS 数据库中,是否可能为 yahoo.com 有多个条目,一个类型为“A”,另一个类型为“MX”?
答:是的。建议使用相同的域名,尽管这不是必需的。
5. 资源记录可以缓存多长时间?
答:资源记录中的 Time_To_Live 字段决定了资源记录在缓存中的保留时间。它以秒为单位表示。