专业提供IPLC、MPLS VPN、SD-WAN、IEPL、海外IDC、云专线等技术方案。
咨询热线:400-028-9798

海外专线-国际带宽-微云网络

IPLC

DNS解析及缓存技术研究与应用

发布时间:2021-05-07 13:54:02作者:匠心独运维妙维效阅读:0

[导读]: 域名系统(DomainName System缩写DNS)是网络的一项核心服务技术,是实现域名与IP地址相互映射的一项网络技术,它的应用将IP地址映射到遵守特定格式的字符地址串,不仅方便记忆,也使

域名系统(DomainName System缩写DNS)是网络的一项核心服务技术,是实现域名与IP地址相互映射的一项网络技术,它的应用将IP地址映射到遵守特定格式的字符地址串,不仅方便记忆,也使得网络服务器访问更加便捷。随着DNS使用逐渐增多,也出现过一些DNS相关的问题,本文从对DNS客户端解析及缓存的实现进行解读,帮使用者理顺DNS客户端配置使用和优化。

1、Linux DNS客户端

对于Linux系统,/etc/resolv.conf是作为DNS客户端使用的配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。常见的配置文件包含类似于如下字段内容:

domain ebank.com

search ebank.com

nameserver 192.168.0.1

nameserver 192.168.0.2

2、解析机制及响应时间

domain用来定义本地域名,这个是对域名没有加”.”符号的加上域名,即在进行不完全域名解析时,默认的附加域名后缀。对于search是用于定义域名的搜索列表,当访问的域名不能被DNS解析时,会将该域名加上search指定的参数,在没有设置search的情况下,search默认为domain的值。

nameserver表示本机进行解析域名时使用该地址指定的主机为域名服务器。可配置多个,但最多支持3个,超过3个无效。当发生域名解析时,resolver会依次查询/etc/resolv.conf文件中配置的nameserver,每个nameserver查询超时(默认5秒)后查询下一个。多个nameserver依次查询过程默认轮询2次,当全部尝试都失败后,会返回错误。因此在配置两个nameserver的情况下,最长超时返回时间是20秒。

在实际的生产情况下,DNS服务会是主备双活节点,当主节点发生故障,备节点仍可使用,不影响实际业务的开展。也就是说,在客户端配置nameserver会配置两个地址,提高DNS的可用性。但当主DNS服务节点因故障不可用时,根据默认的配置方式DNS轮询为5s,整体轮询次数为2次,会导致客户端服务响应时间变长;当双节点故障,DNS查询时间将会更长。因此为了提高在内网DNS出故障或切换的情况下加快响应,可以在/etc/resolv.conf里面修改timeout和attemp次数。如:

options timeout:1

options attempts:1

当加入该配置后,单一的nameserver查询时间会减少为1s,整改nameserver从前至后会轮询一次,超时间缩短为2s,极大的提高DNS解析时间。同时,当设置domain或search时,且nameserver均不可用时,将会在解析的地址后增加域信息再进行一次域名解析,因此成倍增加域名解析时间。因此不建议增加domain和search配置。

总体来看,为了加快操作系统在作为客户端进行域名解析时的速度,避免在DNS故障时造成的DNS解析响应率低,一方面可调整options参数以降低超时时间和尝试的轮询次数,另一方面不设置domain和search,使得DNS解析失败更快速,也提高主DNS故障时切换效率。

3、DNS解析缓存及失效

nscd是glibc中带的dns缓存组件,通常调用C库的网络解析函数如gethostbyaddr、gethostbyname等时会使用到nscd的缓存功能,不需要显示的调用nscd功能。通常Java或python库中相关的函数最终也是调用的C库中的解析函数,所以也会用到nscd的dns缓存功能。如果没有使用C库中相关的网络解析函数,是无法默认使用nscd的dns缓存功能的,如nslookup、dig等工具。

默认suse12中nscd服务用于dns等的缓存服务,里面配置了用于hosts(即DNS缓存),passwd,group,service等的缓存。本文主要探讨DNS缓存服务。

用于缓存时间长短的参数为:

positive-time-to-live   hosts  600

negative-time-to-live   hosts   0

其中positive-time-to-live正向解析缓存时间,单位秒。查看glibc-2.17/nscd目录下的代码,实际上这个参数并未使用,而是直接以DNS应答(answer)报文中带的TTL值为准,即DNSServer上对应解析项设置的有效期。

DNS解析及缓存技术研究与应用

reload-count默认为5,解释如下:

Limit on the number of times a cached entry gets reloaded withoutbeing used  before  it getsremoved.

此参数代表是缓存nscd中缓存的dnscache记录自动reload的次数,默认是5次。由nscd主动往dnsserver发起dns请求,如果期间解析结果有变动会更新nscdcache中缓存的记录reload触发的时间点TTL+CACHE_PRUNE_INTERVAL(宏定义为15),即每次reload间隔75秒。

彻底从cache中被移除的时间应该是75*(1+5)=450s左右。

negative-time-to-live为反向解析缓存的cache时间,单位为秒,默认值为0,即不缓存DNS反向解析。

不管是正向还是反向解析cache,失效后都会被清除,nscd-d 调试的时候可以看到类似的输出:removeGETAI entry "www.baidu.com"

redhat7.5母带默认没有安装nscd,不涉及缓存。如果自行安装,则默认hosts(即dnscache)的positive和negativettl值分别为3600s(实际不生效)和20s。

4、实验验证环节

环境:

Redhat7.5,Client:master, 192.168.43.100,

DNSServer:gateway,192.168.43.1

配置/etc/resolv.conf

nameserver192.168.43.1  ##默认网关,再通过网关路由到后面公有DNSserver

配置/etc/nscd.conf中:

negative-time-to-live  hosts  10

