什么是 DNS

上一篇文章中,我们提到IP地址是网络中的地址。那为什么我们访问网站可以以Google.com直接访问谷歌,而不是查找谷歌的IP进行访问呢?

这背后就有 DNS 的作用。

DNS 的全称是 Domain Name System(域名系统)。如果用一句最简单的话来解释:

DNS 就是负责帮你“查网站地址”的系统。

我们平时访问网站时记住的是域名,例如:

google.com

但计算机在网络中寻找服务器时,更依赖 IP 地址,例如:

142.250.xxx.xxx

DNS 做的事情,就是在域名和 IP 地址之间建立联系。

你可以把它想象成手机里的通讯录

  • 你记住的是「张三」;
  • 手机里保存的是张三的电话号码;
  • 你点击张三的名字,手机就知道应该拨哪个号码。

在互联网中也是一样:

  • 域名:方便人记忆的名字;
  • IP 地址:计算机用来寻找服务器的地址;
  • DNS:负责根据域名找到对应的 IP 地址。

为什么不能直接用 IP 地址?

既然计算机最终还是需要 IP 地址,那为什么网站不直接让我们输入 IP 呢?

当然可以。

例如,你可以直接通过一个网站的 IP 地址访问它。但问题是,IP 地址通常是一串不太容易记住的数字,而且网站背后的服务器也可能发生变化。

相比之下:

google.com

显然比:

142.250.xxx.xxx

更容易记。

而且一个网站可能使用多个服务器,甚至会根据用户所在的位置,让用户连接到不同的服务器。

所以,对于人来说,记住一个简单的域名要方便得多。

DNS 就像一个中间人:

你告诉它网站叫什么,它帮你找到网站在哪里。

打开一个网站时,DNS 做了什么?

我们来看一个非常简单的例子。

假设你想打开:

example.com

你在浏览器地址栏输入网址,然后按下回车。

这时候,浏览器首先需要知道:

example.com 对应哪个 IP 地址?

于是,设备会向 DNS 服务器发起查询。

DNS 服务器找到对应的 IP 后,把结果告诉设备。

接下来,浏览器就可以根据这个 IP 地址去连接网站服务器,并把网页内容加载回来。

整个过程可以简单理解为:

输入域名 → DNS 查找 IP → 找到服务器 → 加载网页

这个过程通常非常快,所以我们平时几乎感觉不到 DNS 的存在。

DNS 服务器是什么?

那么问题来了:

DNS 到底在哪里?

实际上,DNS 并不是一台服务器,而是一整套由很多 DNS 服务器组成的系统。

我们平时使用电脑、手机连接网络时,通常会自动获得一个可以使用的 DNS 服务器。

当你访问网站时,设备就会把类似:

example.com 的 IP 地址是什么?」

这样的请求发送给 DNS 服务器。

DNS 服务器找到答案后,再把 IP 地址返回给你的设备。

你可以把 DNS 服务器理解成一个网络地址查询员

你不用知道它是怎么工作的,只需要告诉它:

「我要找 example.com。」

它负责帮你查到对应的地址。

DNS 是怎么找到网站地址的?

如果 DNS 服务器自己已经知道答案,事情就很简单。

例如,它之前已经查询过:

example.com → 123.123.123.123

那么这次再有人询问,它就可以直接把这个 IP 返回。

这就是 DNS 缓存

如果它自己不知道,就需要继续向其他 DNS 服务器询问。

DNS 的整个系统采用了类似「一层一层查找」的方式。

你可以把它想象成寄快递。

你只知道:

我要把东西寄给「某某小区的张三」。

快递系统会根据地址逐步找到:

国家 → 城市 → 区域 → 小区 → 具体住址

DNS 的工作方式也有些类似。

它会根据域名的不同部分,逐级找到负责这个域名的服务器,最后找到具体的 IP 地址。

对于普通用户来说,不需要记住这些服务器的具体名称,只需要理解:

DNS 是一个分层工作的地址查询系统。

什么是 DNS 缓存?

DNS 缓存其实非常容易理解。

比如你刚刚问朋友:

「附近那家咖啡店在哪里?」

朋友告诉你地址。

过了一会儿,另一个朋友又问同样的问题,你不需要重新去问咖啡店老板,直接把刚才得到的地址告诉他就可以了。

DNS 也是这样。

设备和 DNS 服务器都会暂时保存一些查询结果。

如果你刚刚访问过某个网站,再次访问时可能不需要重新查询,直接使用之前得到的结果即可。

这样做可以:

  • 减少重复查询;
  • 减少等待时间;
  • 降低 DNS 服务器的压力。

所以,DNS 缓存也是我们平时访问网站能够快速完成的一部分原因。

DNS 只有一种记录吗?

不是。

DNS 不只是保存「域名对应哪个 IP」这么简单。

不同类型的 DNS 记录,可以保存不同的信息。

普通用户最常听到的主要有以下几种。

A 记录

A 记录可以理解成最常见的「地址记录」。

它负责告诉 DNS:

这个域名对应哪个 IPv4 地址。

例如:

example.com → 192.0.2.1

AAAA 记录

AAAA 记录和 A 记录作用类似,只不过它对应的是 IPv6 地址

如果你暂时不了解 IPv6,也不用担心。

