浅谈dns域名解析过程

前面的文章中有介绍过 打开一个网页背后都发生了什么? 其中第一步就是域名解析,今天咱们就一块儿来看看域名解析的过程。nginx

在开始以前,有必要把域名及 dns 的相关概念解释一下。数据库

域名是什么浏览器

举个例子,https://www.baidu.com,这个其实并非域名,其中 https 是指协议,去掉 https 后,www.baidu.com.(注意最后面有一个点号) 才是真正的域名。缓存

每一个域名的最后面都有一个点号 "." 表示根域名,为了方便在实际使用的时候被省略了。bash

根域名的下一级就是顶级域名了,.com 也就是顶级域名,常见的顶级域名后缀有 .com、.cn、.net、.org 等,这些都是固定的,用户不能本身修改,只能选择。服务器

顶级域名的下一级又是权威域名,如 baidu.com 中的 .baidu ,这个权威域名就是咱们本身可注册的域名。网络

顶级域名下就是主机名了,www 是指主机名,这个是咱们能够本身定义的,一般在 http 服务器如 nginx 中能够修改。dom

DNS概念分布式

dns 便是 domain name system 域名系统的缩写,将域名和 ip 的映射关系保存在一个分布式数据库中。网站

域名解析过程分析

下面就还以 www.baidu,com 这个网址来分析一下 dns 的解析过程。

当浏览器拿到输入的 www.baidu.com 后,首先会去浏览器的 dns 缓存中去查询是否有对应记录,若是查询到记录就能够直接返回 ip 地址,完成解析。

若是浏览器没有缓存,那就再去查询操做系统的缓存,一样的,若是查询到记录就能够直接返回 ip 地址,完成解析。

若是操做系统也没有缓存,那就再去查看本地 host 文件,Windows 下 host 文件通常位于 "C:\Windows\System32\drivers\etc"。

近几年网上流传的经过修改本地 host 文件来避免双 11 女朋友剁手的段子,其实就是将淘宝的支付接口解析到错误的 ip 地址,从而致使支付不成功。

若是本地 host 文件也没有相应记录,那就须要求助于本地 dns 服务器了,因此应该要知道本地 dns 的 ip 地址。

本地 dns 服务器 ip 地址通常是由本地网络服务商如移动、电信提供,通常是经过 DHCP 自动分配,固然你也能够本身手动配置。目前用的比较多的是谷歌提供的公用 dns 8.8.8.8 和国内的公用 dns 114.114.114.114 。

你以前可能有遇到过电脑能够正常上 QQ 可是就是不能打开网页的怪现象,这种状况大多数可能就是 dns 域名解析出问题了,你能够尝试手动把 dns 设置为公用 dns,以下图:

找到本地 dns 后,它也会先去查询一遍它本身的缓存,若是有记录就返回,若是没有记录,它将开始要去咱们前面提到的根域名服务器查询了。注意因为根域名服务器 ip 地址通常都是固定的,因此本地 dns 服务器通常都内置了根域名服务器 ip 地址。

目前全球一共有 13 组根域名服务器(这里并非指 13 台服务器,是指 13 个 ip 地址,按字母 a-m 编号),为了能更高效完成全球全部域名的解析请求,根域名服务器自己并不会直接去解析域名,而是会把不一样的解析请求分配给下面的其余服务器去完成,下面是 dns 域名系统的树状结构图。

注意,dns 域名服务器通常分三种,分别是根域名服务器 (.)、顶级域名服务器 (.com)、权威域名服务器 (baidu.com) 。

当根域名接收到本地 dns 的解析请求后,发现是后缀是 .com,因而就把负责 .com 的顶级域名服务器 ip 地址返给本地 dns。

本地 dns 拿着返回的 ip 地址再去找到对应的顶级域名服务器,顶级域名又把负责该域名的权威服务器 ip 返回去。

本地 dns 又拿着 ip 去找对应的权威服务器,权威服务器最终把对应的主机 ip 返回给本地 dns,至此就完成了域名解析的全过程。

下面用一张图来展现上面迭代查询的过程。

域名解析实例

接下来咱们再用一个实际的例子来还原一遍上面的解析过程,我使用我本身的博客网站来作演示,域名为 www.weatherfood.com。咱们可使用命令 dig 来显示整个查询过程,为了方便起见,我将在 Linux 上进行演示,Windows下须要自定安装 dig 命令,你们可自行了解下。

先来看一个简化版的总体查询过程,执行命令 dig www.weatherfood.com

[root@iZm5eiqn00z9x3zuxajldvZ ~]# dig www.weatherfood.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> www.weatherfood.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42276
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.weatherfood.com.        IN  A

;; ANSWER SECTION:
www.weatherfood.com.    600 IN  A   115.29.141.125

