这节要聊的是域名系统,也就是 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 数据库。如果这个服务器上能够查询到这次需要的 IP 地址,那么 DNS 的任务就完成了。但是反之,就会向 DNS 系统的更深一个层次的根域名服务器上去查询。这里涉及到”根域名服务器“的概念,我们可以理解为这些服务器上都保存了完整的 DNS 数据库。根据维基百科的数据全球目前有1008台这样的根域名服务器,我国国内也有不少,所以大家可以就近访问,来获得最佳的访问速度。当然,这些还不是整个 DNS 系统的全貌,例如 .com .org 等不同后缀的域名都是保存到各自的服务器上的,这样如果用户输入的域名是以 .com 结尾的,那么只会对 .com 对应的服务器造成访问压力。
开发者购买自己的域名之后,需要修改域名设置,把域名指向自己服务器的 IP 地址。但是我们常常会发现,修改之后,在很多不同地区访问,是不能立刻生效的。这时我们就知道原理了,DNS 是一个分部全球的服务器网络,修改 DNS 设置之后,需要等待一段时间,好让修改扩散到全球的各个 DNS 服务器上。
关于 DNS 我们就聊到这里了。需要记住的要点是:第一,DNS 是一个互联网的电话本,让客户端可以通过域名查找到对应的 IP 。第二,域名的分配是由一个叫做 ICANN 的非盈利性组织负责。第三,DNS 系统是一个有层级的网络。
最后 Peter 想说的是,DNS 是互联网架构的必不可少的一个组件,没有 DNS ,那么,就意味着网站的域名都不能用了,也就意味着互联网也就崩溃了。