关于DNS解析优化的一些细碎

How Domain Name Servers Work

DNS优化,从入门到放弃。

前段时间掉进了网站加载缓慢,数据还会丢包的大坑。

在产品其他方面加紧优化的基础上,又赶紧研究了一下DNS的工作原理以及通常使用的优化技巧。

现在从坑里爬出来了。

喘口气

本文将从以下六个方面对DNS优化进行了一些细碎的小结。

一、域名DNS解析原理和过程

二、浏览器加载网页的基本过程

三、合理利用DNS

四、合理使用DNS-prefetch让DNS预读取

五、DNS域名解析拆分为多个域名增加并行下载量

六、加快域名DNS解析速度方法小结


我是看不见的分割线


一、域名DNS解析原理和过程

DNS是怎么来的?

DNS 是域名系统 (Domain Name System) 的缩写。在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

DNS服务结构 DNS的树形结构

如上图所示,DNS服务器类型主要有:

  • 内部 DNS :位于内网中,提供内网 DNS 服务,也具备 Internet DNS 缓存与转发能力

  • 外部 DNS:位于 Internet 中,提供 Internet 的 DNS 服务(包括 DNS 缓存与转发)

  • 主 DNS:提供 DNS 服务(包括查询,缓存写入)

  • 辅 DNS:只提供 DNS 查询服务,与主 DNS 同步数据库

  • 唯缓存 DNS:自身不具备 DNS 解析能力,但具有 DNS 缓存数据库

  • 转发 DNS:具备转发特性,能将 DNS 请求转发给其他 DNS 服务器

  • 权威 DNS: 自身数据库中存在与 DNS 请求相对应的映射

  • 非权威 DNS:不存在相对应的映射,而存在对应缓存查询结果

DNS服务进程 DNS解析进程

上图的DNS解析过程如下:

  1. 龟龟(192.168.1.1) 在浏览器访问 http://www.lawootrip.com

  2. 192.168.1.1 检查本地 hosts 文件中是否存在 www.lawootrip.com 对应的 IP

  3. 若无,192.168.1.1 继续检查本地 DNS 缓存中是否存在 www.lawootrip.com 对应的 IP

  4. 若无, 192.168.1.1 向本地 DNS 服务器发起 DNS 查询请求

  5. 路由器接收到 DNS 查询请求后,检查路由器 DNS 缓存

  6. 若无,路由器以外网地址 202.202.202.202 向本地 DSN 服务器 (ISP DNS)发起 DNS 查询请求

  7. ISP DNS 接收到 DNS 查询请求后,发现自己不是权威 DNS ,且无对应的缓存数据,于是将请求转发给 其他 DNS 服务器

  8. 其他 DNS 服务器 接收到请求后,一样发现自己不是权威 DNS,且无对应的缓存数据,于是开始进行 DNS 迭代查询:将请求发送给根域名服务器

  9. 根域名服务器接收到请求后,将顶级域名服务器 (.com) IP 发送给其他 DNS 服务器

  10. 其他 DNS 服务器根据 IP 将 DNS 查询请求发送给 顶级域名服务器

  11. 顶级域名服务器接收到请求后,将 二级域名服务器 (jianshu.com) IP 发送给其他 DNS 服务器

  12. 其他域名服务器根据 IP 将 DNS 查询请求发送给二级域名服务器

  13. 二级域名服务器 接收到请求后,发现自己是权威 DNS 服务器,于是将 www.lawootrip.com 映射的 IP 151.101.72.133 发送给其他域名服务器

  14. 其他域名服务器 接收到解析结果后,将 151.101.72.133 逐层返回传递下去,最终直至 192.168.1.1

  15. 15.192.168.1.1 接收到 www.lawootrip.com 解析结果 151.101.72.133 ,根据 IP 与 www.lawootrip.com 建立 TCP 连接,然后发起 HTTP 请求主页内容


二、浏览器加载网页的基本过程

1、从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请求头信息通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求之后等待处理。

