如何监测域名解析服务器解析IP地址所用的时间
你好一般情况下域名初次解析生效的时间最快是即时生效或者是十分钟左右就可以生效的但因为各个地区DNS服务器更新的时间不同所以每个地区域名解析生效的时间也不相同判断生效时间的方式也比较简单在用户本地电脑上点开始运行输入cmd输入ping 域名 -t(中间有空格)然后按回车当解析生效时PING值中会反馈出你所解析指向的那个IP
当各地的DNS服务器接受到解析请求时,就会向域名指定的NS服务器(权威域名服务器)发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器(各地的缓存服务器,也叫递归域名服务器)中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向NS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。域名DNS分两种,一种是权威域名服务器,域名注册商的服务器都为权威域名服务器,TTL值只能在权威服务器修改,还有一种域名解析服务器就是缓存DNS服务器,比如各地ISP上网设置的DNS服务器,它的作用主要是把域名解析结果缓存到本地,方便你查询。域名DNS的TTL值实际上就是各地的DNS缓存服务器多久去你的权威域名解析服务器(NS)获取一次你域名的解析IP。那么域名解析的TTL只应该设置为多少合适呢,下面有两个建议,你可以结合自己参考一下:一增大TTL值,以节约域名解析时间,给网站访问加速。国内和国际上很多平台的TTL值都是以秒为单位的,很多的默认值都是3600,也就是默认缓存1小时,这个值实在有点小了,难道会有人一个小时就改一次域名记录吗?你可以根据自己的需要把这个值适当的扩大,例如要缓存一天就设置成86400。Godaddy的TTL设置比较直观,但总共只有5个值可以选定,即时切换到高级设置模式也是如此,有点死板了。二减小TTL值,减少更换空间时的不可访问时间。更换空间999%会有DNS记录更改的问题,因为TTL缓存的问题,新的域名记录在有的地方可能生效了,但在有的地方可能等上一两天甚至更久才生效。结果就是有的人可能访问到了新服务器,有的人访问到了旧服务器。如果原来的域名TTL值设置的小,各地的ISP域名缓存服务器服务器就会很快的访问你域名的权威DNS解析服务器,尽快把你域名的DNS解析IP返回给查询者这就是说你如果想要解析速度,各地ISP的DNS服务器缓存你的域名,你就需要把TTL值设置大一些,如果你想域名更换空间或者IP后能尽快解析到新的IP上,就需要把TTL值设置小一些总结:对于IP地址相对固定,或短期内不会变更IP地址的用户来说TTL值设置的大些如几个小时或更大些为宜。调大TTL值可以显著的提高域名的解析稳定性和速度。而对于近期有计划变更IP地址的用户需要提前把TTL值改小
作为一个站长,一定希望自己网站的打开速度足够快,以免访问者因为失去耐心而关闭浏览器。 本文将介绍如何缩短网站域名的DNS 解析时间,来让访问者更快的打开你的网站。 一、域名的DNS 解析过程 将一个域名解析成IP 地址,主要由以下几个步骤: 1 将域名解析请求发送给本地的域名服务器 (DNS Server) 。 2 域名服务器 (DNS Server) 收到请求后,先查询本地缓存,如果有该域名的纪录项,则直接返回目标IP 地址。 3 如果本地缓存中没有,则直接发送请求给根域名服务器 (Root Name Server) 。 根域名服务器 (Root Name Server) 返回给本地域名服务器 (DNS Server) 一个所查询域的主域名服务器 (gTLD Server) 地址。 4 本地域名服务器 (DNS Server) 再向上一步返回的 TLD 服务器发送请求。 接受请求的 TLD 服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器 (Name Server) 的地址。 5 正常情况下 Name Server 会有相应的记录,并返回给 DNS Server 。 6 本地 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 值在同一天内的监控结果。 图一:TTL 设为一小时 图二:TTL 设为一周 可以注意到,图二中域名DNS 解析所花的时间可以忽略不计,这就是域名A 记录 TTL 时间长,增加了缓存的命中率带来的加速效果。 2、选择更快的本地DNS Server 一般而言,我们无法决定用户使用何种DNS Server,大部分初级用户使用的是本地ISP 自动获取的DNS Server,部分用户则使用第三方DNS Server 比如Open DNS 或者Google DNS。 不过你可以建议你的用户使用Google DNS (8888 和8844),该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 给我们。
当浏览器解析URL时,会将域名发送给本地DNS服务器,如果本地DNS服务器没有缓存该域名的IP地址,就会将该DNS请求发给Root DNS服务器,然后Root DNS服务器会将该DNS请求发给顶级DNS服务器,顶级DNS服务器又会将该DNS请求发给权威DNS服务器,权威DNS服务器返回IP地址给主机(取决于是迭代还是递归查询),然后主机向该IP地址的服务器发起访问请求。假设DNS查询响应时间分别为 Rtt1, Rtt2, Rtt3,Rtt4t的话,最长为Rtt1+Rtt2+Rtt3+Rtt4,如果主机没有缓存,本地DNS服务器有该域名的IP地址缓存,则最短为Rtt1,以此类推
以asp+js为例说明。
下面分析代码结构,先是获取服务器时间:
代码如下:
<%
d=Date()
t=Time()
%>
var
t0=new
Date()getTime();
var
nyear=<%=Year(d)%>;
var
nmonth=<%=Month(d)%>;
var
nday=<%=Day(d)%>;
var
nwday=<%=WeekDay(d)%>-1;
var
nhrs=<%=Hour(t)%>;
var
nmin=<%=Minute(t)%>;
var
nsec=<%=Second(t)%>;
//获得本机时间和服务器时间之差
var
dectime=new
Date(nyear,nmonth-1,nday,nhrs,nmin,nsec)getTime()-t0;
nday=-1;
//用于显示时间的span
documentwrite("<span
id=\"clock\"
style=\"word-break:keep-all\"></span>");
//时间计算函数:
function
NewTick(){
var
noww=new
Date();
var
t1=nowwgetTime();
nowwsetTime(t1+dectime);
if(nowwgetDate()!=nday){
nyear=nowwgetFullYear();nmonth=nowwgetMonth()+1;nwday=nowwgetDay();nday=nowwgetDate();
}
nhrs=nowwgetHours();nmin=nowwgetMinutes();nsec=nowwgetSeconds();
}
//时间显示函数:
function
Draw(){
NewTick();
//先计算
var
s=nyear+'年'+nmonth+'月'+nday+'日
'+'星期'+cweekday(nwday)+'
'+shapetime(nhrs,nmin,nsec);
s+="
农历"+lmonth+"月"+lday;//显示农历
documentgetElementById("clock")innerHTML=s;
//每隔500毫秒重新获取一下本机时间:
setTimeout("Draw()",500);
}
//开始显示:
Draw();
0条评论