图片 1

[Web] Web请求过程之二:DNS 域名解析

所谓DNS,是一套将人类可读的域名转化为计算机可识别IP地址的命名系统。每当一条尚不存在于解析器缓存中的域名查询请求出现,这一转化过程就会在从根服务器到顶级域名例如.com型域名)的整个DNS层级体系中走上一遍。接下来顶级域名简称TLD)会把能够向我们提供所需IP地址的已授权域名服务器找到,并将相关信息提交回来。在我们从域名服务器获取到对应的域名信息之后,结果将带着一个特定的TTL值即有效时间值)进入DNS解析程序缓存,最终在有效期结束时被清出。

一、域名解析过程

图片 1

有些时候,某个域会被认定为恶意对象并遭到清除。出现这种情况的原因可谓多种多样,例如恶意软件传播、钓鱼感染等。一般来说,防止用户对某个域发起访问的常见方式是将该域从TLD服务器中删除。然而这还不足以彻底消除安全隐患,因为域仍然能够再次由解析程序解析,并在下一次TTL过期之前始终处于可用状态。通常情况下这算不得什么大问题,因为TTL值生效时间本身就很短,所以攻击型域的存在时间可能只有数秒或者数分钟。

1、浏览器检查缓存,域名缓存时间可以通过 TTL 属性来设置。

如上图所示,普通用户打开一个网页的时间主要由四部分组成:

在本文中,我们将讨论近来存在于大多数DNS服务器中的DNS漏洞。此漏洞是由江坚、梁津津、李康、李军、段海心以及吴建平等多位研究人员共同发现的。点击此处可以查看他们的研究论文。

2、如果浏览器缓存中没有,浏览器会去查找操作系统缓存中是否有这个域名对应的
DNS 解析结果。如果要设置域名对应的 IP 地址,可以在Windows 中的配置文件
C:\Windows\System32\drivers\etc\hosts
来设置或在 Linux 中的配置文件
/etc/hosts 来设置,操作系统会缓存这个 IP 地址。

网站域名通过 DNS
服务器解析到IP地址的时间通过IP地址和服务器建立HTTP连接的时间服务器接受连接请求后进行计算的时间网页内容通过HTTP协议传输到用户的时间

该漏洞的突破口在于某些DNS服务器中的缓存更新逻辑缺口。此漏洞允许缓存以特定方式被改写,进而导致某个特定域将在缓存中拥有源源不断的TTL授权数据,且TTL值不受有效时间所限。这样一来,即使该域被从TLD服务器中清出,也仍然会一直处于可解析状态。此种类型的域如今有了自己的名号:幽灵域名即Ghost
Domain Name)。

3、如果前两步无法解析时,会把域名发给 Local
DNS 服务器(本地域名服务器)。如果要查询 LocalDNS 服务器的信息,在
Windows 下可以通过 ipconfig
命令查询,在 linux 下可以通过 cat
/etc/resolv.conf 文件查询。

在上图中,DNS域名解析时间占了整个访问时间的1/3强,严重拖慢了用户打开网页的速度。

DNS基础知识

4、如果 Local DNS 仍然没有查询到,就直接到 Root
DNS 服务器(根域名服务器)请求解析。

作为一个站长,一定希望自己网站的打开速度足够快,以免访问者因为失去耐心而关闭浏览器。
本文将介绍如何缩短网站域名的DNS解析时间,来让访问者更快的打开你的网站。

首先,让我们先来了解DNS解析工作是如何进行的。

5、Root DNS 服务器返回给 Local
DNS 服务器一个所查询域的 gTLD 服务器(主域名服务器),gTLD
是国际顶级域名服务器。

一、域名的DNS解析过程

比如说,用户打开浏览器并在地址栏中输入infosecinstitute.com内容。这时用户操作系统中的DNS解析程序就会运作起来,尝试为该域名找出对应的IP地址。解析程序首先会检查本地缓存,以确认该查询域名是否在缓存中存在记录。缓存中通常保存着最近一段时间内用户使用过的IP地址与主机名称映射,这样解析程序就不必重复再重复地为同一个域名多次获取IP地址。如果解析程序在缓存中无法找到对应的IP地址,那么接下来它就要向DNS服务器发送请求,检查是否存在该域名的记录。DNS服务器通常由我们的网络服务供应商简称ISP)提供,当然大家也可以为自己进行手动选择。如果此时仍然查找不到记录,解析程序就会向不同的域名服务器发送循环DNS查询,以期找到所查域名。当IP地址被寻获时,解析程序会在将地址发回用户端的同时保存在缓存中,以方便今后的使用。

6、Local DNS 服务器向 gTLD 服务器发送请求。

将一个域名解析成IP地址,主要由以下几个步骤:

7、gTLD
服务器返回域名对应的域名服务器地址,即域名解析任务由这个域名提供商的服务器完成。

将域名解析请求发送给本地的域名服务器 (DNS Server) 。域名服务器 (DNS
Server)
收到请求后,先查询本地缓存,如果有该域名的纪录项,则直接返回目标IP地址。如果本地缓存中没有,则直接发送请求给根域名服务器
(Root Name Server) 。
根域名服务器 (Root Name Server) 返回给本地域名服务器 (DNS Server)
一个所查询域的主域名服务器 (gTLD Server) 地址。本地域名服务器 (DNS
Server) 再向上一步返回的 TLD 服务器发送请求。
接受请求的 TLD
服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器 (Name
Server) 的地址。正常情况下 Name Server 会有相应的记录,并返回给 DNS
Server 。本地 DNS Server
根据域名的TTL值,把返回的结果保存到缓存,同时将解析结果返回给客户机。二、缩短域名的DNS解析时间

8、在域名服务器查询到 IP 地址,连同 TTL 值返回给 Local DNS 服务器,在
Local NDS 服务器的缓存时间由 TTL 控制。

知道了域名的DNS解析过程,就可以采取相应的措施,缩短解析时间,我们所能影响和选择的方面主要包括缓存、本地DNS
Server和域名的Name Server。

9、将解析结果返回给用户,并根据 TTL 的值在本地系统缓存。

1、增加域名的缓存命中率