说说DNS吧

时间: 2012-05-30 / 分类: 网络技术 / 浏览次数: 12,137 / 10个评论 发表评论

之前有给两位朋友讲DNS,讲来讲去就是讲不明白,问题不是在自己不明白,明明自己就很清楚,就是讲来讲去把自己都讲糊涂了。

问题在哪里呢?主要问题就是像DNSPODhe.net这样提供免费DNS解析的服务与像Google Public DNS和OpenDNS这样提供公共DNS查询的服务,这两者之间的区别是什么,自己又该怎样搭建这两种服务呢?

那得先说说整个DNS查询流程,呃,写到这里懒劲又犯了,咋办?抄呗。

举个栗子,我电脑TCP/IP协议的设置里面DNS服务器地址填的Google的8.8.8.8,我现在要访问www.163.com
1、首先,客户端提出域名解析请求(无论以何种形式或方法),并将该请求发或转发给本地的DNS服务器,OK,这里是8.8.8.8这台DNS服务器。
2、接着,DNS服务器8.8.8.8收到请求后就去查询自己的缓存,如果有该条记录,则会将查询的结果也就是IP地址返回给客户端。(也就是我们看到的““非权威性”的应答”)。
好,这是在8.8.8.8庞大的缓存中已经命中到www.163.com的记录的情况下,整个查询已经完成了,第二步就结束了,但如果缓存中没有呢?那得继续第二步啊。
如果DNS服务器8.8.8.8本地没有搜索到相应的缓存记录,则会把请求转发到根DNS(13台根DNS服务器的IP信息默认均存储在DNS服务器中,当需要时就会去有选择性的连接),我们也可以用命令nslookup -qt=ns .(.别掉了,其实我们域名应该都在最后加个.的)来查询一下这13个根服务器。
3、然后,根DNS服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该域名子域的DNS服务器地址。现在查询的是www.163.com的IP,根DNS服务器就会在负责.com顶级域名的DNS服务器中选一个(并非随机,而是根据空间、地址、管辖区域等条件进行筛选),返回给DNS服务器8.8.8.8。可以说根域对顶级域名有绝对管理权,自然也知道他们的全部信息,因为在DNS系统中,上一级对下一级有管理权限,毫无疑问,根DNS是最高一级了,这一步我们也可以用命令nslookup -qt=ns com.来查询一下看看。
4、DNS服务器8.8.8.8收到这个地址后,就开始联系对方并将此请求发给它,这台负责.com域名的服务器收到此请求后,自己也无法解析啊,就会返回一个管理.com的下一级的DNS服务器地址给本地DNS服务器,也就是负责管理163.com的DNS。
5、当DNS服务器收到这个地址后,就会重复上面的动作,继续往下联系。
6、不断重复这样的查询过程,直到有一台DNS服务器可以顺利解析出这个地址为止。在这个过程中,客户端一直处理等待状态,它不需要做任何事,也做不了什么。
7、直到DNS服务器8.8.8.8获得IP时,才会把这个IP返回给客户端,到此在本地的DNS服务器取得IP地址后,递归查询就算完成了。本地DNS服务器同时会将这条记录写入自己的缓存,以备后用。
到此,整个解析过程完成。
客户端拿到这个地址后,就可以顺利往下进行了。但假设客户端请求的域名根本不存在,解析自然不成功,DNS服务器会返回此域名不可达,在客户端的体现就是网页无法浏览或网络程序无法连接等等。

说时话长,但DNS查询这个过程是非常快的。

这整个过程我们可以举个很形象的例子:

我老婆要我办理户籍迁移的事,我要找我老婆家所在的乡派出所户籍室的电话问一些事情,我打电话到她们市的114问镇派出所户籍科的电话肯定问不出来的啦,问了市公安局的电话,然后我再打电话到市公安局问了乡派出所的电话,再打电话到乡派出所问了户籍科的电话,再打户籍科的电话问清楚了事,然后回给老婆了,这整个过程就是一个类似DNS递归查询的过程了,OK,我清楚了办理户籍迁移的事,下次如果谁问我,我就可以直接告诉她了,恩,这就是缓存,如果下次谁又问我,我不知道,我又这样打电话查询,这又是一轮新的DNS查询了。

这里面涉及到两种查询方式,分别是递归查询与迭代查询,像DNS服务器8.8.8.8它自己本身不知道,就一层层去查询,这就是递归了,像.com域名的DNS服务器,它不知道,就递交给下一层的服务器查询,这种就是迭代了。

搞清楚这个查询过程,其实那两种DNS服务器的方式就很明白了,架设两种不同的服务器,其实方法是一样的,只是看怎么使用它了。

本文大部分内容从下面地址抄来的,如果想了解整个DNS服务器的运作和架设管理,可以看一下这个作者写的一系列DNS教程。

http://jeffyyko.blog.51cto.com/28563/216962

10个评论

  1. Tarivs
    2013/05/03 22:45:11

    写的很详细

  2. 阿J小虫
    2012/08/22 13:16:24

    不错,通俗易懂哇。。。

  3. d9o
    2012/08/17 13:33:20

    说道DNS又令人不禁要对天朝那些阉割过的DNS服务器发飙…….

  4. 苏文
    2012/06/09 15:28:07

    he.net和dnspod还好吧..前段时间GD的dns基本全名被XX了

  5. 大概是个博客
    2012/06/04 19:38:25

    呀,确实呃,Akismet果然很棒哦

  6. 大概是个博客
    2012/06/04 19:36:24

    不可能啊,别人的可以不出来,你秦大少的怎么能不出来呢

  7. 秦大少
    2012/06/04 19:35:58

    果然是我的网址被AK……

  8. 秦大少
    2012/06/04 19:35:23

    我的留言在你这也出不来了???

  9. 秦大少
    2012/06/04 19:34:28

    只可意会,不可言传,哈哈哈!

  10. Louis Han
    2012/05/31 13:50:58

    说的这么清楚都不明白那就太菜了

发表评论

您的昵称 *

您的邮箱 *

您的网站