;; Query time: 15 msec
;; SERVER: 10.202.72.116#53(10.202.72.116)
;; WHEN: Sat Mar  2 10:02:12 2019
;; MSG SIZE  rcvd: 53
复制代码

QUESTION SECTION 表示要查询的请求,该请求是要查询 www.weathrfood.com 域名的 ip 地址,IN表示 Internet,A 表示 ipv4 地址 address,有的是 AAAA 即表示 ipv6 地址。

ANSWER SECTION 返回的是查询结果,600 是指缓存时间,这个通常是在域名解析的时候 TTL (time to live)设置的时间,单位为秒, 我这里设置的是 10 分钟,A 就是咱们要的的 ip 地址。

最下面那一段表示这次解析请求耗时 15 毫秒,本地 dns 服务器地址为 10.202.72.116 且端口号为 53,接收到数据大小为 53 字节。

咱们还能够再去验证一下本地 dns 服务器 ip 地址是否和上面结果中显示的同样,在 Linux 中本地 dns 服务器 ip 保存在 /etc/resolv.conf 文件中,执行命令 cat /etc/resolv.conf 看一下。

[root@iZm5eiqn00z9x3zuxajldvZ ~]# cat /etc/resolv.conf 
nameserver 10.202.72.116
nameserver 10.202.72.118
复制代码

固然,咱们还能够再来看下详细的过程,使用命令 dig +trace www.weatherfood.com

[root@iZm5eiqn00z9x3zuxajldvZ ~]# dig +trace www.weatherfood.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> +trace www.weatherfood.com
;; global options: +cmd
.            455141  IN  NS  h.root-servers.net.
.            455141  IN  NS  c.root-servers.net.
.            455141  IN  NS  b.root-servers.net.
.            455141  IN  NS  f.root-servers.net.
.            455141  IN  NS  j.root-servers.net.
.            455141  IN  NS  g.root-servers.net.
.            455141  IN  NS  i.root-servers.net.
.            455141  IN  NS  m.root-servers.net.
.            455141  IN  NS  e.root-servers.net.
.            455141  IN  NS  d.root-servers.net.
.            455141  IN  NS  a.root-servers.net.
.            455141  IN  NS  k.root-servers.net.
.            455141  IN  NS  l.root-servers.net.
.            455141  IN  RRSIG   NS 8 0 518400 20190314050000 20190301040000 16749 . sGpl0QBD/E3PaZ/tyjNmt4L1g415w5r6E0gbXTazmU1PNkQbYYrwyAx8 +vSoSLXaXcNsLgUfpJQThidOk5JSL8IUC+lHljxIvr6xIqx1kPvsl+Jq 8JdEWv4zZJtejehhxCyU74pK4gONO7fTgX3j2sXJUzQBtlYpZTfnYYeL JdF+WwGR1RxuBWJm68tQkrhIJ3mLdGmIlZkUk1WpxpU2jORGdcDgaCVl QgNxWI7+RBNmDNpqZD5848kHpJ6bWUwxyNM/rbVeXBgaqZvZz/6LbfiC QWxyfqDh4CK8HvxnTrp8Gl7i/IgHcLoIZf/YI9PopYmf49b4lqfjNBai 06Dy1w==
;; Received 525 bytes from 10.202.72.116#53(10.202.72.116) in 0 ms

com.            172800  IN  NS  m.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
;; Received 497 bytes from 192.203.230.10#53(192.203.230.10) in 176 ms

weatherfood.com.    172800  IN  NS  dns9.hichina.com.
weatherfood.com.    172800  IN  NS  dns10.hichina.com.
;; Received 396 bytes from 192.35.51.30#53(192.35.51.30) in 268 ms

www.weatherfood.com.    600 IN  A   115.29.141.125
;; Received 53 bytes from 140.205.41.25#53(140.205.41.25) in 14 ms
复制代码

能够看到,第一次从本地 dns 服务器 10.202.72.116 查询根服务器 . 地址,结果获得从字母 a-m 13 个 ns (name server),即返回 13 个根服务器地址。

其中 192.203.230.10 这台根服务器又返回 13个 .com 顶级域名服务器,能够查一下 192.203.230.10 这台服务器是位于美国的。

接下来又从 192.35.51.30 这台顶级域名服务器返回两个 weatherfood.com 权威域名服务器。

最后再向上面两个权威服务器查询到主机名 www,并返回域名的最终 ip 115.29.141.125。

好了,这就是域名解析的全过程了,写下这篇文章查阅了很多资料,总耗时达十几个小时,文中可能还会存在不稳当的地方,欢迎各位指正。若是文章对你有帮助,但愿能给文章点个赞哈,欢迎关注,有问题也欢迎留言交流。

相关文章
相关标签/搜索