DNS域名详细解析过程(最全面,看这一篇就够)
原标题:DNS 域名详细解析过程 (最全面,看这一篇就够)
转自:入门小站
什么是 DNS域名解析
DNS域名解析过程我们首先要了解域名和 IP 地址的区别。IP 地址是互联网上计算机唯一的逻辑地址,通过 IP 地址实现不同计算机之间的相互通信,每台联网计算机都需要通过 IP 地址来互相联系和分别。
当我们在浏览器地址栏中输入 www.baidu.com 时,DNS 解析将会有将近 10 个步骤,这个过程大体大体由一张图可以表示:
整个过程大体描述如下,其中前两个步骤是在本地电脑内完成的,后 8 个步骤涉及到真正的域名解析服务器:
第一步、
本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的 IP 地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过 TTL 属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的 IP 有变化,会导致被客户端缓存的域名无法解析到变化后的 IP 地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。
第二步、
如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。其实操作系统也有一个[域名解析]的过程,在 Linux 中可以通过 / etc/hosts 文件来设置,而在 windows 中可以通过配置 C:\Windows\System32\drivers\etc\hosts 文件来设置,用户可以将任何域名解析到任何能够访问的 IP 地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地 DNS 解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的 IP 地址上,导致这些域名被劫持。
第三步、
前两个过程无法解析时,就要用到我们网络配置中的 "DNS 服务器地址" 了。操作系统会把这个域名发送给这个本地 DNS 服务器。每个完整的内网通常都会配置本地 DNS 服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地 DNS 服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约 80% 的域名解析到这里就结束了,后续的 DNS 迭代和递归也是由本地 DNS 服务器负责。
windows 在这配置:控制面板 -》网络和共享中心 -》更改适配器设置 -》选中目标适配器右键选择属性 -》Internet 协议版本 4(TCP/IPv4)-》配置 DNS 地址。
Linux 在这设置:/etc/resolv.conf
第四步、
如果本地 DNS 服务器仍然没有命中,就直接到根 DNS 服务器请求解析。
第五步、
根 DNS 服务器返回给本地 DNS 域名服务器一个顶级 DNS 服务器地址,它是国际顶级域名服务器,如. com、.cn、.org 等,全球只有 13 台左右。
第六步、
本地 DNS 服务器再向上一步获得的顶级 DNS 服务器发送解析请求。
第七步、
接受请求的顶级 DNS 服务器查找并返回此域名对应的 Name Server 域名服务器的地址,这个 Name Server 服务器就是我要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。 比如我要访问 www.baidu.com,而这个域名是从 A 公司注册获得的,那么 A 公司上的服务器就会有 www.baidu.com 的相关信息。
第八步、
Name Server 服务器会查询存储的域名和 IP 的映射关系表,再把查询出来的域名和 IP 地址等等信息,连同一个 TTL 值返回给本地 DNS 服务器。
第九步、
返回该域名对应的 IP 和 TTL 值,本地 DNS 服务器会缓存这个域名和 IP 的对应关系,缓存时间由 TTL 值控制。
第十步、
递归查询和迭代查询的区别把解析的结果返回给本地电脑,本地电脑根据 TTL 值缓存在本地系统缓存中,域名解析过程结束在实际的 DNS 解析过程中,可能还不止这 10 步,如 Name Server 可能有很多级,或者有一个 GTM 来负载均衡控制,这都有可能会影响域名解析过程。
DNS 客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。
DNS 递归名称解析:在 DNS 递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代 DNS 客户端进行的(以 本地名称服务器 为中心),只需要本地名称服务器向 DNS 客户端返回最终的查询结果即可。
DNS 迭代名称解析:(或者叫 迭代查询)的所有查询工作全部是 DNS 客户端自己进行(以DNS 客户端 自己为中心)。在条件之一满足时就会采用迭代名称解析方式:
在查询本地名称服务器时,如果客户端的请求报文中没有申请使用递归查询,即在 DNS 请求报头部的 RD 字段没有置 1。相当于说 你都没有主动要求我为你进行递归查询,我当然不会为你工作了。
客户端在 DNS 请求报文中申请使用的是递归查询(也就是 RD 字段置 1 了),但在所配置的本地名称服务器上是禁用递归查询(DNS 服务器一般默认支持递归查询的),即在应答 DNS 报文头部的 RA 字段置 0。
主要分为 A 记录、MX 记录、CNAME 记录、NS 记录和 TXT 记录
1、A 记录
A 代表 Address,用来指定域名对应的 IP 地址,如将 item.taobao.com 指定到 115.238.23.xxx,将 switch.taobao.com 指定到 121.14.24.xxx。A****记录可以将多个域名解析到一个 IP 地址,但是不能将一个域名解析到多个 IP 地址
2、MX 记录
Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的 Mail Server,如 taobao.com 域名的 A 记录 IP 地址是 115.238.25.xxx,如果将 MX 记录设置为 115.238.25.xxx,即 xxx@taobao.com 的邮件路由,DNS 会将邮件发送到 115.238.25.xxx 所在的服务器,而正常通过 Web 请求的话仍然解析到 A 记录的 IP 地址
3、CNAME 记录
Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将 aaa.com 解析到 bbb.net、将 ccc.com 也解析到 bbb.net,其中 bbb.net 分别是 aaa.com 和 ccc.com 的别名
4、NS 记录
为某个域名指定 DNS 解析服务器,也就是这个域名由指定的 IP 地址的 DNS 服务器取解析
5、TXT 记录
为某个主机名或域名设置说明,如可以为 ddd.net 设置 TXT 记录为 "这是 XXX 的博客" 这样的说明
END
官方站点:www.linuxprobe.com
Linux命令大全:www.linuxcool.com