DNS 域名解析的底层逻辑描述

简单粗暴的一句话解释

网站通过域名来识别和定位,而域名通过 DNS 解析得到对应的 IP 地址,最终通过 IP 地址实现连接和访问。

比如我们使用 ping 命令 ping 百度:

可以看到 baidu.com 解析为 ip:110.242.68.66

域名与 IP 地址

  1. IP 地址与域名是一对多的关系。一个 ip 地址可以对应多个域名,但是一个域名只有一个 IP 地址。
  2. 域名的出现就是为了方便管理和记忆 ip。
  3. IP 地址和域名之间的映射是通过域名系统(DNS)来实现的。

域名结构树

根据上图可以直观地看出域名结构:

  1. 根域

    位于域名空间最顶层,一般用一个 “.” 表示

  2. 顶级域

    一般代表一种类型的组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk

  3. 二级域

    用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn …

  4. 子域

    二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名

  5. 主机

    主机位于域名空间最下层,就是一台具体的计算机,如 www、mail 等都是具体的计算机名字

域名服务器 / DNS 系统

域名系统 (Domain Name System, DNS):因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名转换为便于机器处理的 IP 地址。

域名服务器:因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户 / 服务器模型。

主要有 4 种类型的域名服务器:

  • 根域名服务器

    根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的 IP 地址。
    根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就要先求助于根域名服务器。
    因特网上有 13 个根域名服务器,尽管我们将这 13 个根域名服务器中的每个都视为单个服务器,但每个 “服务器” 实际上是冗余服务器的集群,以提供安全性和可靠性。
    需要注意的是,根域名服务器用来管辖顶级域 (如.com), 通常它并不直接把待查询的域名直接转换成 IP 地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。

  • 顶级域名服务器

    这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。
    当收到 DNS 查询请求时,就给出相应的回答 (可能是最后的结果,也可能是下一步应当查找的域名服务器的 IP 地址)。

  • 授权域名服务器 (权限域名服务器)

    每台主机都必须在授权域名服务器处登记。为了更加可靠地工作,一台主机最好至少有两个授权域名服务器。
    实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器。
    授权域名服务器总能将其管辖的主机名转换为该主机的 IP 地址。

  • 本地域名服务器

    本地域名服务器对域名系统非常重要。
    每个因特网服务提供者 (ISP), 或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。
    当一台主机发出 DNS 查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。
    事实上,我们在 Windows 系统中配置 “本地连接” 时,就需要填写 DNS 地址,这个地址就是本地 DNS (域名服务器) 的地址。

域名解析过程

  • 域名解析是指把域名映射成为 IP 地址或把 IP 地址映射成域名的过程。前者称为正向解析,后者称为反向解析。
  • 当客户端需要域名解析时,通过本机的 DNS 客户端构造一个 DNS 请求报文,以 UDP数据报方式发往本地域名服务器。
  • 域名解析有两种方式: 递归查询递归与迭代相结合的查询。

1. 为了提高 DNS 的查询效率,并减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存。
2. 当一个 DNS 服务器接收到 DNS 查询结果时,它能将该 DNS 信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该 DNS 服务器时,该服务器就能够直接提供所要求的 IP 地址,而不需要再去向其他 DNS 服务器询问。
3. 因为主机名和 IP 地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息。

域名解析记录类型

相信买过域名的同学都使用过域名解析,还会发现有很多不同的类型和记录值,第一次用的时候还是有些懵的,所以去学习了一下,回来记录。

A

用来指定主机名(或域名)对应 IP 地址的记录。
用户可以将该域名下的网站服务器指向到自己的 web server 上,同时也可以设置域名的子域名。
比如我们添加一条 A 记录将 www 的主机指向 IP 为 192.168.1.1,那么当你访问 www 主机时就会解析到 192.168.1.1 这个 IP 上。

CNAME

常被称为别名解析,是主机名到主机名的映射。
当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录。与 A 记录不同,CNAME 的记录值不是一个固定的 IP,而是主机的别名地址。
别名解析可以提供更大的灵活性,便于统一管理。比如,当主机因某种因素的影响需要更换 IP 时,如果域名做了 CNAME 记录,就可以同时更新别名的解析指向,不需要进行新的解析操作。
应用场景包括 CDN、企业邮箱、全局流量管理等。

TXT

一般指为某个主机名或域名设置的说明,或者联系方式,或者标注提醒等等,相对简单。
TXT 记录常用的方式还有做 SPF 记录(反垃圾邮件)和 SSL 证书的 DNS 验证等。

NS

如果需要把子域名交给其他 DNS 服务商解析,就需要添加 NS 记录(Name Server)。
NS 记录是域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析。NS 记录中的 IP 即为该 DNS 服务器的 IP 地址。大多数域名注册商默认用自己的 NS 服务器来解析用户的 DNS 记录。
比如我的一级域名为 xxfer.cn,而博客使用的是 blog.xxfer.cn 这个二级域名,在将这个二级域名指向 GitHub 源服务器 IP 时,如果不做二级域名(子域名)的 NS 解析,会发现二级域名无法正确解析。一般想要使用个人域名的一个子域名时,需要在一级域名做两条 NS 解析记录,记录值一般为 ns1.domain.com、ns2.domain.com。

上面应该是比较常见的几种解析记录类型

SOA

SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何 DNS 记录文件中,都是以 SOA (Startof Authority) 记录开始。SOA 资源记录表明此 DNS 名称服务器是该 DNS 域中数据信息的最佳来源。
SOA 记录与 NS 记录的区别:NS 记录表示域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析;SOA 记录设置一些数据版本和更新以及过期时间等信息。

SPF

用于识别哪些服务器被允许代表你的域名发送电子邮件。
它通过列出已被授权为你的域名发送电子邮件的服务器来做到这一点。如果任何其他服务器试图代表你的域名发送电子邮件,它将被拒绝为未经授权的发件人。

AAAA

用来将域名解析到 IPv6 地址的 DNS 记录。
用户可以将一个域名解析到 IPv6 地址上,也可以将子域名解析到 IPv6 地址上。国内大多数 IDC 不支持 AAAA 记录的解析,因此如果想进行 AAAA 记录解析,则需对域名 NS 记录设置一些专业的域名解析服务商,由他们提供 AAAA 记录的设置。
国科云云解析支持 IPv6 环境下的 AAAA 记录解析。
AAAA 记录与 A 记录的区别就在于解析到的 IP 地址为 IPv4 还是 IPv6。

MX

邮件交换记录。
用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。如:用户所用的邮件是以域名 mydomain.com 为结尾的,则需要在管理界面中添加该域名的 MX 记录来处理所有以 @mydomain.com 结尾的邮件。
主要用于邮箱解析,在邮件系统发送邮件时根据收信人的地址后缀进行邮件服务器的定位。另外,MX 记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器。

PTR

“反向 DNS”,可以粗略理解为是一个指针记录,用于将一个 IP 地址映射到对应的主机名,也可以看成是 A 记录的反向,即通过 IP 访问域名。

SRV

服务定位资源记录,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。

URL 转发

通过服务器的特殊设置,将当前访问的域名指向另一个指定的网络地址。
根据目标地址的隐藏与否,URL 转发可以分为显性 URL 和隐性 URL 两种。

显性 URL:将域名指向一个 http (s) 协议地址,访问域名时,自动跳转至目标地址,地址栏显示为目标网站地址。

隐性 URL:与显性 URL 类似,但隐性转发会隐藏真实的目标地址,地址栏中显示为仍为此前输入的地址。

有点类似重定向

记录类型当然也会有共存冲突:

推荐视频

最后

不管在 DNS 还是 CDN 的应用中,Web 通信中还有一项非常重要的技术,感兴趣的同学可以观看这篇 CDN 服务商是如何解决安全问题的?