什么是 DNS
DNS( Name)是域名系统的缩写,是一种按域层次组织起来的计算机和网络服务命名系统,用于TCP/IP网络。
当我们在浏览器中输入一个URL地址的时候,浏览器需要向该URL的主机名对应的服务器发送请求,因此需要知道服务器的IP,而对于浏览器来说,DNS的作用就是将主机名转换成IP地址。
DNS域名解析过程
DNS域名解析,简单来说就是将域名翻译成IP地址。比如这个域名翻译成对应的IP是220.181.38.251。这只是举个例子。
域名解析流程
上图分8步介绍了域名解析的流程,不过在此之前会先检查本地缓存配置+hosts解析,然后才会真正执行上图中的流程:
浏览器缓存检查
浏览器会先搜索自己的DNS缓存,这个缓存时间比较短,只有1分钟左右,而且只能容纳1000个缓存,它会检查自己的缓存中是否有对应的条目,并且没有过期,如果有,并且没有过期,那么解析就到此结束。
操作系统缓存检查
如果在浏览器的缓存中没有找到对应的条目,那么操作系统也会有一个域名解析的过程,浏览器会先去操作系统的DNS缓存中查找是否有这个域名对应的解析结果,如果找到了并且没有过期,那么就停止查找,解析到此结束。
主机解析
在Linux中,可以使用/etc/hosts文件将任意域名设置到任意可访问的IP地址。如果在这里指定了某个域名对应的IP地址,那么浏览器会优先使用这个IP地址。当解析到这个配置文件中的某个域名时,操作系统会将解析结果缓存到缓存中。而缓存时间也是由域名的过期时间和缓存空间大小控制的。
步骤 1:本地 DNS 服务器
客户端通过浏览器访问域名()的网站,并发起DNS请求,查询该域名的IP地址,请求被发送到本地DNS服务器,本地DNS服务器会先查询自己的缓存记录,如果缓存中有这样的记录,则直接返回结果,如果没有,本地DNS服务器还会查询DNS根服务器。
步骤2:本地DNS服务器=请求=>根域名服务器
本地DNS服务器向根服务器发送DNS请求,请求域名对应的IP地址()。
步骤 3 根域名服务器
根服务器查询完之后,并不记录域名和IP地址的对应关系,但是会告诉本地DNS服务器可以继续查询域名服务器,并给出域名服务器(.com服务器)的地址。
步骤4:本地DNS服务器=请求=>.com顶级域名服务器
本地DNS服务器向.com服务器发送DNS请求,请求域名的IP地址()。
步骤顶级域名服务器
com服务器收到请求之后,不会直接返回域名与IP地址的对应关系,而是会告诉本地DNS服务器,该域名可以在域名服务器上进行解析获得IP地址,并告诉域名服务器的地址。
步骤6:本地DNS服务器=请求=>权威域名服务器
本地DNS服务器向域名服务器发送DNS请求,请求域名的IP地址()。
步骤 7 权威域名服务器
服务器收到请求后,在自己的缓存表中找到域名与IP地址的对应关系,并将IP地址返回给本地DNS服务器。
步骤8:本地DNS服务器与客户端开始交互
本地DNS服务器将域名对应的IP地址返回给客户端,同时将域名与IP地址的对应关系保存在缓存中,以供其他用户下次查询时使用。
总结
DNS解析过程
考虑一下这个问题:我们人类有多少种方式可以识别自己?我们可以通过身份证、社保卡号或驾驶执照来识别自己。虽然我们有多种识别方式,但在特定环境中,一种方法可能比另一种更合适。互联网上的主机和人类一样,可以使用多种方法进行识别。在互联网上识别主机的一种方法是使用其主机名(),例如,等等。然而,这是人类记忆事物的方式,而路由器并不以这种方式理解。路由器更喜欢固定长度、分层的 IP 地址。
如果你还不理解IP,可以看我的文章计算机网络层
IP地址现在被简单地描述为一个具有严格层次结构的4字节地址。例如,在像121.7.106.83这样的IP地址中,每个字节可以用“.”分隔,表示从0到255的十进制数。
然而,路由器更愿意解析 IP 地址,而我们人类更喜欢记住 URL。那么路由器如何将 IP 地址解析为我们熟悉的 URL?这就是 DNS 的作用所在。
DNS 代表 Name,即域名系统,是一种由分层 DNS 服务器(DNS)实现的分布式数据库;它也是一个应用层协议,使主机能够查询分布式数据库。DNS 服务器通常是运行 BIND(Name)软件的 UNIX 机器。DNS 协议在 UDP 上运行,使用端口 53。
DNS 基础知识
DNS 和 HTTP、FTP、SMTP 一样,也是一个应用层协议。DNS 采用客户端-服务器模型运行在通信的端系统之间,通过以下端到端传输协议在通信的端系统之间传送 DNS 消息。但 DNS 并不是一个直接与用户交互的应用程序。DNS 为用户应用程序和 上的其他软件提供核心功能。
DNS 通常不是一个独立的协议;它通常被其他应用层协议(包括 HTTP、SMTP 和 FTP)使用,以将用户提供的主机名解析为 IP 地址。
下面我们通过一个例子来描述一下 DNS 的解析过程,这和你输入 URL 时浏览器的处理过程类似。
当你在浏览器中输入时会发生什么?为了使用户主机向 Web 服务器发送 HTTP 请求消息,需要执行以下操作:
除了提供 IP 地址到主机名的转换之外,DNS 还提供以下重要服务
DNS 工作概述
假设用户主机上运行的某些应用程序(例如网页浏览器或者邮件阅读器)需要将主机名转换成IP地址,这些应用程序就会调用DNS客户端,指出需要转换的主机名。用户主机上的DNS收到之后,会使用UDP通过53端口向网络发送一个DNS查询报文。经过一段时间之后,用户主机上的DNS就会收到该主机名对应的DNS应答报文。因此站在用户主机的角度看,DNS就像是一个黑盒子,你无法看到它内部的运作。但实际上,实现DNS服务的黑盒子是非常复杂的,它由大量分布在全球的DNS服务器以及定义DNS服务器如何与查询主机通信的应用层协议组成。
DNS 最早的设计是只有一个 DNS 服务器,这个服务器会包含所有的 DNS 映射,这是一种中心化的设计,并不适合现在的互联网,因为互联网的主机数量非常庞大,而且在不断增长。这种中心化的设计会有以下问题:
所以DNS不能采用集中式设计,它根本没有可扩展性,所以采用分布式设计,这种设计的特点有:
分布式、分层数据库
首先,分布式设计解决的第一个问题就是DNS服务器的可扩展性,因此DNS采用大量的DNS服务器,这些DNS服务器一般是分层组织的,分布在世界各地,没有一个DNS服务器能够拥有互联网上所有主机的映射,而是这些映射分布在所有的DNS服务器上。
一般来说,DNS服务器有三种类型:根DNS服务器、顶级域名(TLD)DNS服务器、权威DNS服务器,这些服务器的层级模型如下图所示。
假设现在 DNS 客户端想要知道 IP 地址,上述域名服务器如何解析它?首先,客户端将联系其中一个根服务器,该服务器将返回顶级域 com 的 TLD 服务器的 IP 地址。然后,客户端联系其中一个 TLD 服务器,该服务器将返回权威服务器的 IP 地址。最后,客户端联系其中一个权威服务器,该服务器将返回其 IP 地址。
DNS 层次结构
现在我们来讨论一下上面的域名服务器的层次结构
DNS 查询步骤
下面我们来描述DNS查询步骤,从DNS解析IP到DNS返回的一系列过程。
注意:正常情况下DNS会将查询信息缓存在浏览器或者本地计算机中,当再次有相同的请求来临时,不会再进行DNS查询,而是直接返回结果。
通常,DNS查找经过以下步骤:
当用户在浏览器中输入 URL 并按下回车键时,查询进入网络并被 DNS 解析器接收。DNS 解析器向根域名发起查询请求,请求返回顶级域名的地址。根 DNS 服务器注意到请求地址的前缀,并向 DNS 解析器返回 com 的顶级域名服务器 (TLD) 的 IP 地址列表。DNS 解析器然后向 TLD 服务器发送查询消息。TLD 服务器在收到请求后,根据域名的地址将权威 DNS 服务器的 IP 地址返回给 DNS 解析器。最后 DNS 解析器将查询直接发送给权威 DNS 服务器。权威 DNS 服务器将 IP 地址返回给 DNS 解析器。DNS 解析器使用该 IP 地址响应 Web 浏览器。
一旦 DNS 查找步骤返回 IP 地址,浏览器就可以请求网页。
整个过程如下图所示
在此处插入图像描述
DNS解析器
执行 DNS 查询的主机和软件称为 DNS 解析器。用户使用的工作站和个人计算机都是解析器。解析器必须注册至少一个域名服务器的 IP 地址。DNS 解析器是 DNS 查找的第一站,负责处理发出初始请求的客户端。解析器启动查询序列,并最终将 URL 转换为必要的 IP 地址。
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 记录,其生存期由 TTL(DNS 字段)决定。
浏览器缓存
如今的网络浏览器默认会缓存一段时间的 DNS 记录。DNS 缓存距离网络浏览器越近,向 IP 地址发出的检查缓存的请求就越少。当请求 DNS 记录时,浏览器缓存是第一个检查请求记录的地方。
在浏览器中,可以使用 ://net-/#dns 查看 DNS 缓存的状态。这是基于以下查询的。在我的 Mac 电脑上输入上述网址后,我无法查看 DNS,只能清除主机缓存。我不知道为什么。也许是由于某些设置?
操作系统内核缓存
浏览器缓存查询后,会查询操作系统级的DNS解析器,操作系统级的DNS解析器是DNS查询离开你的计算机前的第二站,也是本地查询的最后一步。
DNS 消息
共同实现DNS分布式数据库的所有DNS服务器都存储有资源记录(RR),提供从主机名到IP地址的映射。每个DNS应答消息都包含一个或多个资源记录。RR记录用于响应客户端的查询。
资源记录是一个 4 元组,由以下字段组成:
(Name, Value, Type, TTL)
RR 会有不同的类型,下面是不同类型的 RR 汇总表
DNS有两种类型的消息,一种是查询消息,一种是响应消息,并且这两种消息的格式是相同的。以下是DNS消息格式
上图为DNS报文格式,其中事务ID、标志、问题数、答案资源记录数、权威名称服务器计数、附加资源记录数六个字段即为DNS报文段头,共计12个字节。
段头
段头是DNS报文的基本结构,下面我们对段头中的每个字节进行描述。
各字段含义如下
相信各位读者和我一样,光看这些字段是没有意义的,我们通过抓包来看看具体的DNS报文吧。
现在我们可以看一下具体的DNS报文了,通过查询知道这是一个请求报文,这个报文的标识为,它的标志位如下\
然后我们看一下响应消息
在此处插入图像描述
可以看到,标志位也在,表示这是对上面的查询请求的响应。
对于这里已经解释过的查询请求报文我们不再解释,现在我们只解释请求报文中没有的内容。
问题领域
问题区域通常是指报文格式中的查询问题区域,该部分用于显示DNS查询请求存在的问题,包括查询类型、查询类\
本节各字段含义如下\
同样,让我们用它来检查问题区域\
可以看到,这是发起的DNS查询请求,查询类型是A,所以响应类型也应该是A\
如上图所示,响应类型为A,查询类值通常为1、254、255,分别代表类、无此类、所有类。这些是我们感兴趣的值。其他值在TCP/IP网络中通常不使用。
资源记录部分
资源记录部分是DNS报文的最后三个字段,包括回答问题区域、权威名称服务器记录、附加信息区域。这三个字段都使用一种叫做资源记录的格式,如下图所示\
资源记录部分中的字段具有以下含义\
资源记录部分只出现在DNS响应包中,我们通过响应报文来看一下具体的字段示例。
其中,域名的值为,类型为A,类别为1,生存期为5秒,数据长度为4个字节,资源数据表示的地址为63.233.189.188。
SOA 记录
如果是权威 DNS 服务器的响应,则会显示一条记录,其中存储了有关区域的重要信息,这些信息就是 SOA 记录。所有 DNS 区域都需要 SOA 记录以符合 IETF 标准。SOA 记录对于区域传输也很重要。
除了 DNS 解析器响应中的字段外,SOA 记录还有一些附加字段,如下所示\
具体字段含义\
上面提到了主名称服务器和服务名称服务器,它们之间的关系如下\
这里主要讲解RR类型A(IPv4)和SOA的记录,其他类型还有很多,本文就不详细介绍了,读者可以阅读《TCP/IP卷1协议》和官网,值得一提的是,这是一个非常好的学习网络协议的网站。
DNS 安全
几乎所有的网络请求都会经过DNS查询,而DNS与很多其他协议一样,在设计时并没有考虑到安全性,并且存在一些设计限制,这为DNS攻击创造了机会。
DNS攻击主要有以下几种方式
那么如何防御DNS攻击呢?
防御 DNS 威胁最著名的方法之一是使用协议。
又称为DNS安全扩展,通过对数据进行数字签名来保护数据的有效性,从而防止攻击。它是IETF提供的一系列DNS安全认证机制。它不加密数据,只验证你访问的站点地址是否有效。
DNS 防火墙
有些攻击是针对服务器进行的,这时 DNS 防火墙便派上用场了。DNS 防火墙是一种可以为 DNS 服务器提供许多安全和性能服务的工具。DNS 防火墙位于用户的 DNS 解析器和他们试图访问的网站或服务的权威名称服务器之间。防火墙提供速率限制访问,以阻止试图压垮服务器的攻击者。如果服务器确实因攻击或任何其他原因而瘫痪,DNS 防火墙可以通过提供来自缓存的 DNS 响应来保持运营商的站点或服务正常运行。
除了以上两种防御方式之外,DNS区域的运营商本身还会采取进一步的措施来保护DNS服务器,比如配置DNS基础设施来防范DDoS攻击。
有关DNS攻击和防御的更多信息是网络安全主题,本文将不再详细介绍。
扫一扫在手机端查看
-
Tags : 域名解析过程
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。