域名解析耗时就是将域名解析获得对应IP地址,并返回给客户端这个过程所消耗的时间。
当我们对某个域名发起访问,并不是直接就能对响应站点发起访问的,需要借助DNS获取域名与IP地址对应关系,在取得解析记录之后,才能发起访问。
解析过程的具体流程大致如下:
(1)客户端对某个域名发起访问。
(2)浏览器会首先对浏览器、系统缓存以及本机HOSTS文件等本地信息进行查询,如果有结果直接告知客户端,解析过程结束。
(3)如果本地没有结果,浏览器就会请求递归服务器,递归服务器有结果就会告知客户端,解析过程借宿。
(4)如果递归服务器没有结果,就会委托递归服务器进行全球递归查询,首先请求根域名。
(5)根域名告知递归服务器域名所在的顶级域名服务器,递归服务器对顶级服务器发起请求。
(6)顶级服务器告知递归服务器域名所在的权威域名服务器,权威域名服务器将解析记录告知递归服务器。
(7)递归服务器将结果再告知客户端,解析过程结束。
流程图如下所示:
由此可见,影响域名解析耗时的因素有以下几点:
(1)本地缓存
如果本地缓存中有域名和IP地址的对应关系,就会直接在本机获取结果,无需进行全球递归查询,这样解析用时就大大缩短,但缓存对于解析安全有较大影响;
(2)递归服务器
一般而言,我们无法决定用户使用何种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)权威域名服务器
权威域名服务器时影响域名解析耗时的关键,一般的解析服务器都是单节点单线路,如果域名距离较远,可能就会因为跨域跨网造成较大的延迟,如果域名的访问量大,还会造成线路的拥堵。所以为了减少解析时间,建议选择性能较好,多节点,多线路的权威域名服务器。
如果昨天下午(1月21日)你想上网刷刷微博看看视频,那有点费事。几乎全中国的大网站都上不去或者上着上着就“页面错误”了。实际上,这并不是因为你家的网络有什么毛病。看一下新闻就会知道,是国内互联网根域名服务器出现了问题,导致域名都被指向了一个错误的IP地址,进而影响到这些域名的访问。等等,为什么根域名服务器的问题会有这么大的影响,这个服务器是何方神圣?要弄清这个问题,我们首先要知道域名解析服务(DNS)是如何工作的。一开始的时候,互联网上并不存在域名这种简单快捷的访问途径。想要访问千里之外的一个网站或者是一台服务器,使用的都是IP地址,也就是类似于65.49.2.178这样的一串数字。IP地址就像生活中的电话号码,可以精确地定位到某个特定的机器或服务。但是用着用着,人们就觉得实在是太不方便了。就像电话号码很难记住一样,想要靠脑袋记住大量网站的IP简直是天方夜谭。所以,DNS就承担起了“电话查号台”的工作,负责帮我们将简单好记的域名转化为正确的IP地址,免去了记忆“电话号码”的烦恼。只要我们知道DNS服务器的IP地址,就能查到其它所有网站的IP地址。所以我们在浏览器里输入域名的时候,访问的其实还是IP地址,只不过浏览器帮我们从DNS上查到了正确的IP地址,而我们平时却不知道这个过程。
但是所有人都去同一台DNS服务器上面查询,也会出现问题。想像一下,有成千上万的人同时向一个电话查号台打电话查询,会出现什么情况呢?少部分人打通了电话,而大多数则一直占线,查不到想要的电话号码。同时,全世界的电话号码都存在一个电话查号台里,查电话的过程也会非常缓慢。为了解决这两个问题,DNS做了这样两件事:首先,搭建许多DNS服务器,使它们构成树状结构。在查询的时候从根域名服务器开始,一层一层地查下去。其次,为每个区域分配一台本地域名服务器,由这台服务器负责向根域名服务器查询,由于本地域名服务器可以缓存,这也可以极大地减轻根服务器的负担。
所以,我们只需要知道本地域名服务器的IP地址,并给本地域名服务器“打电话”查询。在正常访问某个域名的时候,如果本地域名服务器恰好没有缓存,过程会是这样的:
小王给本地域名服务器“打电话”:你好,我想查询一下http://www.baidu.com对应的“电话号码”。
本地域名服务器接线员:请稍候。
接线员查询了手头的记录,发现没有http://www.baidu.com的IP地址,于是给根域名服务器“打电话”。
本地域名服务器接线员:根域名服务器你好,我想查一下http://www.baidu.com对应的“电话号码”。
根域名服务器接线员查阅了一下手头的记录:我手头没有具体的“电话号码”,但是我知道.com域名服务器上可以找到。我可以给你.com域名服务器的“电话号码”。
本地域名服务器接线员拿到.com域名服务器的“电话号码”,继续给它打电话。
本地域名服务器接线员:.com域名服务器你好,我想查一下http://www.baidu.com对应的“电话号码”。
.com域名服务器的接线员在手头的记录上依旧找不到具体的“电话号码”,于是告诉本地域名服务器接线员,baidu.com域名服务器上可以查到这个电话。
本地域名服务器接线员第三次拨通电话:baidu.com域名服务器你好,我想查一下http://www.baidu.com对应的“电话号码”。
baidu.com域名服务器接线员发现手里有这个域名对应的记录,就将http://www.baidu.com的正确“电话号码”告诉了本地域名服务器接线员。
最后,本地域名服务器接线员把这个正确的“电话号码”记到自己的本子上,再告知小王,才算完成了这次查询。
当下一次另一个用户小李给本地域名服务器“打电话”查询http://www.baidu.com的“电话号码”时,本地域名服务器接线员会发现自己手里的本子上已经有了上次小王查询时留下的记录。这次他就不需要兴师动众地给根域名服务器“打电话”了,只需要将自己本子上记录的“电话号码”告诉小李,就可以完成查询。当然,如果小李和小王的查询之间隔了很长时间,为了防止http://www.baidu.com的“电话号码”发生改变,本子上的这条记录会被当作无效记录,接线员还是会去向根域名服务器重新查询。
在了解了DNS的工作原理之后,为什么根域名服务器会有这么大的影响就显而易见了。即使有本地域名服务器的存在,归根结底,域名和IP地址的对应关系还是从根域名服务器提供的,本地域名服务器只起到一个缓存的作用。所以,一旦根域名服务器出现错误,所有想要解析域名的用户,最终拿到的都会是一个错误的IP地址。既然查号台告诉我们的是一个错误的电话,我们自然就打不通了。
昨天的这次事故,原因还不得而知。有可能是DNS服务器的内部故障,也有可能是由黑客攻击导致。但无论原因如何,DNS服务器对于整个互联网的重要程度已经显而易见,如何保护根域名服务器不受攻击,也会成为安全专家在今后需要特别重视的一个话题。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)