如上图所示,普通用户打开一个网页的时间主要由四部分组成:
网站域名通过 DNS 服务器解析到IP地址的时间
通过IP地址和服务器建立HTTP连接的时间
服务器接受连接请求后进行计算的时间
网页内容通过HTTP协议传输到用户的时间
在上图中,DNS域名解析时间占了整个访问时间的1/3强,严重拖慢了用户打开网页的速度。
作为一个站长,一定希望自己网站的打开速度足够快,以免访问者因为失去耐心而关闭浏览器。
本文将介绍如何缩短网站域名的DNS解析时间,来让访问者更快的打开你的网站。
一、域名的DNS解析过程
将一个域名解析成IP地址,主要由以下几个步骤:
将域名解析请求发送给本地的域名服务器 (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解析时间
知道了域名的DNS解析过程,就可以采取相应的措施,缩短解析时间,我们所能影响和选择的方面主要包括缓存、本地DNS Server和域名的Name Server。
1、增加域名的缓存命中率
如果访问者访问网站时,域名在本机或当地的DNS Server缓存中,则可以大大加快该域名的解析时间。
以下方法可以增加域名在DNS Server中的缓存命中率:
提高网站的访问量。
网站的访问量越高,意味着网站域名被请求解析的次数越多,则该域名被DNS Server缓存的几率就越大。增加域名A记录和CName的TTL (Time-To-Live) 值。
TTL就是一条域名解析记录在DNS Server中的存留时间和过期时间。增大TTL值可以让DNS Server缓存该域名更长时间,增加缓存的命中率。TTL一般默认为一小时,可以根据实际情况设为一天甚至一周以上。
当然,如果你域名的IP经常变化,则TTL不应过大,否则各地的DNS Server会暂时无法获得新的正确的IP地址。
下图是两个网站采用相同服务器、相同IP、相同网页内容,不同的TTL值在同一天内的监控结果。
可以注意到,图二中域名DNS解析所花的时间可以忽略不计,这就是域名A记录TTL时间长,增加了缓存的命中率带来的加速效果。
2、选择更快的本地DNS Server
一般而言,我们无法决定用户使用何种DNS Server,大部分初级用户使用的是本地ISP自动获取的DNS Server,部分用户则使用第三方DNS Server比如Open DNS或者Google DNS。
不过你可以建议你的用户使用Google DNS (8.8.8.8 和8.8.4.4),该DNS Server会比电信或网通自动获取的DNS Server快许多。
3、选择更快的域名Name Server
在域名的whois信息中,我们可以看到域名的Name Server,不同的Name Server有不同的域名管理面板用来管理A记录和CName等信息。
由于一般的站长无法在全世界建立Name Server的镜像,所以我们只能选择离目标访客物理距离近的Name Server以加快访客的解析速度。
比如你的网站主要浏览量来自中国,则你的Name Server最好也在中国境内,最好是电信和网通双线的。如果你的网站主要浏览量来自美国,则你可以用Godaddy的Name Server。
不过近年来宫信步势大,大量域名都转移至了国外,而国内缺少免费、稳定的第三方Name Server,使得这个问题很难解决。Godaddy的免费Name Server,国内解析起来实在很慢,也许我们可以期待无所不能的Google将来提供免费的Name Server给我们。
三、结论
本文通过理解域名的DNS解析过程,选择我们所能影响的因素,采取对应且免费的措施来加快域名的DNS解析时间,使得访客有更快的打开速度和更好的用户体验。