域名解析的全过程

2022-09-01 10:59:42 浏览数 (1)

什么是DNS域名解析?

我们首先要了解域名和IP地址的区别。

IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和区分。

但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的IP地址,这样对于我们日常工作生活访问不同网站是很困难的。

基于这种背景,人们在IP址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更易被识别和记忆,逐渐代替IP地址成为互联网用户进访问互联的主要入口。这种符号化标识就是域名

域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种域名=>IP地址间转换的职责。

DNS域名解析过程

当我们在浏览器地址栏中输入www.qq.com时,DNS解析将会有将近10个步骤,这个过程大体大体由一张图可以表示:

image.pngimage.png

整个过程大体描述如下,其中前两个步骤是在本地电脑内完成的,后8个步骤涉及到真正的域名解析服务器:

第一步

本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。

第二步

如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也有一个域名解析的过程,在Linux中可以通过/etc/hosts文件来设置,而在windows中可以通过配置C:WindowsSystem32driversetchosts文件来设置,用户可以将任何域名解析到任何能够访问的IP地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。

第三步

前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。操作系统会把这个域名发送给这个本地DNS服务器。每个完整的内网通常都会配置本地DNS服务器,例如用户是在学校或工作单位接入互联网,那么用户的本地DNS服务器肯定在学校或工作单位里面。它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。大约80%的域名解析到这里就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。

  • windows在这配置:控制面板-》网络和共享中心-》更改适配器设置-》选中目标适配器右键选择属性-》Internet协议版本4(TCP/IPv4)-》配置DNS地址。
image.pngimage.png
  • Linux在这设置:/etc/resolv.conf(base)
代码语言:shell复制
[root@xx ~]# cat /etc/resolv.conf
nameserver 10.123.119.98
nameserver 10.123.120.110
nameserver 10.85.61.21

第四步

如果本地DNS服务器仍然没有命中,就直接到根DNS服务器请求解析。

第五步

根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址,它是国际顶级域名服务器,如.com、.cn、.org等,全球只有13台左右。

第六步

本地DNS服务器再向上一步获得的顶级DNS服务器发送解析请求。

第七步

接受请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server服务器就是我要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。 比如我要访问www.qq.com,而这个域名是从A公司注册获得的,那么A公司上的服务器就会有www.qq.com的相关信息。

第八步

Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等等信息,连同一个TTL值返回给本地DNS服务器。

第九步

返回该域名对应的IP和TTL值,本地DNS服务器会缓存这个域名和IP的对应关系,缓存时间由TTL值控制。

第十步

把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地系统缓存中,域名解析过程结束在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。

GTM

GTM(Global Traffic Manager的简写)即全局流量管理,基于网宿智能DNS、分布式监控体系,实现实时故障切换及全球负载均衡,保障应用服务的持续高可用性。GTM是应用DNS向用户返回最佳访问IP,但是与DNS所不同的是,它对所有资源进行健康检查,一旦发现故障就从DNS返回IP中剔除;它还根据调度策略进行决策,保障资源的高可用性。

递归查询和迭代查询的区别

DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。

DNS递归名称解析

在DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代DNS客户端进行的(以“本地名称服务器”为中心),只需要本地名称服务器向DNS客户端返回最终的查询结果即可。

DNS迭代名称解析

所有查询工作全部是DNS客户端自己进行(以“DNS客户端”自己为中心)。在以下条件之一满足时就会采用迭代名称解析方式:

  • 在查询本地名称服务器时,如果客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。相当于说“你都没有主动要求我为你 进行递归查询,我当然不会为你工作了”。
  • 客户端在DNS请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询(DNS服务器一般默认支持递归查询的),即在应答DNS报文头部的RA字段置0。

域名解析记录

主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录, 我们可以使用nslookup命令查看域名解析记录:

  • A记录 A代表Address,用来指定域名对应的IP地址,如将item.qq.com指定到183.3.226.xx,将switch.qq.com指定到183.3.226.xx。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址
代码语言:shell复制
(base) [root@XXX ~]# nslookup -type=A qq.com
Server:         10.113.119.98
Address:        10.113.119.98#53

Non-authoritative answer:
Name:   qq.com
Address: 61.129.7.47
Name:   qq.com
Address: 183.3.226.35
Name:   qq.com
Address: 123.151.137.18
  • MX记录 Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如qq.com域名的A记录IP地址是183.3.226.xx,如果将MX记录设置为183.3.226.xx,即xxx@qq.com的邮件路由,DNS会将邮件发送到183.3.226.xx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址
代码语言:shell复制
(base) [root@XXX ~]# nslookup -type=MX qq.com
Server:         10.113.119.98
Address:        10.113.119.98#53

Non-authoritative answer:
qq.com  mail exchanger = 20 mx2.qq.com.
qq.com  mail exchanger = 10 mx3.qq.com.
qq.com  mail exchanger = 30 mx1.qq.com.

Authoritative answers can be found from:
mx2.qq.com      internet address = 183.47.111.94
mx2.qq.com      internet address = 113.96.208.206
mx3.qq.com      internet address = 183.47.112.51
mx3.qq.com      internet address = 183.47.111.94
mx3.qq.com      internet address = 113.96.208.206
mx1.qq.com      internet address = 113.96.210.17
mx1.qq.com      internet address = 113.96.208.206
mx1.qq.com      internet address = 183.47.112.51
mx1.qq.com      has AAAA address 2402:4e00:8010::af
  • CNAME记录 Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名
代码语言:shell复制
(base) [root@XXX ~]# nslookup -type=CNAME qq.com
Server:         10.113.119.98
Address:        10.113.119.98#53

Authoritative answers can be found from:
qq.com
        origin = ns1.qq.com
        mail addr = webmaster.qq.com
        serial = 1330914143
        refresh = 3600
        retry = 300
        expire = 86400
        minimum = 300
  • NS记录 为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析
代码语言:shell复制
(base) [root@XXX ~]# nslookup -type=NS qq.com

Server:         10.113.119.98
Address:        10.113.119.98#53

Non-authoritative answer:
qq.com  nameserver = ns1.qq.com.
qq.com  nameserver = ns2.qq.com.
qq.com  nameserver = ns3.qq.com.
qq.com  nameserver = ns4.qq.com.

Authoritative answers can be found from:
ns1.qq.com      internet address = 203.205.220.251
ns1.qq.com      internet address = 101.89.19.165
ns1.qq.com      internet address = 157.255.246.101
ns1.qq.com      internet address = 183.36.112.46
  • TXT记录 为某个主机名或域名设置说明,如可以为ddd.net设置TXT记录为"这是XXX的博客"这样的说明
代码语言:shell复制
(base) [root@XXX ~]# nslookup -type=TXT qq.com
Server:         10.113.119.98
Address:        10.113.119.98#53

Non-authoritative answer:
qq.com  text = "v=spf1 include:spf.mail.qq.com -all"

更多nslookup命令type类型参考

代码语言:text复制
A 地址记录
AAAA 地址记录
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录

0 人点赞