全方位认识DNS( 三 )


如果在本地域名服务器没有发现该域名的资源记录,就需要在整个域名空间搜索该域名 。而整个域名空间的资源记录存储在一个分层的、树状联系的一系列域名服务器上,所以本地域名服务器首先要从根域名服务器开始往下搜索 。这里有一个问题就是本地域名服务器如何找到根域名服务器在哪里呢?其实域名服务器启动的时候,就会加载一个配置文件,里面保存了根域名服务器的NS记录(要知道根域名服务器地址一般非常稳定,不会轻易改变,并且数量很少,所以这个配置文件会很小) 。找到根域名服务器之后,就可以一级一级地往下查找啦 。
仍然以我们的图a为例,现在假设区域E内的某个用户想访问math.sysu.edu.cn,那么请求的过程如下:
 

全方位认识DNS

文章插图
 
 
域名解析过程
用语言简单描述如下:
1:用户:喂,本地域名服务器,告诉我math.sysu.edu.cn的地址;
2:本地域名服务器:哎呀,我不知道啊,不在我的辖区,容我去问问老大哥吧 。root老大,能告诉我math.sysu.edu.cn的地址吗;
3:根域名服务器:忙着呢,你去问B(.cn);
4:本地域名服务器:喂,B,告诉我math.sysu.edu.cn的地址;
5:B:你去问D(.edu.cn);
6:本地域名服务器:喂,D,告诉我math.sysu.edu.cn的地址;
7:D:你去问F(sysu.edu.cn);
8:本地域名服务器:喂,F,告诉我math.sysu.edu.cn的地址;
9:F:容老衲看看,哎呀,找到了,是X.X.X.X;
10:本地域名服务器:踏破铁鞋终于找到啦,喂用户,出来啊,我找到了,是X.X.X.X
仔细想想,这和我们邮寄快递实在是如出一辙啊,假设你从美国邮东西到广州市番禺区,首先快递送到中国(不过这里没有一个类似根域名服务器的中转站而已),然后往下到广东省,接下来是广州市,再往下是番禺了 。
上面的是本地域名服务器的迭代解析过程,其实也可以递归查询,这里就不说了,道理差不多 。
 
缓存机制
现在整个域名系统已经可以为我们提供域名解析服务了,当我们输入域名,计算机发送DNS请求,然后DNS服务器返回给我们解析的结果,一切看起来很完美 。然而是不是可以更完美呢?
回顾一下平时浏览网站的情况,我们会发现两个比较有意思的结论:
1:80%的时间我们都在看那些20%的网站,这就是大名鼎鼎的80/20 Rule;
2:我们会在一个网站的不同网页之间跳转,也就是不断地访问同一个域名,类似程序访问的局部性原理 。
这两条结论很容易让我们联想到缓存机制 。如果我们将已经访问过的那些域名的解析结果缓存在自己的计算机上,那么下次访问的时候可以直接读取结果,不用再次重复DNS查询过程,给自己和域名服务器都节省了麻烦 。
当然,这样做的一个前提是要缓存的解析结果不会频繁更改,也就是说我十分钟后解析一个域名的结果和现在解析的结果是一样的 。对大多数域名来说,这都是一个不争的事实 。但是难免有一些“善变”的域名,他们可能会频繁更改自己的解析结果 。为了使缓存机制适应这两类情况,我们在域名资源记录里面添加一个Time_ti_live字段,表明这条记录最多可以缓存多久 。对于那些“稳如泰山”的域名,给一个比较大的值,而那些“朝三暮四”的域名,则可以给定一个小的值 。
我们既然可以在本机利用缓存,那么可不可以在域名服务器上也利用缓存机制呢,答案当然是可以的 。因为对于域名服务器来说,上面的两条有意思的结论仍然有效 。所以,域名服务器可以将那些访问过的域名资源记录缓存,用户再次发起请求时,可以直接返回缓存结果,不用去迭代或者递归解析 。
 




推荐阅读