在购买域名时,需要对DNS解析作一些相关的设置。里面涉及到一些什么A记录、NS记录、CNAME记录、MX记录。我一开始看不明白,直接看域名代理商的解释,很粗糙,还是看不懂。

后来看到《计算机网络自顶向下方法》中的介绍,才明白是怎么回事儿。

(以下说到的网址、主机名、域名等,都可以看作是一个概念,即都是形如 www.myfootprints.cn 形式的字符串)

客户机向一个域名(比如http://www.myfootprints.cn)请求一个文件(比如一个网页)时,为找到该文件在互联网上的位置,需要先找到该文件放在哪个服务器上,互联网使用 IP 地址来标识这个服务器的位置。IP 地址对计算机来说很方便,但对于人来说,很不方便记忆,于是人们使用域名。于是,这中间就需要一个域名到 IP 地址的转换。而 DNS 服务器就是提供这种服务的。

客户机上输入一个网址,这个网址被发送到 DNS 服务器,DNS 服务器返回一个 IP 地址,客户机再向此 IP 地址对应的服务器请求文件(比如一个网页)。

DNS 服务器的缓存中就存储着一条条域名与 IP 地址的映射关系的记录,被称为资源记录。资源记录是一个包含了下列字段的 4 元组:

(Name, Value, Type, TTL)

TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。Type 表示资源记录类型,一般有 4 种资源记录类型,分别是 A 记录、NS 记录、CNAME 记录、MX 记录。而 Name 与 Value 的值取决于 Type,以下举例说明,例子中省略 TTL 字段。

  1.  如果 Type = A,则 Name 是主机名,Value 是该主机名的 IP 地址。因此,一条类型为 A 的资源记录提供了标准的主机名到 IP 地址的映射。例如,(myfootprints.cn, 61.152.239.37, A) 就是一条类型 A 的记录。
  2. 如果 Type = NS,则 Name 是域(如 myfootprints.cn),则 Value 是知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名。这个记录用于沿着查询链路进一步路由 DNS 查询。例如 (myfootprints.cn, dns.myfootprints.cn, NS) 就是一条类型 NS 的记录。
  3. 如果 Type = CNAME,则 Value 是别名为 Name 的主机对应的规范主机名。该记录能够向请求主机提供一个主机名对应的规范主机名,例如,(blog.myfootprints.cn, myfootprints.cn, CNAME) 就是一条 CNAME 类型的记录。
  4. 如果 Type = MX,则 Value 是别名为 Name 的邮件服务器的规范主机名。例如,(mail.myfootprints.cn, myfootprints.cn, MX) 就是一条 MX 记录。MX 记录允许邮件服务器的主机名具有简单的别名。注意,通过使用 MX 记录,一个公司的邮件服务器和其他服务器(如它的 Web 服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名,DNS 客户机应当请求一条 MX 记录;而为了获得其他服务器的规范主机名,DNS 客户机应当请求一条 CNAME 记录。

上面提到了“权威 DNS 服务器”,它是位于 DNS 服务器层次的第三层的一种 DNS 服务器。

世界上分布着大量的 DNS 服务器,它们以层次方式组织。没有一台 DNS 服务器具有互联网上所有主机的映射。大致说来,有 3 种类型的 DNS 服务器:根 DNS 服务器、顶级域(Top-Level Domain, TLD) DNS 服务器和权威 DNS 服务器。

这些 DNS 服务器的交互方式可以通过以下例子说明:假定一个 DNS 客户机(比如一个 IE 浏览器)要确定主机名 www.myfootprints.cn 的 IP 地址。粗略来说,将发生下列事件。该客户机首先与根服务器之一联系,它将返回顶级域名 cn 的 TLD 服务器的 IP 地址。该客户机则与这些 TLD 服务器之一联系,它将为 myfootprints.cn 返回权威服务器的 IP 地址。最后该客户机为 myfootprints.cn 联系权威服务器之一,它为主机名 www.myfootprints.cn 返回 IP 地址。

如果一台 DNS 服务器是某特定主机名的权威 DNS 服务器,那么该 DNS 服务器会有一条包含该主机名的类型 A 记录。(即使该 DNS 服务器不是其权威 DNS 服务器,它也可能在缓存中含有一条类型 A 记录。)如果 DNS 服务器不是某个主机名的权威 DNS 服务器,那么该服务器将包含一条类型 NS 记录,该记录对应于包含主机名的域;它还将包括一条类型 A 记录,该记录提供了在 NS 记录的 Value 字段中 DNS 服务器的 IP 地址。举例来说,假设一台 cn TLD 服务器不是主机 www.myfootprints.cn 的权威 DNS 服务器,则该服务器将包含一条包括主机 myfootprints.cn 的记录,如 (myfootprints.cn, dns.myfootprints.cn, NS)。该 cn TLD 服务器还将包含一条类型 A 记录,如 (dns.myfootprints.cn, 61.151.239.191, A),该记录将名字 dns.myfootprints.cn 映射为一个 IP 地址。

DNS 报文分为查询报文和回答报文,而且,查询和回答报文具有相同的格式。如下图:

DNS 报文中各字段的语义如下:

  •  前12个字节是首部区域,其中有几个字段。第一个字段是一个16比特的数(Identification),用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户机用它来匹配发送的请求和接收到的回答。标志字段(Flags)中含有若干标志。1比特的“查询/回答”标志位指出报文是查询报文(0)还是回答报文(1)。当某DNS服务器正好是被请求主机的权威DNS服务器时,1比特的“权威的”标志位被置在回答报文中。如果客户机(主机或者DNS服务器)希望DNS服务器执行递归查询,将设置1比特的“希望递归”标志位。如果该DNS服务器支持递归查询,在它的回答报文中会对1比特的“递归可用”标志位置位。在该首部中,还有4个“数量”字段(Number of),这些字段指出了在首部后4类数据区域出现的数量。
  • 问题区域(Question)包含着正在进行的查询信息。该区域包括:①名字字段,用于指出正在被查询主机名字;②类型字段,用于指出正被询问的问题类型,例如是一个与名字相联系的主机地址(类型A)还是某个名字的邮件服务器(类型MX)。
  • 在来自DNS服务器的回答报文(Answers)中,回答区域包含了对最初请求的名字的资源记录。前面讲过每个资源记录中有Type(如A、NS、CNAME和MX)字段,Value字段和TTL字段。在一个回答报文的回答区域中可以包含多条资源记录,因为一个主机名可以对应多个IP地址(如冗余Web服务器)。
  • 权威区域(Authority)包含了其他权威DNS服务器的记录。
  • 附加区域(Additional Information)包含了其他一些有帮助的记录。例如,对于一个MX请求的回答报文的回答区域中包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域就可以包含一条类型A记录,该记录提供了对于该邮件服务器的规范主机名的IP地址。