DNS基本概念

域名  如在浏览器地址栏输入的www.baidu.com,www.hao123.com等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而IP为“一切”提供了寻址功能。域名和IP的关系可类比每个人的姓名与住址。

根域、顶级域、二级域、子域   域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格式为www.baidu.com.  最末尾的点代表根域,常常省略;com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是com的子域,www.baidu.com是baidu.com的子域。

域名系统  即DNS(Domain Name System)。DNS主要解决两方面的问题:域名本身的增删改查以及域名到IP如何映射。

正向解析  查找域名对应IP的过程。

反向解析  查找IP对应域名的过程。

解析器  即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。

权威DNS  处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。

递归DNS  又叫local dns。递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。

转发DNS  转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。

公共DNS  公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。

域名查询过程

以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程:

1.  用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);

2.  local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;

3.  根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;

4.  local dns查询com。com返回baidu.com地址;

5.  local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。

dns-query.png

理论上讲域名查询有两种方式:

迭代查询  A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…

递归查询  A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A

上述过程中从resolver到递归DNS再到根的查询过程为递归查询,递归DNS到根、到com、到baidu.com的过程为迭代查询。

注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。