DNS 协议是什么?说说 DNS 完整的查询过程?
一、是什么
DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器
简单来讲,DNS 相当于一个翻译官,负责将域名翻译成ip 地址
- IP 地址:一长串能够唯一地标记网络上的计算机的数字
- 域名:是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识
二、域名
域名是一个具有层次的结构,从上到下一次为根域名、顶级域名、二级域名、三级域名…
例如www.xxx.com ,www 为三级域名、xxx 为二级域名、com 为顶级域名,系统为用户做了兼容,域名末尾的根域名. 一般不需要输入
在域名的每一层都会有一个域名服务器,如下图:
除此之外,还有电脑默认的本地域名服务器
三、查询方式
DNS 查询的方式有两种:
- 递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案
- 迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求
四、域名缓存
在域名服务器解析的时候,使用缓存保存域名和IP 地址的映射
计算机中DNS 的记录也分成了两种缓存方式:
- 浏览器缓存:浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗
- 操作系统缓存:操作系统的缓存其实是用户自己配置的
hosts 文件
五、查询过程
解析域名的过程如下:
-
首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表 -
若没有命中,则继续搜索操作系统的 DNS 缓存 -
若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果 -
若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询 -
- 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
- 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
- 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
-
本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来 -
操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起 -
至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起
流程如下图所示:
下面解析步骤进行讲解,后面将采用命令行的形式来跟踪解析过程。当用户在地址栏键入并敲下回车键之后,域名解析就开始了。
第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址
用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的地址,当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址,因为缓存不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过属性来设置),所以存在域名对应的找不到的情况。当浏览器从缓存中找到了该网站域名对应的地址,那么整个解析过程结束,如果没有找到,将进行下一步骤。对于的缓存时间问题,不宜设置太长的缓存时间,时间太长,如果域名对应的发生变化,那么用户将在一段时间内无法正常访问到网站,如果太短,那么又造成频繁解析域名。
第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP
如果第一个步骤没有完成对域名的解析过程,那么浏览器会去系统缓存中查找系统是否缓存过这个域名对应的地址,也可以理解为系统自己也具备域名解析的基本能力。在系统中,可以通过设置文件来将域名手动绑定到某上,文件位置在。对于普通用户,并不推荐自己手动绑定域名和,对于开发者来说,通过绑定域名和,可以轻松切换环境,可以从测试环境切换到开发环境,方便开发和测试。在系统中,黑客常常修改他的电脑的文件,将用户常常访问的域名绑定到他指定的上,从而实现了本地解析,导致这些域名被劫持。在或者系统中,文件在,修改该文件也可以实现同样的目的。
前两步都是在本机上完成的,所以没有在上面示例图上展示出来,从第三步开始,才正在地向远程DNS服务器发起解析域名的请求。
第三步:向本地域名解析服务系统发起域名解析的请求
如果在本机上无法完成域名的解析,那么系统只能请求本地域名解析服务系统进行解析,本地域名系统一般都是本地区的域名服务器,比如你连接的校园网,那么域名解析系统就在你的校园机房里,如果你连接的是电信、移动或者联通的网络,那么本地域名解析服务器就在本地区,由各自的运营商来提供服务。对于本地服务器地址,系统使用命令就可以查看,在和系统下,直接使用命令来查看服务地址。一般都缓存了大部分的域名解析的结果,当然缓存时间也受域名失效时间控制,大部分的解析工作到这里就差不多已经结束了,负责了大部分的解析工作。
第四步:向根域名解析服务器发起域名解析请求
本地域名解析器还没有完成解析的话,那么本地域名解析服务器将向根域名服务器发起解析请求。
第五步:根域名服务器返回gTLD域名解析服务器地址
本地域名解析向根域名服务器发起解析请求,根域名服务器返回的是所查域的通用顶级域()地址,常见的通用顶级域有、、、等。
第六步:向gTLD服务器发起解析请求
本地域名解析服务器向gTLD服务器发起请求。
第七步:gTLD服务器接收请求并返回Name Server服务器
服务器接收本地域名服务器发起的请求,并根据需要解析的域名,找到该域名对应的域名服务器,通常情况下,这个服务器就是你注册的域名服务器,那么你注册的域名的服务商的服务器将承担起域名解析的任务。
第八步:Name Server服务器返回IP地址给本地服务器
服务器查找域名对应的地址,将地址连同值返回给本地域名服务器。
第九步:本地域名服务器缓存解析结果
本地域名服务器缓存解析后的结果,缓存时间由时间来控制。
第十步:返回解析结果给用户
解析结果将直接返回给用户,用户系统将缓存该地址,缓存时间由来控制,至此,解析过程结束。
这里对解析的步骤进行了一个简单的介绍分析,后面将通过命令行的形式来解析一个域名的具体解析过程。
二、 DNS域名解析过程分析
在正式开始分析解析过程之前,先来介绍几个基本的域名解析方式的概念。域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录以及TXT记录。 DNS 资源记录
在 DNS 服务器上,一个域名及其下级域名组成一个区域。相关的 DNS 信息构成一个数据库文件。所以每个区域数据库文件都是由资源记录构成的,一个资源记录就是一行文本,提供了一组有用的 DNS 配置信息。
常见的资源记录类型如表所示。
类型 | 编码 | 内容 |
---|
A | 1 | 将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址 | NS | 2 | 权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析 | CNAME | 5 | 别名记录,主机别名对应的规范名称 | SOA | 6 | 起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器 | PTR | 12 | IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名 | MX | 15 | 邮件交换记录,指定负责接收和发送到域中的电子邮件的主机 | TXT | 16 | 文本资源记录,用来为某个主机名或域名设置的说明 | AAAA | 28 | 将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址 |
A记录 ,A代表的是Address,用来指定域名对应的IP地址,如将http://xxxxx.com指定到IP地址139.***.184.***。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址。
A记录 就是解析我们常见的带www和不带www的域名,解析不带www的域名时主机记录填@或者不填,解析带www得域名时主机记录填www。
MX记录 ,表示的是Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如http://xxxxx.com域名的A记录IP地址是115.***.25.***,如果MX记录设置为115.***.25.***,是xxx@xxxxxx.com的邮件路由,DNS会将邮件发送到***.238.25.***所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址。
CNAME记录 ,全称是Canonical Name(别名解析)。所谓的别名解析就是可以为一个域名设置一个或者多个别名,别名解析通常用来解析二级域名。
NS记录 ,为某个域名指定DNS解析服务器,也就是这个域名有指定的IP地址的DNS服务器去解析。 TXT记录 ,为某个主机名或域名设置说明,如可以为http://maikeseo.com设置TXT记录为”麦可SEO”这样的说明。 上面概念中的地址都是假定的,帮助理解。下面将通过解析域名为例,进一步说明域名解析流程。
直接查看域名结果,可以通过命令加上域名来查看:
上图中表示解析结果来自非权威服务器,也就是说这个结果来自缓存,并没有完全经历全部的解析过程,从某个缓存中读取的结果,这个结果存在一定的隐患,比如域名对应的地址已经更变。
这只是一个快捷的解析结果,如果需要浏览全部的解析过程,那么可以使用命令来查看解析过程。
分析上图解析过程,我们可以看出:
第一步:从本地域名解析服务器获取到个根域名服务器对应的主机名。
第二步:从个根域名服务器中的其中一个(这里是)获取到顶级的服务器(未显示)和名称。
第三步:向域的一台服务器请求解析,它返回了域的服务器(未显示)和名称,百度有四台顶级域的服务器。
第四步:向百度的顶级域服务器请求,它发现这个有个别名,而不是一台主机,别名是www.a.shifen.com。
一般情况下,解析到别名就停止了,返回了具体的地址,如果想看到具体的地址,可以进一步对别名进行解析,解析结果如下:
这时候看到最后的解析结果是a.shifen.com.。在解析别名的过程中,可以发现和都是指定了相同的域名解析服务器。以上是一个域名的解析过程,最后的解析结果和一开始的使用的结果一致。
|