携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情 >>
DNS接力解析IP
相信很多朋友都对DNS的作用十分清楚,简单点来说,DNS就是为了解决域名和ip之间两两映射的问题的。
接下来,我们一起来学习一些吧。
域名的层级结构
在将DNS解析之前,我们需要对域名的层级结构有一定的理解才行。
就像上面的 www.baidu.com 域名的层级是通过 . 来划分的,而且越靠右层级越高。
其实www.baidu.com是一个简写的域名,完整的域名应该是这样的www.baidu.com.
.是根域,域名层级中最高
像这些具有层级结构的域名信息会被注册到DNS服务器中的,一个层级域的信息是作为一个整体存在DNS服务器中的,也就是说如果在一个DNS服务器中找到一条该域的记录,那么其他该域的记录也能在该DNS服务器中找到。
一个域的信息整体存放在一个DNS服务器中;但是一个DNS服务器中可以拥有多个域的信息。
如何通过DNS找到Ip地址
DNS前提准备
因为域名中是由层级域组成的,每个域的信息都整体存在一个DNS服务器中;所以为了能找到域名对用的 IP ,我们需要:
- 将负责管理下级域的DNS服务器的IP地址注册到它的上级域DNS服务器中
- 上级DNS服务器的IP地址再注册到更上一级的DNS服务器中
- 以此类推
经过了以上步骤,我们就可以通过上级的DNS服务器找到下级的DNS服务器IP,也就可以向该下级DNS服务器发送查询请求了。
根域是层级最高的域,只要知道存放根域信息的DNS服务器的IP地址,就可以通过它一路往下,顺藤摸瓜找到想找到的域名记录了。
DNS流程:
下面以解析网址 www.baidu.com 为例子进行讲述:
- 客户端向最近的DNS服务器发送查询请求,如果该服务器有记录,则立马返回对应域名的IP;如果没有,则代替客户端向根域名服务器发出查询请求
- 根域名服务器中肯定是没有
www.baidu.com的记录的,但是根据域名的层级结构,根域名服务器会返回存放com域的DNS服务器的IP- 最近DNS服务器拿到存放
com域的DNS服务器的IP,就向其发送查询请求;如果该服务器也没有记录,则会返回存放baidu域的DNS服务器的IP- 最近DNS服务器拿到存放
baidu域的DNS服务器的IP,就向其发送查询请求;如果该服务器也没有记录,则会返回存放www域的DNS服务器的IP- 最近DNS服务器拿到存放
www域的DNS服务器的IP,就向其发送查询请求;该服务器有该记录,则会返回www.baidu.com对应的IP- 最近DNS服务器将得到的IP返回给客户端
详细DNS流程,如下图所示:
当然啦,在实际中,并不一定是一个域对应一个服务器的,有可能是两个域都在同一个服务器中(上下级域共享服务器),这样子的话,在访问上级服务器的时候就可以直接向下跳过一级DNS服务器,直接返回再下一级DNS服务器的相关信息。
通过缓存加快DNS服务器的响应
DNS服务器中会有一个缓存功能的,可以记住之前查询过的域名记录;在后续查询中,只要缓存命中就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。
缓存可以减少查询的时间,提高查询效率
注意: 既然是缓存那就存在有效期,如果过了有效期,则需要删除缓存!