2、览器加载显示html的顺序是:从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。如果遇到语义解释性的标签嵌入文件(JS脚本,CSS 下载过程会启用单独连接进行下载,并且在下载后进行解析,解析过程中,停止页面所有往下元素的下载。

3、什么原因会导致网页加载过慢?浏览器可以在下载CSS资源的同时,并行解析HTML文件,但是,一旦发现有脚本文件的引用,则必须等待脚本文件完成下载并且执行后才能继续解析。内容下载时间主要取决于用户带宽、服务器带宽、文件大小、文件数量等。一般来说,将静态文件挂在CDN上,甚至全站CDN,往往能较好的解决这类问题。


三、合理利用DNS TTL值 增加域名的缓存命中率

1、DNS 服务器采用递归或迭代来处理客户端查询时,它们将发现并获得大量有关 DNS 命名空间的重要信息。然后这些信息由服务器缓存。缓存为 DNS 解析流行名称的后续查询提供了加速性能的方法,同时大大减少了网络上与 DNS 相关的查询通信量。

2、TTL(Time-To-Live)即一条域名解析记录在DNS服务器上缓存时间。当信息缓存时,生存时间 (TTL) 值适用于所有缓存的 RR。只要缓存 RR 的 TTL 没有到期,DNS 服务器就可继续缓存并再次使用 RR 来应答与这些 RR 相匹配的客户端提出的查询。

DNS服务进程 TTL设置

3、适当地增大TTL值可以让DNS Server缓存该域名更长时间,增加缓存的命中率。TTL一般默认为一小时,可以根据实际情况设为一天甚至一周以上。当然,如果你域名的IP经常变化,则TTL不应过大,否则各地的DNS Server会暂时无法获得新的正确的IP地址。


四、合理使用DNS-prefetch让DNS预读取

1、从上面浏览器加载网页的过程可以看出,网页的请求是可以多任务同时进行的,对于网页有多个DNS请求的情况,可以让浏览器在后台先把要使用的DNS请求默默地完成,这样当用户在打开新的网页时,就可以节省DNS查询的时间了。

2、控制浏览器的DNS预读取就是DNS-prefetch标签了,DNS Prefetch应该尽量的放在网页的前面,

格式类似是:

<link rel="dns-prefetch" href="//img.lawootrip.com">

  很多网站都使用使用百度广告联盟代码,使用这个就可以预读取DNS了。

3、默认情况下浏览器会有隐式的DNS Prefetch,即会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,我们可以通过下面的标签禁止隐式的DNS Prefetch:

<meta http-equiv=”x-dns-prefetch-control” content=”off”>

4、需要注意的就是,DNS Prefetch只需要在用户在第一次打开网站时使用即可,没有必要每个页面都使用DNS Prefetch,否则就是重复DNS读取了,反而还无形中增加了DNS查询的次数,效果适得其反。


五、DNS域名解析拆分为多个域名增加并行下载量

1、一般来说网页的内容加载时会发生多个域名请求服务,如果你的网站JS、CSS、图片等非常多的话,建议将这些文件分别放在不同的域名上,这样浏览器在打开某一个页面时就可以同时向这些域名发送DNS解析请求了,能在一定程度上减少DNS时间。

2、网页的内容越多,分析的域名应该尽量多一些。例如html、htm,js、css,jpg、png、gif,php、asp都可以放在不同的域名上。在实际应用上,使用全站CDN或者是静态文件CDN就可以实现上述效果,并且结合css sprite一起来使用的。

3、css sprite(雪碧图)的作用恰恰相反,它不是增加域名请求,而减少域名DNS请求,主要是用在图片上。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。


六、加快域名DNS解析速度方法小结

1、以上就是一些简单的优化DNS小技巧,即时对个人开发者来说也没有什么门槛和技术难度,但是对提升网站的响应速度却有着明显的功效,大家不妨一试。

2、除了从网站本身的DNS解析来加快访问速度外,我们平常在选择DNS服务时尽量使用那些稳定可靠的DNS服务,这样的DNS服务响应速度和缓存率都是非常不错的。假如自己的网站分拆了多个二级域名,不妨好好用用CNAME,设置好TTL时间,保证网站的第一次解析,可以直接从运营商的DNS缓存中拿到。

此处顺便推荐三个神器,两个神服务。

“DNSpod”作为NS服务商,免费稳定专业。

“七牛云CDN”作为CDN服务商,免费稳定专业。

Chrles+Dig+微信web工具 Chrles+Dig+微信web工具

MAC环境下,推荐 Charles用来进行数据抓包,网络通讯分析;Dig用来检测DNS,GUI界面,简单直观好用;微信web工具作为辅助,尤其是你的产品需要在微信内打开时,必备工具。



不收钱 加好友

龟龟 / -  阅读量
Published under(CC) BY-NC-SA 3.0 CN.


1