#网络安全在我身边##2020毕业季##新作者扶植计划 第二期#
DNS解析又叫做域名解析,是众多网络服务中的一种。DNS服务主要提供域名到IP地址的解析服务。计算机既可被赋予IP地址,也可被赋予主机名和域名。比如:www.example.com。
如果用户想要访问某一个网页,通常是使用主机名和域名来访问Web服务器的,而不是直接通过IP地址来访问。因为和IP地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。为了更好的帮助大家理解DNS解析,首先,要知道一些基本的概念。
什么是IP地址?
IP地址是IP协议提供的一种统一的地址格式,它为互联网的每一个网络和每一台主机分配了一个逻辑地址,以此来屏蔽物理地址的差异。不同网络和不同主机分配的IP地址都是唯一的。
IP地址可以简单的理解为现实生活中的地址,准确的说IP地址是网络或主机在互联网中的地址。
什么是主机名?
主机名简单的讲就是计算机的名字。在网络上每一个主机都有自己的名字。比如:www.example.com从DNS解析的角度来看就是域名,而从互联网真真实实的主机来讲,这又叫做主机名。
什么是域名?
域名是一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位。域名是层级结构的,具体的结构如下:
举一个例子:www.example.com
因此只有单纯的主机名,没有后面的多级域名和根域名,这样的一串字符并不能叫做域名。在互联网中主机名是可变的,并不能说所有的主机名都是www,也有不用www开头的主机名。
什么是DNS解析?
DNS解析,又叫做域名解析。是把域名指向网站IP地址的过程。简单的讲域名解析就是域名到IP地址转换的过程,由DNS服务器来完成。DNS解析可以通过域名查找IP地址,也能逆向从IP地址反查域名。
如果客户端想要访问某一个网页,那么它首先会进行DNS解析,然后拿着DNS解析出的IP地址去和互联网提供这一个网页的服务器发起通信。
实际上,DNS解析的过程并不是那么简单的。当客户端申请DNS解析的时候,最糟糕的情况下需要进行三步的解析,具体的三步解析过程如下:
- 查看本地的hosts文件有没有能对这个域名解析成IP地址的记录;
- 查看本地DNS服务器有没有能对这个域名解析成IP地址的记录;
- 本地DNS服务器向根域服务器发起DNS轮询。
接下来,小唐给大家讲解下DNS解析的这三步具体是怎么实现的。
一、本地hosts文件具体解析过程的实现
在我们的计算机存在着一个叫做hosts的文件,hosts文件具体在计算中存放的路径如下图(以Windows 10系统为例):
接下来,小唐要给大家演示一个例子,就是用notepad++工具修改本地hosts文件实现访问www.xiaotang.com这样一个域名,展示的页面是某直播平台的页面。
第一步:使用notepad++工具以管理员权限打开本地hosts文件,添加如下一段配置:
第二步:在浏览器地址栏输入www.xiaotang.com,查看访问结果:
这是一个简单的实验,也能充分说明在对某一个域名进行DNS解析之前,会先经过本地hosts文件的查询。
什么是本地hosts文件?
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。—-摘自《百度百科 hosts》
在百度百科中引用的对hosts的解析里面,也说明了本地hosts文件的查询过程。需要注意的是引用中说到的系统。统指我们的类似于Windows这样的操作系统。
二、本地DNS解析具体解析过程的实现
当本地hosts文件解析失败后,网址就会由操作系统提交给本地DNS服务器进行解析,本地DNS解析的过程主要是两个步骤:
- 1. 查询本地DNS缓存有没有对应的DNS解析记录;
- 2. 查询本地DNS服务器的本地DNS数据库记录有没有对应DNS解析记录,如果还没有查询到,本地DNS服务器就会向根域名DNS服务器申请进行DNS轮询查询。
本地DNS服务器由两个部分来承担本地DNS解析的过程。第一个部分是本地DNS缓存,第二个部分是本地DNS数据库。
什么是DNS缓存?
DNS缓存的意思是DNS对网址做出了正确的解析后,DNS服务器本身会将这个结果临时的保存起来并且会设置一个缓存失效时间,在缓存失效时间内,当你再次访问网址的时候,操作系统就会直接从本地DNS缓存那里把结果返回给你,而不必再一次发起DNS解析,变相的“加速”了对网址的解析速度。当然,如果超过了失效时间,在你再次访问网址的时候,本地DNS服务器就会再次发起新的一轮DNS查询。
什么是本地DNS数据库?
DNS服务器会单独的维护一些DNS记录,这些记录有的时候甚至是上百条、上千条,为了方便的管理这些解析记录,DNS服务器引入了本地DNS数据库的概念用来管理这些上百条、上千条的DNS记录。相当于是DNS服务器内部的一个数据小仓库。
因此,在经过本地DNS解析的时候,DNS服务器会按照本地DNS缓存到本地DNS数据库这样的顺序来进行解析,如下图:
在经过本地DNS解析的过程中,仍然没有解析出相应记录,接下来本地DNS服务器就会向广域DNS服务器发起DNS轮询了,经过DNS轮询后一定会存在着一个对应的DNS记录来返回给客户端进行访问了。
三、DNS轮询的具体实现过程
DNS轮询是本地DNS服务器对网址解析无效的情况下,向更高级DNS服务器发起查询的过程,这些更高级的DNS服务器我们叫做广域网DNS服务器。
广域网DNS服务器是对所有在互联网中不同层级DNS服务器的统称。包括了我们的根域名DNS服务器、顶级域名DNS服务器、二级域名DNS服务器等,如下图:
什么是根域名DNS服务器?
根域名DNS服务器又叫做根域名服务器,主要用来管理互联网上所有域名的域名服务器,全球有13台根域名服务器分布在世界各地,分别以a、b、c、d、e、f、g、h、i、j、k、l、m来命名,13台根域名服务器无先后大小关系,是平级存在的。根域名服务器管理世界各地的顶级域名服务器。
什么是顶级域名DNS服务器?
顶级域名DNS服务器又叫做顶级域名服务器,像我们的.com./.net./.org./.edu./.gov.这些大家所熟悉的顶级域名也都有着各自的顶级域名服务器。在不同的顶级域名服务器下又管理着各自不同的二级域名服务器。
什么是二级域名DNS服务器?
二级域名DNS服务器又叫做二级域名服务器,受顶级域名服务器的管理,主要存储的是二级域名的DNS解析记录,在二级域名服务器下又有很多的子域名服务器。在这里,小唐就不给大家介绍什么是子域名服务器了,其实工作原理和解析原理都是一样的。
在进行DNS轮询的时候,本地DNS服务器会对广域网DNS服务器发起两种不同的查询方式,一种是DNS递归查询,一种是DNS迭代查询。这两种查询方式只要一种能查出结果就行了。
接下来,小唐将会着重给大家介绍这两种查询的实现过程和不同点。首先,来看一下下面两张图:
第一张图是DNS递归查询的过程,我们看见了由本地DNS服务器向广域网DNS服务器发起查询后,整个的查询过程是由广域网DNS服务器不同层级的服务器来完成的。
第二张图是DNS迭代查询的过程,我们看见了由本地DNS服务器向广域网DNS服务器发起查询后,整个的查询过程是由本地DNS服务器来完成的。
小唐就拿对域名www.xt.com进行DNS解析的过程来给大家讲一讲DNS递归查询和迭代查询的过程吧。
一、DNS递归查询的过程
- 1.我们的本地DNS服务器向广域网的根域名服务器发起对域名www.xt.com的解析;
- 2.在根域名服务器解析过程中,解析到了www.xt.com的顶级域名是.com.域,因此根域名服务器把解析请求发给了顶级域名.com.域服务器来进行解析;
- 3.在顶级域名.com.域服务器进行解析的过程中,解析到了www.xt.com的二级域名是.xt.com.域,因此顶级域名.com.域服务器,又把解析的请求发给了二级域名.xt.com.域服务器进行解析;
- 4.二级域名.xt.com.域服务器在进行解析的过程中解析到了域名www.xt.com对应的服务器IP地址是10X.105.123.11;
- 5.二级域名.xt.com.服务器把解析结果返回给了顶级域名.com.域服务器;
- 6.顶级域名.com.域服务器把结果返回给根域名服务器;
- 7.根域名服务器再把解析结果返回给本地DNS服务器;
- 8.本地DNS服务器,更新本地DNS缓存并把结果最终返回给我们的客户端,这就完成了DNS的递归查询。
二、DNS迭代查询的过程
DNS迭代查询和DNS递归查询的工作基本上是一样的,唯一的变化就是所有的查询都是由本地DNS服务器来完成的,因此小唐,在这里就不详细描述了。
在文章的最后,小唐为了方便大家更好的理解DNS解析过程,给大家准备了一个有趣的小实验。实验的名字叫做《通过对dig工具和Wireshaek工具使用和操作来理解DNS解析的过程》,对于dig工具和Wireshark工具的使用请参考小唐的文章《Wireshark和dig工具的使用》。
具体实验步骤如下:
1. 使用dig工具来跟踪某直播网站的DNS解析过程,会返回如下结果:
2. 使用dig命令进行解析的过程同时也使用Wireshark工具进行抓包,结果如下:
愉快的时光总是短暂的,当你看到这里的时候,又到了小唐给大家说在再见的时候了,在本篇文章小唐详细的给大家介绍了DNS解析的过程,同时我们的http知识树已经从1级变成了2级了。
在下一篇文章中小唐将会给大家带来TCP/IP传输的讲解,我们不见不散。
原文链接:https://blog.csdn.net/weixin_39785723/article/details/110638953