@snownstone

dig DNS - 1

Published on

因为看到了很多好的教程,讲解耐心、全面又清晰,于是我既没有必要也没有能力和耐心再原样复述,所以下面主要围绕 DNS,记录一些要点并附上参考,仅作梳理和保存之用。


什么是 DNS(Domain Name System)?

至少从搞这个博客起,就开始接触域名和 DNS。

snownstone.com 就是我为博客网站买下的域名,在网站部署时对此要做一些操作。例如,博客是免费部署在 Vercel 服务器上的,于是 Vercel 会负责我这个域名的解析。所谓解析,就是说 Vercel 的 DNS 服务器会记录网站 IP 和域名 snownstone.com的对应关系,于是当其他连网的电脑想要访问时,就能通过 DNS 查询找到 snownstone.com 这个域名对应的 IP 进而建立网络连接。这是互联网工作机制的核心构成之一,因为依照 TCP/IP 协议,两机要连接通信,必须知道对方 IP,而要拿到 IP,就需要 DNS 查询,或是直接使用缓存中已有的信息,总之必不可少。

如 DNS 中的 S(system) 所示,围绕域名与对应 IP 查询,有一整套系统和工作机制。简单讲,所有域名与网络 IP 的对应关系被分散地、系统地、有层级地保存在全世界众多的 DNS 服务器上,并且,通过规定好的一套查询机制,确保查询的成功有效。DNS 查询本身也需要连网且知晓对方机器的 IP,这部分 IP 信息是提前已知、保存配置在本机中的。

DNS 查询

具体地,DNS 查询流程大致如下:

  1. 网络应用如浏览器有自己的缓存(cache),会首先被查询;若无结果,则会进入步骤 2,联系操作系统发起进一步的查询

  2. 本机操作系统内置一些基本的 DNS 查询功能,也被称作系统/存根解析器(system/stub resolver),可以查看 hosts 等静态文件中手动添加保存的域名和 IP 地址;若无结果,则将查询请求通过局域网转发给路由器,后者会按照自己默认的 DNS 服务器 IP 地址(通常是网络运营商 ISP 的 DNS 服务器)再向外转发查询请求

  3. 递归 DNS 服务器(recursive DNS server)也会首先查询自己的缓存,若无果则将负责向其他更高层级 DNS server 问询,直到最终拿到 IP 地址或域名不存在等响应消息(并存入自己的缓存),然后再将查询到的 IP 信息原路依次返回给 2,1;

  4. 3 转发出的查询请求,会自上而下依次访问多层级 DNS 服务器直到拿到 IP,途中会依次经历:root nameserver,TLD (Top Level Domain) nameserver, authoritative nameserver

所以,以上 1 和 2 发生在自己的机器内部,从 2 到 3,查询请求就离开自己的机器进入网络去到其他 DNS 服务器了。

参考

关于 DNS、查询流程以及过程中涉及的不同类型的 DNS 服务器,更详细的图文内容可以参考 DigitalOcean 与 Cloudflare 提供的解释文档: