DNS 一般概览

本页面简要介绍域名系统 (DNS)。

如需大致了解 Cloud DNS,请参阅 Cloud DNS 概览。如需了解与 Cloud DNS 相关的关键术语,请参阅关键术语

DNS 是一个分布式分层数据库,用于存储 IP 地址和其他数据,并允许按名称进行查询。

换句话说,DNS 是易读域名的目录,可转换为计算机用于相互通信的数字 IP 地址。例如,当您在浏览器中输入网址时,DNS 会将网址转换为与该名称关联的 Web 服务器的 IP 地址。DNS 目录存储在全球各地,并存储在定期更新的域名服务器上。

使用 DNS 时,以下概念非常有用。

DNS 服务器类型

DNS 服务器存储域名数据库并根据来自网络中客户端的 DNS 查询来处理域名。

权威服务器

权威服务器是保存 DNS 名称记录(包括 A、AAAA 和 CNAME)的服务器。

非权威服务器根据以前的域名查询来构建缓存文件。它不存放原始名称记录。

递归解析器

递归解析器是将查询发送到权威服务器或非权威服务器以进行解析的服务器。递归解析器正如其名,它对给定名称依次执行查询,并返回最终结果。

这与迭代解析器形成对比,迭代解析器仅将转送的请求返回给下一个可能有响应的 DNS 服务器。

例如,在解析域名 google.com. 时,递归解析器必须确定谁对 .(DNS 的根地区)具有权威性。然后,它会询问对 .com. 具有权威性的域名服务器。最后,它会询问那些对 google.com. 具有权威性的域名服务器,并将 A 记录的 rdata 返回给客户端。

下面是递归解析器的实际运行示例,如果运行 dig +trace google.com,递归解析器将执行以下操作(8.8.8.8/Google 公共 DNS 就是这种解析器):

 dig +trace google.com
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> +trace google.com
;; global options: +cmd
.           168383  IN  NS  a.root-servers.net.
.           168383  IN  NS  b.root-servers.net.
.           168383  IN  NS  c.root-servers.net.
.           168383  IN  NS  d.root-servers.net.
.           168383  IN  NS  e.root-servers.net.
.           168383  IN  NS  f.root-servers.net.
.           168383  IN  NS  g.root-servers.net.
.           168383  IN  NS  h.root-servers.net.
.           168383  IN  NS  i.root-servers.net.
.           168383  IN  NS  j.root-servers.net.
.           168383  IN  NS  k.root-servers.net.
.           168383  IN  NS  l.root-servers.net.
.           168383  IN  NS  m.root-servers.net.
.           168383  IN  RRSIG   NS 8 0 518400 20190810170000 20190728160000 59944 .
    ITqCp5bSKwoG1P76GpNfDanh4fXxOtHuld5SJzEm9ez0U/K7kpmBm4TE
    cw82zuqtZlqiGOuq+90KHJEhD1fdX3FujgDqe3kaY/41LgFIo76RBeMP
    CorYg29lKQOBf7pLPiJWewFmnLsRXsvENzxNXl9mynX80EQSS2YlCWpr
    47i2j5SFpGDzmxls7LinB4VvwVLhy0FPwBaVc5NVqQoFS5ZkfKXCUz8x
    urExPT2OtPJeDiGzrQGmT6vDbYZtJRWWGK5tPIKZQyF/08YSJlrjebNa
    1nKZVN8SsO8s7elz6JGmdoM6D/1ByLNFQmKvU55ikaVSnXylqixLbJQI 7LyQoA==
