什么是域名解析?

背景

  • 计算机在网络上进行通讯时只能使用IP地址,但人脑没办法记住那些数不尽的IP地址,因而出现了域名地址的概念
  • 原本一个host.txt就可以进行域名和IP的映射关系,但随着主机的爆炸性增涨,又出现了命名重复、流量和负载、一致性等一系列问题,DNS就此诞生

域名解析实际上就是我们域名地址和IP地址(域名)的对应关系写到DNS(域名系统)服务器上,在访问域名地址的时候就可以在DNS查询到对于的IP地址(域名)从而正常访问或者通信的过程。DNS在整个过程中充当着翻译官的工作。

如何查看域名解析结果

对于操作的用户来说,访问域名就能看到内容,整个DNS解析的过程是完全黑盒的,用户无感知的,如果想知道域名解析的结果到底是什么,我们就可以借助一个叫做dig的工具才行,mac下自带这个工具

  1. dig www.baidu.com

image.png
下面详细解读一下我们所能看到的信息:

  • status 表示查询状态,取值为 NOERROR 表示查询没什么错误;
  • opcode 表示操作码,取值为 QUERY 表示操作为查询操作;
  • id 表示查询事务 id;
  • QUERY 表示查询内容的条数,ANSEWER 表示回答内容条数,AUTHORITY 表示权威应答内容的条数,ADDITIONAL 表示附加内容的条数;
  • QUESTION SECTION:表示需要查询的内容,这里的返回内容表示需要查询域名的 A 记录;
  • ANSWER SECTION 表示查询结果,包含了三条记录,一条记录表示 www.baidu.com 是 www.a.shifen.com.的别名,剩下两条返回了 A 记录,表明 www.a.shifen.com.的 IP 地址,702、101这些数字代表的是缓存时间,分别在这些秒数内容本地 DNS 服务器可以直接从缓存返回结果。(这里可以看到,一个域名可以对多个IP地址)
  • AUTHORITY SECTION 表示从哪台 DNS 服务器可以获取到具体的 A 记录信息,返回的服务器是权威 DNS 服务器,由它来维护 www.baidu.com 的域名信息,;类型是NS,最后一列是对应的名称,上面的信息可以看出www.baidu.com有4个权威DNS服务器
  • ADDITIONAL SECTION 表示 NS 服务器对应的 IP 地址
  • 最后一块是NS的传输信息,本机的DNS服务器是192.168.4.251,查询端口是53(DNS服务器的默认端口),以及回应长度是237字节。

image.png

基础概念

在了解DNS的解析过程之前,我们需要先了解以下基本概念:

1.DNS域名结构一般是采用树状存储, 因而域名可以分为:顶级域名、次级域名、三级域名(从右向左用点隔开的位置的称呼方式
www.baidu.com为例:com为顶级域名、baidu为次级域名、www为三级域名

2.DNS服务器四种:根DNS服务器、顶级DNS服务器、权威DNS服务器、递归DNS解析器(Local DNS或者recursive DNS server)
image.png

  • 根DNS服务器:最高级别的域名服务器,负责返回顶级域名服务器地址,域名解析为ip的第一步(全球一共 13 台, 负责返回顶级域 (.com 等) 的域名服务器地址,全球只有十三个,编号从A到M。在这十三个根域名服务器中,其中有一个是master服务器,其他是slave服务器。)
  • 顶级DNS服务器TLD:又称TLD 域名服务器,若查询它所负责的区域文件,未找到就会返回一个权威DNS服务器。维护共享通用域扩展名的所有域名的信息(”购买域名”就是向这些公司的数据库注册一条记录),例如 .com、.net 或 url 中最后一个点之后的任何内容。
  • 权威DNS服务器:即最终决定域名解析结果的服务器,通常是解析器查找 IP 地址过程中的最后一步,开发者可以在权威DNS上配置、变更、删除具体域名的对应解析结果信息(是由域名购买者搭建的,负责提供三级域名对应的主机IP地址,在购买域名时就要向注册机构提供,然后被录入到顶级DNS的数据库.)。
  • 递归DNS解析器:是 DNS 查询中的第一站,递归DNS又称为Local DNS,它没有域名解析结果的决定权,但代理了用户向权威DNS获取域名解析结果的过程。递归DNS上有缓存模块,当目标域名存在缓存解析结果并且TTL未过期时(每个域名都有TTL时间,即有效生存时间,若域名解析结果缓存的时间超过TTL,需要重新向权威DNS获取解析结果),递归DNS会返回缓存结果,,否则,递归DNS会一级一级地查询各个层级域名的权威DNS直至获取最终完整域名的解析结果。关于域名解析的具体流程下文会举例说明


image.png

查询过程

当用户在浏览器输入了想要访问的域名,如www.baidu.com

  1. 查询浏览器DNS缓存:查询浏览器缓存里是否有 如果有则直接访问(访问过&未清除)**.DNS缓存:每次你访问网站,DNS会保存你访问过的网站的域名服务器(即DNS) 信息,它存储在你的本机电脑上,目的就是为了帮助你下次在浏览器以最短的路径、更快的速度找到所需的DNS信息,解析你的网站。
  2. 查询Host:检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,没有则继续
  3. 查询本地DNS服务器缓存:如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回
  4. 查询根DNS:本地DNS会将这个查询报文发给根DNS服务器, 根DNS服务器未找到后,会找到托管的顶级域名com,从而返回com所对应的顶级DNS ip
  5. 查询顶级DNS:如果顶级DNS无法解析,它就会找到管理.com的下一级域名DNS服务器,将它的ip返回给本地DNS服务器去查询,如此重复,直到找到了最终的ip为止,查询结束
  6. 本地DNS 接收到解析出的IP地址,返回给客户机
  7. 客户机根据查询到的IP,建立TPC连接


image.png

思考

平时我们部署的服务不都是有很多台机器,但是对外只有一个域名,那域名解析怎么就只拿到一个ip呢?

DNS服务器会自带一个一级负载均衡,通过设置的一些调度配置来返回一个合适的ip,当然这个负载均衡是很简单的,如果想要达到更好的效果,其实是需要一个专门的负载均衡的服务的,这种方案下,本地DNS服务器通过解析查询后拿到的其实不是一个真实的物理服务器IP,而是一个专门负责负载均衡处理的ip地址
image.png