这节要聊的是域名系统,也就是 DNS ,聊聊它的基本原理和工作流程,最后稍微拆解一下它的内部结构。

什么是 DNS ?

那什么是 DNS ,它又是用来干嘛的呢?

DNS 的全称是 Domain Name System ,也就是域名系统,所以咱们先聊聊什么是域名。咱们都知道,互联网是一个由很多台计算机相互连接而形成的网。所谓上网,就是从我们自己的计算机,可能是手机,也可能是笔记本,访问另外一个计算机读取数据的过程。好,问题来了,如果我要去访问小明家,那我最起码要知道小明家的地址吧。互联网的底层协议叫 IP 协议,互联网上的计算机的地址就叫 ” IP 地址“。例如,119.3.70.188 。互联网上的每台计算机都有一个自己的 IP 地址,所以其他计算机就可以根据这个地址找到它了。但是当我们用浏览器上网的时候,如果每次都需要在地址栏中输入 IP 地址,就显得非常不方便,因为人的脑子比较容易记住一些名字,但是却记不住,或者说不容易清晰的区分很长的数字。于是,我们就给网络上的一个 IP 地址,对应一个好记的名字,例如 bilibili.com ,方便访问,而这就是域名了,英文叫 Domain Name 。这里要区分开的一个概念是 URL ,例如 https://bilibili.com/index.html ,可以看到域名通常是 URL 的一个组成部分,可以粗略理解为域名是指向一台机器,而 URL 指向的是具体的一个网页,或者说是这个机器上的一个文件。

那域名系统又是什么呢?日常生活中,我如果给一个人打电话,需要在电话本上通过姓名找到这个人的电话号码。DNS 就是互联网的电话本,给出一个域名,就能在这里找到对应的 IP 地址。如果把 DNS 系统看成一个函数,那么输入是域名,输出就是 IP 地址。

这样,我们就理解 DNS 的基本原理了。

工作流程

下面看看 DNS 的工作流程。

首先要了解的是 DNS 服务器这个概念。当我们点一个网页链接,或者在浏览器地址栏中输入一个 URL 然后点回车之后。咱们的电脑,也就是所谓的客户端,就会试图去找这个网页所在的那台网络服务器。但是问题是先要把域名转换成 IP 地址才行,对吧?那这时候 DNS 服务器就登场了,网页请求发出后,域名先到达 DNS 服务器,查到域名对应的 IP 地址之后,才能继续下一步,去访问网络服务器,拿到网页。

你可能会问,域名那么多,如果有两个公司注册了相同的域名怎么办?有一个叫做 ICANN 的非盈利组织,就是负责分配全球的域名的,任何卖域名的网站都要以 ICANN 的记录为准,看某个域名是不是已经被人注册过了,如果是,就不能再卖给其他人了。

到这里可以看到,DNS 的基本工作流程是非常简单的。

DNS 的层级结构

但是,实际中,因为要照顾到全球用户的访问速度,DNS 的服务器并不是只有一台,而是一个很大的分层级系统。

当客户端访问一个域名的时候,首先会连接离自己最近的一台 DNS 服务器。这个服务器上会保存附近的人经常访问的一些域名,用技术术语来说,就是缓存了部分的 DNS 数据库。如果这个服务器上能够查询到这次需要的 IP 地址,那么 DNS 的任务就完成了。但是反之,就会向 DNS 系统的更深一个层次的根域名服务器上去查询。这里涉及到”根域名服务器“的概念,我们可以理解为这些服务器上都保存了完整的 DNS 数据库。根据维基百科的数据全球目前有1008台这样的根域名服务器,我国国内也有不少,所以大家可以就近访问,来获得最佳的访问速度。当然,这些还不是整个 DNS 系统的全貌,例如 .com .org 等不同后缀的域名都是保存到各自的服务器上的,这样如果用户输入的域名是以 .com 结尾的,那么只会对 .com 对应的服务器造成访问压力。

开发者购买自己的域名之后,需要修改域名设置,把域名指向自己服务器的 IP 地址。但是我们常常会发现,修改之后,在很多不同地区访问,是不能立刻生效的。这时我们就知道原理了,DNS 是一个分部全球的服务器网络,修改 DNS 设置之后,需要等待一段时间,好让修改扩散到全球的各个 DNS 服务器上。

总结

关于 DNS 我们就聊到这里了。需要记住的要点是:第一,DNS 是一个互联网的电话本,让客户端可以通过域名查找到对应的 IP 。第二,域名的分配是由一个叫做 ICANN 的非盈利性组织负责。第三,DNS 系统是一个有层级的网络。

最后 Peter 想说的是,DNS 是互联网架构的必不可少的一个组件,没有 DNS ,那么,就意味着网站的域名都不能用了,也就意味着互联网也就崩溃了。