;; Received 525 bytes from 127.0.0.1#53(127.0.0.1) in 22 ms

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            86400   IN  DS  30909 8 2
    E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400   IN  RRSIG   DS 8 1 86400 20190811170000 20190729160000 59944 .
    KXPRdZspxd6hZYRFx3cj7Yp3d6HDzOG5CmoK46ZrrlKnZkCYMPKzyFQ2
    15pA+jZ37MbQbhe6+S+C4AHWqv95DDsue85ha3ZmWGhnJxcLnDaL5Twp
    Z/W/a+1cTHhhbMZua1riw74mqvzRAF1kVerj7jrvWnOAOZCh69Dr4AFJ
    gRN4MAn+wCZDmPQCtkcGVJ9vyNV7Xra45B4ISqEo0xi8CXewp9cc+aW5
    TSjFRhj1RM9d3k+3Mrq6AAV8dVgWofYTg6Ihph/SfoIx4TrTrEbgfdsv
    MvuLPXvK6Y7oSh5WknbFduw7HQdo1jH3/QR54FORswBJT8VmYD7Zii88 tAjbRQ==
;; Received 1170 bytes from 192.58.128.30#53(j.root-servers.net) in 2 ms

google.com.     172800  IN  NS  ns2.google.com.
google.com.     172800  IN  NS  ns1.google.com.
google.com.     172800  IN  NS  ns3.google.com.
google.com.     172800  IN  NS  ns4.google.com.
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 -
    CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
    CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2
    86400 20190803044434 20190727033434 17708 com.
    rMmiNL7bYvJpB3Bc+WnqS2iiczm2PwxBvJcl7SL/vcTj88GsxM1ycTSV
    PsHZHxfrv1dv2C5BCSZ+mzeVBu8upLoeraQy+UVf3VXyt3i3rNGzcXYV
    8HSrHcXrRoAJopFim3Ge1xdZ+uERg3cTIcN2tJxxkCeqt/EcUTqtQl8t EAc=
    S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN NSEC3 1 1 0 -
    S84CFH3A62N0FJPC5D9IJ2VJR71OGLV5 NS DS RRSIG
    S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN RRSIG NSEC3
    8 2 86400 20190804045723 20190728034723 17708 com.
    jypPsaWVop9rzuf70CFYyiK0hliiJ+YYtkjgb3HVj9ICc57kLmv9DkvG
    DddF5GBQpqNEakzyJtya179MAdDT7RhJB4XfmY6fu5I5QTeIjchfP5wt
    7gU1AL7cqTmBAo2RWu62vtUytV09+O3KGFq5O+Cwr11dSTfq1yYyw6YW cMI=
;; Received 772 bytes from 192.41.162.30#53(l.gtld-servers.net) in 2 ms

google.com.     300 IN  A   172.217.7.14
;; Received 55 bytes from 216.239.32.10#53(ns1.google.com) in 13 ms

每个 DNS 客户端都会查询域名服务器。如果需要,递归解析器会查询其他域名服务器,一直到顶级域名服务器。上层域名服务器上的地区的 NS 记录会将解析器引向下层的其他域名服务器,最终到达缓存该地区的域名服务器或该地区的权威服务器。

地区

公开地区

公开区域在互联网上可见。您可以在公开区域中创建 DNS 记录,以将您的服务发布到互联网上。例如,您可以在公开可用区 example.com.(注意在末尾处使用句点)中为您的公开网站 www.example.com. 创建一个A 记录。

专用区域

专用地区是指无法通过公共互联网查询的地区。

委派子区域

DNS 允许地区所有者使用 NS 记录将子网域委派给其他域名服务器。解析器会按照这些记录,将对子网域的查询发送到委派中指定的目标域名服务器。

例如,您可以为 example.comsubdomain.example.com 创建单独的可用区,每个可用区都有自己的权威域名服务器。由于 subdomain.example.comexample.com 的子网域,该方法可让子网域所属网域的权威域名服务器位于其父可用区的可用区称为委派。委派实际上是指向子网域的权威域名服务器的指针。如需在 Cloud DNS 中启用委托,您可以为父网域的地区中的子网域添加 NS 记录。

水平分割 DNS

水平分割是一个术语,用于描述为同一网域创建两个地区的实例,其中一个地区供内部网络使用,另一个地区供外部网络(通常是互联网)使用。水平分割 DNS 可让您针对同一名称提供不同答案(不同的资源记录集),具体取决于具体要求。

