乐趣区

关于前端:DNS-系列二DNS-记录及工作方式你了解吗

在上一篇《DNS 系列(一):为什么更新了 DNS 记录不失效?》中,咱们次要解说了 DNS 和 DNS 流传,晓得了网络通信次要通过 IP 地址来进行,而域名零碎(DNS)则是保障用户在浏览器中输出域名之后,能够拜访到对应的网站服务器。那这个过程到底是如何进行的呢?

DNS 记录

DNS 记录是位于权威 DNS 服务器中的指令,提供域和主机名相干的详细信息,包含哪些 IP 地址与该域关联,以及如何解决对该域的申请。

当咱们在浏览器中输出网站地址时,浏览器首先要会在计算机外部缓存中查找属于该域名的 IP 地址,如果没有再到网络提供商的数据库或其余 DNS 服务器中查找。

DNS 记录由一系列 DNS 语法编写的文本文件组成。每个 DNS 记录都有一个独自的行。记录通常遵循以下格局:

<name> <ttl> <class> <type> <rdlength> <radata>
  • <name>:指域,即用户在浏览器中输出的名称
  • <ttl>:TTL 代表“生存工夫”,示意记录能够长期存储在缓存中的工夫(以秒为单位)
  • <class>:实践上,DNS 记录有不同的类别。然而理论中,记录常是 Internet(即 IN),
  • <type>:不同的记录类型
  • <rdlength>:指定后续数据字段的大小(可选值)
  • <rdata>:解析出的域名信息(例如 IP 地址)

咱们能够应用 Dig 命令查问 DNS 记录信息,例如:www.example.com

www.example.com.  69288  IN  A  93.184.216.34

这代表着该条记录能够在缓存中存储 69288 秒,它波及 Internet 上的 DNS 记录(IN),并指向了 A 类记录,同时域名被解析为 IP 地址(93.184.216.34)。

DNS 记录类型

下面咱们提到了 DNS 记录有不同的类型,这其实是指记录中的信息类型,比拟常见的有以下几种:

A 记录

Internet 上大部分 DNS 解析都是通过 A 类记录进行的,并指向一个 IPv4 地址。通过这个记录,用户在浏览器中输出域名后,客户端向相应的 IP 地址发送 HTTP 申请。因为 IPv4 地址的大小始终为 4 个字节,因而 rdlength 的值始终为 4。

AAAA 记录

AAAA 记录,也称为“quad A”,性能与 A 记录雷同。然而,它指向的是 IPv6 地址。因为 IPv6 的长度为 128 位(16 字节),所以这里也预约义了 rdlength 为 16。

SOA 记录

SOA 记录蕴含区域文件或 DNS 服务器的区域信息。因为 DNS 区域传输是将 DNS 记录数据从一个主名称服务器发送到一个辅名称服务器的过程,而 SOA 记录会首先被传输,所以每个 DNS 区域都须要一个 SOA 记录。

CNAME 记录

CNAME 记录(标准名称记录)是将记录值指向一个别名域,而不是 IP 地址。对于这种类型,rdata 字段会填充一个域名,该域名能够持续指向下一个域名或 IP 地址。

MX 记录

MX 记录是指邮件替换或 SMTP 电子邮件服务器,MX 记录能够存在多个,通过指定优先级来确定应用程序。

PTR 记录

PTR 记录(指针)是容许反向查找的 DNS 记录。与“A”记录恰好相反,它能够通过 IP 地址来查找对应的域名。

NS 记录

NS(域名服务器)记录会明确特定区域的管辖权。一个域通常会有多个 NS 记录,这些记录可批示该域的次要和辅助域名服务器。正确配置的 NS 记录能通知互联网可从哪里找到域的 IP 地址,从而实现加载网站或应用程序。

TXT 记录

TXT 记录蕴含了供用户或机器可读信息的文本。一个域能够有许多 TXT 记录。

SRV 记录

通过 SRV 记录,服务器能够为一些特定的服务提供主机和端口信息,例如即时通讯等。一些互联网协议须要应用 SRV 记录能力运作。

除了这些常见的 DNS 记录,还有很多不罕用的记录类型,例如:APL、CAA、DNAME 等等。理解了 DNS 记录,下一步就来具体看看 DNS 是如何申请到这些记录的。

DNS 申请

每当咱们在浏览器的搜寻栏中输出网址时,都会先向本地名称服务器(Local DNS)发出请求。Local DNS 是一个查看记录是否在本地缓存中的组件,它的查问是递归 / 迭代查问。

客户端和 Local DNS 是递归查问,这是最常见的一种查问形式。具体来说就是如果 Local DNS 不能响应申请,它会代替客户端向其余根域名服务器持续收回查问申请,即替客户端持续查问,而不是让客户端本人进行下一步查问。

而 Local DNS 和其余名称服务器之间是迭代查问。具体表现为如果 Local DNS 申请的 DNS 服务器无法回答查问,那么它会返回下一个 DNS 服务器的地址作为应答。而后 Local DNS 再向下一个 DNS 服务器发送一个新申请,持续查找直至查到记录。

所以 Local DNS 的查问总体过程是首先将之前获取过的 IP 地址记录到缓存中,并依据申请将后果传递给客户端。如果所需的记录不在 Local DNS 缓存中,则申请将转发到对应网络服务商的 DNS 服务器。如果以后 DNS 服务器无奈应答本次查问,它会将申请转发到不同的 DNS 服务器。

须要留神的是递归查问通常会比迭代查问更快。因为递归 DNS 服务器会缓存它执行的每个查问后果,并将后果保留一个 TTL 工夫。当递归解析器接管到其缓存中已有的 IP 地址查问时,它能够疾速将后果提供给客户端,而无需与其余 DNS 服务器进行通信。然而,在凋谢的 DNS 服务器上容许递归查问会产生安全漏洞,这种配置容易受到 DNS 放大攻打和 DNS 缓存中毒。

理解了 DNS 的记录,下次大家再遇到网站无法访问的错误信息时,就能够优先排查是不是 DNS 呈现了问题。如果你是网站管理者,能够查看 DNS 记录是否配置谬误,或者 DNS 服务器是否无奈响应。如果你是网站访问者,能够尝试切换网络或者更换本地 DNS 来解决。

举荐浏览

又拍云 Redis 的改良之路

对于 GIN 的路由树

什么是走索引?

退出移动版