前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈dns域名解析过程

浅谈dns域名解析过程

作者头像
谭小谭
发布2019-06-03 09:56:18
20.3K0
发布2019-06-03 09:56:18
举报
文章被收录于专栏:谭小谭谭小谭

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

  • 域名是什么

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

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

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

顶级域名的下一级又是权威域名,如 baidu.com 中的 .baidu ,这个权威域名就是我们自己可注册的域名。

顶级域名下就是主机名了,www 是指主机名,这个是我们可以自己定义的,通常在 http 服务器如 nginx 中可以修改。

  • 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

代码语言:javascript
复制
[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 看一下。

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

当然,我们还可以再来看下详细的过程,使用命令 dig +trace www.weatherfood.com

代码语言:javascript
复制
[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。

好了,这就是域名解析的全过程了,写下这篇文章查阅了不少资料,总耗时达十几个小时,文中可能还会存在不妥当的地方,欢迎各位指正。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谭小谭 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
分布式数据库 TDSQL
分布式数据库(Tencent Distributed SQL,以下简称 TDSQL)是腾讯打造的一款企业级数据库产品,具备强一致高可用、全球部署架构、高 SQL 兼容度、分布式水平扩展、高性能、完整的分布式事务支持、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档