DNS云学堂 | 如何判断LocalDNS真实生效时间?详解TTL配置对DNS缓存时间的影响

2021-09-02
我们在前面的云学堂分享过关于DNS缓存管理,你想知道的都在这里》一文,详细介绍了DNS缓存存在的位置以及缓存管理方法。相比于其他环节的DNS缓存,运营商LDNS的缓存对于客户端来说更为重要,具有不可知、不可控的特点。一旦发生异常,会对大量的客户端产生影响。因此本文将通过现网环境下,真实域名解析测试,对LDNS缓存的生效规律和影响因素进行进一步验证和说明。

首先,我们再来回顾一下DNS缓存的相关知识。


1.DNS缓存知识回顾


什么是DNS缓存?以一次完整的域名解析流程为例:


1. 当用户希望访问www.zdns.cn网页时,在浏览器中输入www.zdns.cn,浏览器将DNS解析请求发送到客户端DNS解析器;

2. 客户端解析器向运营商LDNS发起解析请求;

3. LDNS执行DNS递归查询,此时会分别向根、cn、zdns.cn的权威解析服务器依次发起解析请求。最终获得www.zdns.cn域名对应的IP地址202.173.11.10,并将该结果应答给用户客户端;

4. 此时浏览器接收返回的www.zdns.cn对应的IP地址202.173.11.10,和本机建立http(s)访问连接;


执行一次上述完整DNS解析请求一般用时在几百毫秒乃至数秒的时间,对用户的网页访问造成了不好的体验。因此,在靠近客户端的位置,如浏览器、客户端本地、LDNS等位置设计了DNS缓存机制,当DNS解析请求命中某一级的缓存时会触发缓存拦截机制,直接将缓存的映射关系返回。通过DNS缓存机制可以将DNS解析时间大大缩减至数毫秒甚至微秒的级别。


此外,大量的DNS解析请求通过DNS缓存机制被拦截在靠近客户端的设备上也减少了到权威服务器上查询的流量,大大的缓解了权威服务器的负载压力。


2.各环节DNS缓存机制


目前常见的DNS缓存环节主要为浏览器缓存、系统缓存和LDNS缓存,缓存的时长,大多数是通过解析记录中TTL参数控制的。

注:TTL(timetolive):即生存时间,主要由解析器在缓存资源记录(RR)时使用。TTL描述了RR在被丢弃前的可以缓存多长时间(单位为秒)。换言之,TTL值应为解析器在其缓存中保留域的最长时间。可以参考RFC1034获取更多相关信息。

  1. 浏览器缓存
当用户通过浏览器访问某域名时,浏览器会优先查找DNS缓存,若存在该域名缓存记录,就会直接使用缓存中的IP地址。浏览器的DNS缓存时间通常与DNS记录值中的TTL值无关,不同浏览器有各自的DNS缓存策略,一般情况下浏览器DNS缓存的时间较短,以Chrome浏览器为例,默认的DNS缓存时间为60秒。浏览器的缓存一般对客户端影响较小。
  1. 操作系统缓存
若用户的DNS请求未命中浏览器缓存,则会访问操作系统缓存。操作系统的缓存时间会参考DNS服务器返回的TTL值,基于操作系统的DNS缓存策略经过处理后得到操作系统的缓存时间,该值一般情况下小于权威记录配置的TTL值。
  1. 运营商LDNS缓存
若DNS请求仍未命中操作系统缓存,则该请求会到达运营商LDNS处,如果LDNS缓存了该域名,则直接返回解析结果,如果没有缓存,则会从根服务器开始,到权威解析服务器查询。

综上所述,浏览器缓存和操作系统缓存位于客户端本地,用户可以根据自己的实际需求主动清空本地DNS缓存。但LDNS缓存时间受限于运营商的缓存策略,对最终用户来说是个黑盒子,通常不可知不可控,而且当某LDNS缓存数据错误后会影响解析请求到该LDNS上的大量用户。此外,由于TTL值设置异常导致触发LDNS机制,强制长时间缓存时,也缺少有效的缓存刷新手段。因此,我们应该更多的关注TTL值与LDNS缓存所产生的影响。


3.TTL配置对运营商LDNS缓存时间的影响


下面我们将使用DNS解析探测系统,基于遍布全国各地覆盖主要运营商的超过100个解析探测节点,模拟终端用户发起DNS请求。对不同TTL值的解析记录变更后进行定期监控,以此来测试不同TTL值配置,在LDNS真实生效时间。

测试步骤:


1.首先创建三条解析记录,如下表,TTL时间分别是1秒,60秒,3600秒

202192


2.使用DNS解析探测系统,对着三个域名进行周期性探测,探测频率为2分钟,持续一小时,确保运营商LDNS充分缓存。


3.分别修改这三条解析记录的记录值,如下表:

202192


4.继续使用DNS解析探测系统,对LDNS上是否更新为修改后的结果进行检测,每2分钟记录一次生效率,生效率算法为(已生效节点/全部探测节点)X100%。

5.将统计数据绘制为LDNS缓存生效曲线图。


202192

变更生效曲线图

上图纵轴为变更生效率,横轴为变更后经过的时间(单位为秒)。


4.测试结论


根据测试结果我们可以得出以下结论:

运营商递归并不严格遵守TTL值作为缓存生存时间,如图当TTL设置为1s、60s和3600s时,不同解析记录在相对应的TTL时间内,变更生效率均没有达到100%;


较小的TTL设置在早期会带来更高的变更生效率,如图TTL设置为1秒的解析记录,在30分钟内,变更生效率高于TTL设置为60秒和TTL设置为3600秒时的生效率;但当变更一段时间之后生效率会在95%附近波动,这是由于部分运营商LDNS强制将缓存时间提高导致的;


对于80%变更生效率阈值而言,TTL设置为1s和TTL设置为60s区别不大,仅相差大概两分钟左右,但因此TTL设置为1s时,因为缓存频繁过期,对权威解析服务器带来的流量压力,却几十倍于TTL设置为60s的情况;


5.小结


1. 设置TTL值较小

优点:

更快的变更生效时间,尽可能的减少由于DNS缓存未更新导致的终端用户解析异常;

缺点:

当TTL值设置过小时导致DNS解析时延边长,因为要频繁去权威服务器获取结果;

部分LDNS有特殊的缓存机制,过小的TTL设置会导致这些LDNS服务器强制更新TTL为一个较大的值,反而导致缓存长时间不过期;

更多的DNS解析请求发送至上游权威服务器,对权威服务器产生了更大的负载和带宽的压力,运营商也会为此支付更多的带宽费用;


2. 设置TTL值较大

优点:

更快的DNS解析响应时间,大部分解析请求由缓存直接响应;

更多的解析被拦截至LDNS的缓存中,较小的流量到达上游权威服务器,权威服务器负载和带宽压力更小,运营商运营所需的带宽费用也相对较低;

缺点:

变更生效时间长,当变更解析记录或触发宕机切换时,有更多的终端用户可能因为访问到未失效的缓存而导致业务访问异常;




在现网环境中,影响运营商LDNS缓存的因素还有很多,比如某域名某时段内的解析热度、LDNS当前的实时负载情况、LDNS集群不同节点的同步情况、根据国家监管要求的特定域名缓存策略等,都会影响缓存时长。本文仅通过测试不同TTL值对LDNS缓存的影响抛砖引玉,说明运营商LDNS缓存的重要和复杂程度。

阅读5472
分享