例如,如果查询来自开发网络,您可以提供应用的开发或预演版本;如果查询来自公共互联网,则提供应用的正式版或公开版本。

记录

记录是 DNS 资源和域名之间的映射。每条 DNS 记录都有类型(名称和编号)、到期时间(存留时间)和特定类型的数据。

一些常用的记录类型如下:

  • A:地址记录,用于将主机名映射到其 IPv4 地址。
  • AAAA:IPv6 地址记录,用于将主机名映射到其 IPv6 地址。
  • CNAME:规范名称记录,用于指定别名。
  • MX:邮件交换记录,用于将请求路由到邮件服务器。
  • NS:域名服务器记录,用于将 DNS 地区委托给权威服务器。
  • PTR:指针记录,用于定义与 IP 地址关联的名称。
  • SOA:起始授权机构,用于指定主域名服务器和负责某个地区的管理员。托管在 DNS 服务器上的每个地区都必须具有 SOA(起始授权机构)记录。您可以根据需要修改此记录(例如,您可以将序列号更改为任意数字以支持基于日期的版本控制)。

记录集

具有相同名称、相同类型但具有不同数据值的记录称为记录集。 创建记录时,如果存在同名同类型的记录集,则此记录会添加到此匹配记录集中。如果没有匹配的集,系统会创建一个新集并将其附加到记录集列表中。

以下是具有多个同名同类型记录的记录集示例:

DNS 名称 类型 TTL(秒) 数据
db-01.dev.gcp.example.com A 50 10.128.1.35
db-01.dev.gcp.example.com A 50 10.128.1.10

如需查看 Cloud DNS 中支持的记录类型的列表,请参阅支持的 DNS 记录类型

子网域委派

创建记录时,请确保 NS 和 SOA 记录相互匹配。有冲突的 NS 和 SOA 记录会导致某些解析器拒绝委派并将其视为无效,并拒绝缓存对查询的 NO DATA 响应。这可能会导致当解析器查询您的公开托管地区以查找不存在的记录时,第三方递归解析器对您的公开托管地区进行大量意外的查询。

例如,假设 Cloud DNS 中有两个子网域:example.comsubdomain.example.comsubdomain.example.com 的 NS 和 SOA 记录不匹配。这两个区域都不包含任何 AAAA 记录。当某些第三方递归解析器对 subdomain.example.com 查询 AAAA 记录并收到 NO DATA 响应时,如果解析器检测到无效的 subdomain.example.com 委派,则会拒绝缓存该区域不存在的 AAAA 记录。这会导致重试查询。他们会依次查询所有 Cloud 域名服务器以获取此信息。

注册商

域名注册商是一个管理公开地区互联网域名预留的组织。注册商必须经通用顶级网域 (gTLD) 域名注册管理机构或国家/地区代码顶级网域 (ccTLD) 域名注册管理机构认可。这是“上层”域名服务器认可 SOA,并更新此地区的 NS 记录以将请求定向到缓存或权威域名服务器的方式。

SOA 序列号

SOA 序列号是 DNS 地区的版本号。为使所有域名服务器都具有最新的地区版本,它们必须具有相同的 SOA 序列号。在 DNS 代管地区中创建的 SOA 记录的序列号随着对地区记录集的每次事务性更改而单调递增。

但是,您可以将 SOA 记录的序列号更改为任意数字,包括 RFC 1912 中建议的 ISO 8601 格式的日期。

DNSSEC

域名系统安全扩展程序 (DNSSEC) 解决了 DNS 数据的漏洞。DNSSEC 是一套 IETF 规范,可向 DNS 客户端(解析器)提供 DNS 数据身份验证、经过身份验证的否认存在以及数据完整性。简而言之,DNSSEC 为软件提供了一种验证 DNS 数据来源并验证其在传输过程中未被修改的方法。

如需详细了解 DNSSEC,请参阅 RFC 4033

如需查看常规 DNS 术语的列表,请参阅 RFC 7719

后续步骤