简单理解就是:

A 记录主要对应 IPv4,AAAA 记录主要对应 IPv6。

CNAME 记录

CNAME 可以理解成「别名」。

比如:

www.example.com

可能并没有直接对应一个 IP,而是告诉 DNS:

「这个名字实际上就是另一个域名。」

然后再通过另一个域名找到最终的 IP 地址。

这就像通讯录里的「备注名」。

你可以给同一个人保存多个称呼,但最终找到的还是同一个联系人。

NS 记录

NS 记录则可以理解成:

这个域名由谁负责管理?

它告诉 DNS 系统,应该去哪些 DNS 服务器查询这个域名的信息。

对于普通用户来说,知道这些记录的大概作用就足够了。

DNS 查询安全吗?

这里还有一个值得注意的问题。

传统的 DNS 查询通常没有进行加密。

比如,当你的设备询问 DNS 服务器:

example.com 的 IP 是什么?」

这条查询在传输过程中可能是明文的。

这并不意味着别人一定能够看到你访问网页里的所有内容,但 DNS 查询本身可能暴露你正在查询哪个域名。

举个简单的例子:

你访问一个使用 HTTPS 的网站时,网页里的具体内容可以受到 HTTPS 的保护。

但在传统 DNS 查询中,最开始的「我想找这个网站」这件事,并不一定是加密的。

于是,人们又发展出了加密 DNS

什么是加密 DNS?

如果把普通 DNS 查询想象成:

你把一张写着「我要找谁」的纸条交给快递员。

那么加密 DNS 就像是:

你把纸条放进一个上锁的箱子里,再交给快递员。

快递员可以帮你把箱子送到目的地,但路上的其他人无法直接看到里面写了什么。

常见的加密 DNS 方式包括:

DNS over TLS(DoT)

DoT 会利用 TLS 对 DNS 查询进行加密。

TLS 可以理解成一种加密通信方式

它的作用之一,就是让通信双方能够在不让旁人看到内容的情况下进行交流。

DNS over HTTPS(DoH)

DoH 则是把 DNS 查询放进 HTTPS 的通信中。

你可以简单理解为:

给 DNS 查询套上一层 HTTPS 的加密保护。

DNS over QUIC(DoQ)

DoQ 则是利用 QUIC 来传输 DNS 查询,也是现代 DNS 加密方案之一。

这些名称看起来比较复杂,但普通用户只需要记住一点:

传统 DNS 主要负责“查地址”,加密 DNS 则是在“查地址”的同时,让查询过程更加私密。

DNS 会影响网速吗?

会,但 DNS 和我们通常说的「网速」不是一回事。

打开网站时,设备需要先通过 DNS 找到网站的 IP 地址。

如果 DNS 响应比较慢,你可能会感觉:

输入网址后,网页过了一会儿才开始加载。

但 DNS 找到 IP 之后,后面的数据传输还要经过很多环节。

例如:

  • 你的网络连接;
  • 服务器距离;
  • 网络线路;
  • 服务器性能;
  • 当前网络拥堵情况。

所以:

DNS 响应快,不代表整个网络速度一定快。

DNS 更像是「找路」的第一步。

如果找路花了很长时间,确实会影响打开网站时的第一感觉;但真正下载网页、视频和文件的速度,还取决于后面的网络连接。

DNS 出问题会怎么样?

DNS 虽然平时不太起眼,但一旦出现问题,我们很容易发现。

比如:

网络明明连接正常,却打不开网站。

这时候可能不是你的网络完全断了,而是 DNS 没有正常工作。

例如:

  • 输入网址后一直加载;
  • 浏览器提示找不到服务器;
  • 某些网站打不开,但其他网站正常;
  • 修改 DNS 后,网站又可以访问。

原因很简单:

浏览器知道你想访问哪个网站,但不知道这个网站的 IP 地址。

就像你知道朋友叫「张三」,但通讯录突然坏了,找不到他的电话号码。

人还在,电话也正常,但你就是不知道应该拨哪个号码。

DNS 和 VPN 有什么关系?

DNS 和 VPN 经常一起出现,但它们负责的事情并不一样。

DNS:

帮你找到网站的 IP 地址。

VPN:

建立一条经过 VPN 服务器的网络连接,让网络流量通过这条连接传输。

VPN 开启后,DNS 查询通常也会受到 VPN 设置的影响。

因此,当 VPN 出现连接问题时,DNS 也可能成为其中一个需要排查的环节。

不过,两者不能简单理解成同一种东西:

DNS 负责“找地址”,VPN 负责“怎么连接”。

总结

DNS 其实没有想象中复杂。

每次你输入一个网址时,浏览器首先需要知道:

这个网站在哪里?

DNS 就负责回答这个问题。

如果把整个过程想象成去朋友家:

域名是朋友的名字,
IP 地址是朋友家的地址,
DNS是帮你查地址的人。

你告诉它:

「我要找 Google。」

它帮你找到:

「Google 的服务器地址是这个。」

然后浏览器才能继续连接服务器,把网页内容带回来。

所以,虽然我们平时几乎感觉不到 DNS 的存在,但从输入网址到网页真正打开,中间的第一步往往就是:

先通过 DNS 找到网站的地址。

简单来说,DNS 就是互联网里的“查号台”。