DNS 记录

我们说过 DNS 的主要作用是 将域名解析为 IP,但这并不是唯一的作用。
域名到 IP 的解析,只是 DNS 记录类型的其中一二,IPV4 下是 A 记录,如果是 IPV6 的网络,则是 AAAA 记录。
DNS 还有其它类型的记录,本文我们将做简单的介绍。

基础知识

比如你拥有域名 domain.com,那么 a.domain.com 或者 sub.a.domain.com 都是 domain.com 衍生出来的,这个时候,我们称 domain.com根域名,除了根域名之外所有衍生出来的域名,并且针对它们的解析,叫 泛解析
访问网站的时候,一般是 www.domain.com 这样的域名,但这也是一个子域名,www 是 World Wide Web 的简写,使用的人多了,www.domain.com 就成为网站通用的域名了。
一般来说,针对 根域名 的配置,其规则名是留空或者是 @ (视 DNS 托管商而定);而泛解析的规则名是*
有意思的是,我们也经常能看到,有些网站呀,配置了 www 这个子域名的记录,于是 www.domain.com 能访问了,却忘记再配置一个 @ (或留空) 根域名的记录,然后 domain.com 其实是访问不了的。

在设定 DNS 规则的时候,一般也会允许设定 TTL,表示这个规则 Time to Live 的时间,相当于 缓存的有效时间。一般来说,越短越好,但这样又会对 DNS 造成额外的负担,甚至会降低 DNS 的解析速度,所以最终要选择一个合适的值,比如 10 分钟,也就是 600,单位是
现在 (2019 年) 中国一般的家庭网络环境,一个路由器+光猫的配置是很常见,而这种配置,意味着 3 个 DNS 服务器 (路由器、光猫、ISP)的存在,光这 3 个 DNS 服务器之间的缓存、协商,就存在一定概率的滞后期。而 ISP 之外的 DNS 记录查询,面对的是一个范围更大的国际互联广域网,对于缓存的处理,也会有更大概率的滞后。
DNS 记录有些 TTL 设置太大了,这个缓存过期的时间很长,如果你改了域名的 DNS 记录,自然不会那么快生效。另外,还有比较尴尬的情况是,到具体的 DNS 服务器上,比如路由器、光猫上的,甚至 ISP 提供的,它们对 TTL 的约定是否完全遵循,也不尽然的,明明是约定 5 分钟过期的,可能要 10 分钟,甚至 20 分钟才过期。
因此,这就进一步加剧了 DNS 缓存滞后 的现象。你修改 DNS 记录后,服务商可能会提示,需要 48 小时才能全球范围内生效,虽然实际情况可能几分钟就生效了,但 48 小时确实是面对不可知的网络环境的保守估计。


A 记录

简单的来说,就是一个 IP 地址,让一个域名被访问的时候,能对应到其背后服务器的 IP。

AAAA 记录

A记录 是针对 IPV4 的,而 AAAA记录 则是针对 IPV6 的,也是一个 IP。

CNAME 记录

A 记录的值,是 IP 地址,而 CNAME 的记录,则是其它域名。比如将 www.domain.com CNAME 的记录设定为 name.domain.com,那么 www.domain.com 最终解析的 IP 是 name.domain.com 对应的 IP。
我们可以简单的把 CNAME 理解为 别名,最终的记录是从其它域名里来的。不仅仅是 IP 地址(A 记录),其它类型的记录 (比如 TXT、MX) 也都会过来,因此 CNAME 是具有排它性的。当然,CNAME 上过来的数据,除了 A 记录之外的其它类型是否支持,要看 DNS 解析服务商的具体情况而定。
CNAME 还可以简单理解为 动态 IP,比如我们通过 CNAME 绑定某个网站的访问,那么,如果这个网站的最终服务器 IP 发生了变化,只要服务商保证 CNAME 对应的域名可被访问,那么我们自己的域名就无需再修改了。如果是 A 记录的话,则必须要进行修改。

CNAME 相当于无差别地转发了源域名上的记录,从这个角度来说,是不允许在根域名上使用 CNAME 的。这也就是为什么我们在一些域名服务商提供的 DNS 记录设置中,根域是无法设定 CNAME 的原因。
但具体情况具体分析,使用者如果要将根域名进行 CNAME ,其真实的意图并非转发所有类型的记录,只是单纯希望获得 A 记录,也就是可访问的 IP 地址而已。只从这个角度出发,根域名当然也可以被 CNAME,当然,最终视服务商是否支持了。

MX 记录

MX 记录是收发邮件用的。比如 im@gmail.comim 相当于 gmail.com 的内部名称,而发邮件给这个地址的时候,首先要找到的是 gmail.com 对应的邮件服务器。
如果这个时候 gmail.com 单纯使用 A 记录,那么 『如何做到超高的可用性』就会遇到些问题。同一个域名 (包括子域名)的 MX 记录是可以多条的,而且有优先级,真的有一个 MX 记录对应的服务器挂了,那么低优先级的就会顶上,来负责邮件的收发。而 A 记录则只有一条,虽然有些负载均衡性质的服务商允许 A 记录有多个 IP 的设定,但最终查询的结果一般也只使用其中一条。
假设只用 A 记录,而没有 MX 记录,看似是一种更简单的设计,但拒绝合理的冗余,通常都会导致更麻烦的后果。如果 gmail.com 的 A 记录,又对应了网站,还对应了邮件服务器,那么意味着大多数人大多数的场景中,Web 与 Mail 的服务必须要处于同一台服务器上,这就过度耦合了。

TXT 记录

TXT 记录是更加通用的类型,以一串字符作为记录值,一般可以用来校验当前域名的归属。

TXT 记录,理论上能支持到 65535 的长度。
DNS 记录,一般也不会直接限制总记录数。
曾经也想,如果我们将一个人的所有博客内容,直接写入到域名的 TXT 记录中,那么,一个博客的存在,就不需要什么 Web 服务器了。而且,还能获得全球分布式部署的优势。虽然,对于 DNS 这种基础服务设施来说,因为这个操作,会导致整体的存储容量飙升,但就全球互联网的发展而言,这点容量不值一提。
假设说互联网的规模增长了 100 倍,一般是指其硬件的基础设置倍增,而软件上 (比如 DNS) 的增长是非常有限的,相比 100 倍,它能有个 1 倍增长就不错了。
互联网级别的软件,DNS 算一个,或许诞生得太早,也限制了它最终的形态。