通常情况下域名解析记录是很少更改的。我们可以通过增大域名记录的TTL值让记录在各地DNS服务器中缓存的时间加长,这样在更长的时间段内,我们访问这个网站时,本地ISP的DNS服务器就不需要向域名的NS服务器发出解析请求,而直接从本地缓存中返回域名解析记录,从而提高解析效率。
TTL值是以秒为单位的,通常的默认值都是3600,也就是默认缓存1小时。我们可以根据实际需要把TTL值扩大,例如要缓存一天就设置成86400。
因为DNS记录缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效(部分省份运营商调大了TTL值),这样就会就导致部分用户在一段时间内无法访问网站。
为了尽可能的减小各地的解析时间差,可参考以下步骤执行:
我们在使用浏览器访问互联网资源时,想获取指定的服务和信息。首先就要了解浏览器是如何定位到我们的站点的。输入一个域名(如:www.jd.com)浏览器会首先从自身的缓存中查询是否有历史域名对应的IP并且有效,如果有就使用该缓存通过IP直接访问到指定的站点。如果没有则查询本地的Host缓存,如果有就使用本地的缓存直接访问站点,没有则向本地DNS服务器发起请求查询,如果本地DNS服务也没有找到,则向公网DNS服务发起查询请求获取对应的有效IP,并返回缓存到浏览器和本地缓存中,供后续请求使用。DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。操作系统缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
DNS查询请求类型:
1、权威答复:权威答复是返回给客户的正向答复,并且设置了DNS消息中的权威位。此答复代表从具有权威的DNS服务器处发出。
2、正向答复:正向答复包含了匹配客户端解析请求的资源记录。
3、参考答复:参考答复只在DNS服务器工作在迭代模式下使用,包含了其他有助于客户端解析请求的信息。例如,当DNS服务器不能为客户端发起的解析请求找到某个匹配值时,则向DNS客户端发送参考回复,告诉它有助于解析请求的信息。
4、否定答复:否定答复指出权威服务器在解析客户端的请求时可能遇到了以下两种情况之一:
权威DNS服务器报告客户端查询的名字不存在;
权威DNS服务器报告存在对应的名字,但是不存在指定类型的资源记录。
DNS服务器解析返回IP分配策略与客户端对域名IP选择策略,无论正向答复还是否定答复,DNS客户端都将结果保存在自己的本地缓存中
浏览器缓存:
浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间。
参考浏览器DNS缓存时间:
本地缓存:
每种操作系统都有自己的DNS缓存时间控制。
1、Windows DNS默认值是MaxCacheTTL,它的默认值是86400s,也就是一天。
2、MacOS遵循DNS协议中的TTL,根据各种网络协议不同对不同的域名采用不同的缓存时间策略。在IPv4包头中TTL是一个8 bit字段,它位于IPv4包的第9个字节。
参考本地DNS缓存时间:
在命令行执行nslookup指令可以看到一个域名对应的IP地址,并且可以帮助我们判断是否有DNS劫持。随便解析一个网站,比如
www.jd.com 应该返回的是正常的地址
然后再解析一个不存在的网站,比如123123.aaaa.com.cn如果返回的结果是
DNS request timed out.
timeout was 2 seconds.
那么证明你的DNS没有被劫持。
如果返回的结果是一个IP地址,比如说网通的返回地址是230.xxx.xxx.xxx,那么证明你的DNS被劫持了。
通过了解浏览器、本地缓存可以帮助我们更好的为用户服务。
1、大型的互联网公司都有IP流量监控,当发生网络故障或劫持时可以第一时间发现。
2、页面是我们与用户面对面沟通的渠道和方式,当我们的网页和服务呈现在用户面前时,我们要了解我们提供的服务是如何影响到用户的体验的,比如我们前端页面的JS、CSS等文件的动态版本号处理方式结合缓存是如何变化的,每次发版会对什么样的用户有影响,都需要严谨。
3、机房内部的各个应用程序服务,比如Zookeeper、Redis、RPC、DB在DNS缓存变化时,可能引起的网络抖动,是否会对用户请求造成影响,也是我们必须要注意的问题。
一、TTL的默认值是多少?
不同的操作系统,它的TTL值是不相同的。这里和大家谈谈一些常用的操作系统的默认TTL值,默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。域名的dns解析默认的TTL值一般是60。
二、操作系统的TTL最大值:
TTL最大值为255,如UNIX操作系统的TT值初始默认TTL值就是225。不同的系统最大值也是有所不同,对于实验室环境所使用操作系统默认的TTL 最大值是128,所以要视情况而定。
三、如何修改TTL值
首先提醒大家这个TTL最好是设定初始默认值,不要去乱修改。一般情况下改动可能会出现错误,而且我们也不知道修改TTL值才是最合适。当然如果需要修改TTL值的话,修改TTL值其实非常简单。具体操作如下:
1、点击“开始→运行”,在“运行”对话框中输入“regedit”命令并回车,弹出“注册表编辑器”对话框,展开“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters”,找到“DefaultTTL”,将该值修改为十进制的“64”,重新启动服务器系统后即可。
2、或者尝试批处理文件来修改TTL值。首先打开记事本txt,将下面的代码粘贴到记事本上面:
@echo REGEDIT4>>ChangeTTL.reg
@echo.>>ChangeTTL.reg
@echo [HKEY_LOCAL_MACHlNESystemCurrentControlSetServicesT cpipParameters]>>ChangeTTL.reg
@echo "DefaultTTL"=dword:000000">>ChangeTTL.reg
@REGEDIT /S/C ChangeTTL.reg
然后在将记事本文件另存为.bat的批处理文件,文件夹自己设置,然后在运行这个.bat文件。你的操作系统的缺省TTL值就会被修改为ff,即 10进制的255,也就是说把你的操作系统人为地改为UNIX系统了。在修改之后会在当前文件夹.bat的路径上自动生成一个ChangeTTL.reg 的注册表文件。如果你想运行完这个批处理文件而不产生 ChangeTTL.reg文件,可以在此批处理文件的最后一行加上 deltree/Y ChangeTTL.reg,就可以无须确认自动删除ChangeTTL.reg文件 。
友情提示:
3、还有就是通过一些第三方工具来修改你的TTL值,比如苏苏查看TTL值工具就是可以查看TTL值及修改TTL值,建议你可以去试试。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)