深刻理解DNS解析过程

要想深刻理解DNS解析的过程,咱们须要知道一些底层的东西和一些周边的知识,本篇文章会围绕这些来构建。

名词解释

前置知识

DNS

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。DNS属于应用层协议,是基于UDP协议的。segmentfault

hosts文件

hosts文件ARPANET时代的解决方案,那时候只有数百台计算机,一个hosts就能知足需求。安全

域名(Domain)

mail.ccav.com
---- ---- ----
三级域名 二级域名 顶级域名

域名的层级是按照上面这么划分的,每级域名长度不超过63个字符,不区分大小写,只能使用数字字母和-。一个完整的域名不超过255个字符。服务器

域名服务器划分

了解域名服务器划分以后,就会对DNS解析的过程大概有些了解。域名服务器按照层级分为:spa

本地域名服务器

本地域名服务器至关于一个班主任,你有点啥事都找他。当一个主机发出DNS查询的时候,这个查询的请求就会发送到本地域名服务器。code

根域名服务器

根域名服务器是最高层次的域名服务,是校长,只负责规划大方向。他知道全部顶级域名服务器的域名和IP地址。无论那个本地域名服务器若本身不能不能解析,那首先请求的就是根域名服务器。根域名服务器不会把待查询的域名直接转换成IP,而是告诉本地域名服务器下一步应该找哪个顶级域名服务器进行查询。blog

顶级域名服务器

顶级域名服务器是负责各个方向的副校长,有负责安全的,有负责教学的。他负责管理该顶级域名下的全部二级域名,当收到DNS查询请求后就会给出响应的应答,多是最终的结果,也多是下一步应该找到的域名服务器的IP地址。递归

权限域名服务器

权限域名服务器就是负责一个区的域名服务器,是基层干活的,好比宿管,各科老师,他负责一个更小的区域。当一个权限服务还不能给出最后的回答时,就会告诉查询请求的DNS客户,下一步应该找哪一个权限域名服务器。get

域名查询的两种方式

这里只是通俗的讲两种查询的方式,关于如何更好的理解并记住这种两种方式,能够看这篇文章 《怎么更好的理解DNS的迭代查询与递归查询》

递归查询

递归查询,就是你找我要一个域名的IP地址,可是我不知道,那我去帮你去向知道的人问这个IP地址。举个例子就是,你问你班主任怎么作番茄炒鸡蛋,你班主任不知道,可是你班主任去问了食堂厨师,而后告诉你。这就叫递归查询。
从host到本地域名服务器通常是用的递归查询。域名

迭代查询

迭代查询就是,你找我要一个域名的IP地址,我也不知道这个IP地址,可是我知道谁知道,我告诉你去找谁问。举个例子就是,大家班主任到了食堂随便拉了我的问怎么作番茄炒鸡蛋,那我的说,我只是个卖饭的,我不知道,可是我知道A君是在后厨的,你能够去问A君。而后你班主任就去问A君了。呐,这就叫迭代查询。
从本地域名服务器到根域名服务器通常是用的迭代查询。it

行了,该知道的储备知识咱们知道的差很少了,接下来就看看关键的流程吧。

DNS查询步骤

假设一台主机想知道y.abc.com这个域名的IP地址,那么整个的查询过程以下:

  1. 主机先向其本地域名服务器进行递归查询
  2. 本地域名服务器采用迭代的查询,它先向根域名服务器查询
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址。
  4. 本地域名服务器向顶级域名服务器发起查询。
  5. 顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器IP地址
  6. 本地域名服务器向权限域名服务器发起查询。
  7. 权限域名服务器告诉本地域名服务器所查询的IP地址。
  8. 本地域名服务器把查询结果告诉主机

给这个过程作个图示,就是这样的
image.png

整个的DNS查询过程就是这样的。结合前面的一些前置知识,你会感受整个过程更简单。