systemctlrestart nscd重启nscd生效。

测试命令:pingwww.baidu.com

Note:默认情况下,ping域名时,从DNSServer获取到IP地址,ping还会进行反向解析。

从抓包看,A记录的DNS应答报文中带的TTL为60s,即DNSServer上对应解析项设置的有效期为60s。

DNS解析及缓存技术研究与应用

NSCDdebug输出中包含Reloading的记录,可以看到刚开始第一次获取到了ip,然后nscd自动从dnsserver 重新reload记录信息。每次间隔正好是60s+ 15s=75s。

Sun24 Jan 2021 12:49:16 AM EST - 23536:  GETAI (www.baidu.com)

Sun24 Jan 2021 12:49:16 AM EST - 23536:  GETHOSTBYADDR (39.156.66.18)

Sun24 Jan 2021 12:50:31 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!

Sun24 Jan 2021 12:51:46 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!

Sun24 Jan 2021 12:53:01 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!

Sun24 Jan 2021 12:54:16 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!

Sun24 Jan 2021 12:55:31 AM EST - 23536: Reloading "www.baidu.com"in hosts cache!

Sun24 Jan 2021 12:56:46 AM EST - 23536: remove GETAI entry www.baidu.com

ping www.baidu.com 成功。来看其中的DNS解析环节:

1)一开始是会有正向解析请求的,然后还会有反向解析请求。

2)10s内紧接着再ping,这个时候是没有正向请求的,因为被nscd cache了。 也没有反向解析请求,因为反向请求也被cache了且在有效期内(10s)。

3)超过10s再ping www.baidu.com,仍然会有发往dns server的反向解析请求。在正向解析cache有效期TTL时间内,不会再发送相关正向解析请求,仍然使用nscd缓存的正向解析cache。

4)如果在10s中间执行nscd -i hosts 则cache被invalidate, 再ping的话正向和反向请求均会发出。

DNS解析及缓存技术研究与应用

另外如果DNS服务器没有配置相关PTRentry,会等待超时返回,这会降低应用响应时间。在我行年金系统上曾经出现过这种情况。通过在DNS服务器上配置相关PRTentry(尽管是无用的配置,但是能提高响应速度)

5、使用建议

有类似场景的应用系统应掌握和理解DNS解析及缓存机制,合理设置dns解析的重试、超时范围,合理利用DNScache加速解析,同时也要避免设置不合理造成的解析不同步,影响业务响应及失败,特殊场景下可通过工具或回调方式显示触发invalidatedns cache操作,保障dns解析的时效性。

免责声明:部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递 更多信息之目的,并不意味着赞同其观点或证实其内容的真实性,如本站文章和转稿涉及版权等问题,请作者在及时联系我们本站,我们会尽快处理。

标题:DNS解析及缓存技术研究与应用

TAG标签:DNS

地址:http://www.vecloud.com.cn/zhishibaike/234.html

常见问题

  • 如何快速互联全球?IPLC海外专线来帮您!

    信息时代,互联网内容更新速度极快,企业出海过程中,海量内容和快速的传播需求,也对网络提出了更高的要求。IPLC海外专线为您护航企业高效出海微云网络IPLC服务基于运营商丰富可

  • 什么是EVPN?

    EVPN(Ethernet Virtual Private Network)是一种用于二层网络互联的VPN技术。EVPN技术采用类似于BGP/MPLS IP VPN的机制,通过扩展BGP协议,使用扩展...

  • 公司用的Polycom卡顿延迟严重怎么解决?

    大多数导致Polycom卡顿延迟的原因是这几个 1、防火墙连接。 验证是否在防火墙打开了所需的 URL、IP 地址和端口可最大程度地减少不必要的故障排除。 2、企业办公路由器和计算机性能不

  • github无法打不开,加载慢怎么办,这个方案分分钟搞定

    Github 是 程序员绕不开的网站,里面有大量的资源,既有开源项目,又有各种刷题面经,堪称程序员手中的大明绝顶,每个武功高强都想上去探探究竟。 但是呢,下载速度实在不敢恭维

  • 什么是香港国际专线,为什么走香港呢

    为什么我们现在一说国际专线习惯性的说走香港呢?香港与国际专线有什么关联呢? 大陆与海外的网络访问通过香港的互联网的我们称之为香港国际专线,大陆到香港的局域网专线我们也

  • 机房托管配置价格表

    最好找到合适的IDC服务提供商进行服务器托管租赁。没有一个IDC服务提供商是绝对完美的,绝对满足每个用户的需求,因为每个用户的需求是不同的,只有成本效益高,合适的是最好的,有很多人想了解机房托管配置价

  • ​IPv4的全局地址可以重复吗?

    我是迷惑这样一个事情,比如一个全局IP:18.18.18.18,是不是可以把网段18.18.0.0/16分配给公司A,公司A有一台主机IP为18.18.18.18/16;再把18.18.18.0/24...

  • 公司用的Microsoft Teams卡顿延迟严重怎么解决?

    一般导致Microsoft Teams卡顿延迟是这几个原因 1、防火墙连接。 验证是否在防火墙打开了所需的 URL、IP 地址和端口可最大程度地减少不必要的故障排除。 2、企业办公路由器和计算机性能

  • 在海外玩国内游戏网络卡,延迟高如何解决

    大部分国内游戏客户端游戏服务器放在国内,经常会遇到海外用户访问国内游戏服务器缓慢,导致用户体验下降,那如何可以加快游戏服务器的访问呢? 1、国际互联网加速方案 用户机房

  • MPLS LDP指的是什么?

    LDP是标签发布协议的一种,用来动态建立LSP。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上。 LDP基本概念 1、LDP会话 LDP会话建立在TCP连接之上,用于在LSR之间...