转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059

DNS(domain name system),读者们或多或少都听过,就是可以将域名转换给IP的一个系统。使得我们只需记住域名而非IP就能访问某个网站。当我们在浏览器里面输入一个网址时,浏览器会向本地DNS服务器发出查询请求,本地DNS服务器会把网址对应的IP返回给浏览器。注意:更确切来说,不是本地DNS服务器,而是Windows网络连接里面所配置的DNS服务器。一般我们不会配置的,所以本文默认使用本地DNS服务器。        除了用浏览器,我们也可以通过命令行的方式查询某个网址的IP。比如使用nslookup命令。下图是通过nslookup命令向阿里的公共DNS服务器223.5.5.5查询www.weibo.com的IP地址。可以看到最后的查询结果是121.194.0.221

从上面的叙述和命令使用,可以得知从域名到IP参与者有:DNS客户端(浏览器或者nslookup命令);DNS服务器(本地DNS服务器或者阿里的公共服务器)。其实,这里还隐藏了另外一个参与者:名字服务器(name server)。一共有三个参与者:DNS客户端( domain name systemclient)、DNS服务器(domain name system server)、名字服务器(name server)。

名字服务器有什么用呢?它和DNS服务器又有什么区别呢?要弄懂这个,首先要解决一个问题,阿里的公共DNS是如何知道微博IP的?它记住了,确实它是记住了(上图返回的是非权威应答,这说明是记住了)。但它不可能记住全球所有网站的IP吧。当用户向它查询一个它没有记住的网址时,它是怎么办的呢?我们不知道一个网址的IP,可以求助于DNS服务器,那么DNS服务器不知道呢?嘿嘿。

或许读者听说过DNS是分层的,不知道的话,就向上层查询。DNS确实是分层的,并且全球有13个根域名服务器(root name server)。阿里的公共DNS不懂一个网址的IP就要向根域名服务器询问(也可能不是向根域名服务器询问),不懂就要问嘛。但根域名服务器也不可能把全球的所有网址的IP都记录下来吧(对于IPv4或许有点可能,但对于IPv6就不可能了)。如果根域名服务器都不知道某个网址的IP,那可怎么办?其实,虽然根域名服务器不能告诉你某个网址的IP,但它会提供非常有用的信息给查询者(也就是阿里公共DNS服务器或者本地DNS服务器)。

在继续讲解查询之前,要先介绍域(domain)这个概念,因为网址是分域而治的。域名系统就像我们平常使用的文件目录那样,是分层的。首先是根,然后是顶级域(一级域)、接着是二级域、三级域、……。我们熟知的顶级域有:com、net、org、cn。父域将某个标识符(比如cn)分配给子域,然后子域cn将全权负责cn下面的二级域的具体分配。对于cn,熟知的二级域有com.cn、edu.cn这些。当然对于edu.cn又会负责旗下的三级域名分配(比如每个大学分配一个)。这样分层的一个好处就是方便管理。下图是一个DNS层次例子。

图来自《DNS 与 BIND》 图2-5

除了域(domain),还有另外一个重要的概念区域(zone)。假如A是一个域(domain),并且A有子域a和b。如果域(domain)A的管理者把a和b授权给另外的人管理,那么a和b就各自形成一个区域(zone)。也就是说,站在A的角度来看,a和b是区域(zone),但如果只看a或者b,那么又是一个域了。这类似于树里面的,树的一个孩子节点本身也是一颗树。下面用一张图说明这点:

图来自《DNS与BIND》

每一个区域(zone)都会有名字服务器(name server)[1],用来管理这个区域。管理包括对这个域进行再划分成更小的子域以及对子域名的IP解析(也就是将域名转换成IP)。对于某个区域,该区域的名字服务器(name server)就是该区域的权威,权威可以这样认为:该名字服务器给出的本区域的域名到IP转换结果是权威的(除了域名到IP的转换外,还有其他转换的)。

可以使用nslookup 命令查询一个区域(zone)或者主机的名字服务器(name server),如下图所示。其中,-qt=ns 指明要查询的类型是名字服务器(name server);223.5.5.5则是阿里的公共DNS服务器。

从上图可以看到,区域(zone) qq.com的名字服务器是ns[1-4].qq.com,而主机www.qq.com则是ns-tell.qq.com。

需要注意的是,区域(zone)和域(domain)都是一个范围而不是一台主机。比如qq.com它不是一台主机,而qq旗下的万维网服务器的主机名为www.qq.com,还有v.qq.com则是视频服务器的主机名。

有了上面的那些介绍,明确DNS中有什么物理实体,那么讲解DNS查询过程就容易多了。

使用阿里的223.5.5.5作为DNS服务器,查询www.qq.com的IP。假设在查询过程中,阿里的DNS服务器的缓存中并没有任何有关www.qq.com的记录。

  1. 我的PC机向223.5.5.5提出查询请求,查询www.qq.com对应的IP地址
  2. 223.5.5.5向根域名服务器提出查询请求,查询www.qq.com。根域名服务器的IP地址是固定的,每一个DNS服务器都会从配置文件中读取到
  3. 根域名服务器告诉223.5.5.5:“x.x.x.x是.com的名字服务器的IP地址,你去.com的名字服务器查询吧。哥只能帮你到这里了。”
  4. 223.5.5.5拿到这个回复并不生气,而是屁颠屁颠地向.com的名字服务器发出查询请求:“请告诉我www.qq.com的IP地址?”
  5. .com的名字服务器回复说,“给你qq.com区域的名字服务器 ns1.qq.com的IP地址y.y.y.y,你去那里查吧。”
  6. 吃完闭门羹,223.5.5.5再次出发向ns1.qq.com提出查询请求,“你总能告诉我www.qq.com的IP地址吧?这是你们旗下的域名啊”
  7. ns1.qq.com嘿嘿一声,说:“你去ns-tel1.qq.com查吧,它的IP是z.z.z.z”
  8. 223.5.5.5不抱希望地问ns-tel1.qq.com:“你能告诉我www.qq.com的IP吗”
  9. ns-tel1.qq.com说:“可以啊,它的IP是14.17.42.40”
  10. 223.5.5.5拿到结果后,在自己的缓存中存了一份备份,免得待会又有人问我的时候又要这样问来问去。最后223.5.5.5把结果告诉我的PC机

由于223.5.5.5会在自己的缓存中保留一份备份,这就有权威应答和非权威应答两种。如果223.5.5.5返回的结果是直接从自己的缓存中读取的,那么就是非权威应答。如果是从域名本身的权威名字服务器得到的结果,那么就是权威应答。

下图是《DNS与BIND》书中关于DNS查询过程的流程图:

图中的解析器相当于PC里面的浏览器或者nslookup程序。左边的名字服务器就相当于本地DNS服务器或者阿里的公共DNS服务器。

有一点要注意:阿里公共DNS服务器每次发出查询时,请求查询的内容都www.qq.com,而不是其中的某一部分。上图也展示了这一点。这是因为可能途中某个名字服务器的缓存中有www.qq.com,如果仅仅查询qq.com可能会错过[2]。

需要指出的是,DNS查询有两种:递归查询和迭代查询[3]。前面展示的是递归查询,查询工作由本地DNS服务器或者本文中的阿里公共DNS服务器完成绝大部分任务,查询的最初提出者只需等待结果即可。而在迭代查询中,如果本地DNS服务器或者公共DNS服务器的缓存中有查询的域名,那么返回之。如果没有,那么就像上图右边的那些名字服务器(name server)那样,告诉查询提出者“你去那里查吧”,当然也是可以直接返回一个错误信息的。

递归查询使得我们无法观察整个流程,此时可以使用dig命令,通过+trace强制使用迭代查询观看整个流程。下图展示了整个流程(@223.5.5.5表示使用阿里公共DNS服务器):

参考:

[1] http://en.wikipedia.org/wiki/Name_server#Authoritative_name_server

[2]《DNS与BIND》第5版 32页

[3] http://en.wikipedia.org/wiki/Domain_Name_System#DNS_resolvers

转载 DNS查询流程简介的更多相关文章

  1. HTTP请求流程(一)----流程简介

    最近一直在研究如何让asp.net实现上传大文件的功能,所以都没怎么写技术类的文章了.可惜的是至今还没研究出来,惭愧~~~.不过因为这样,也了解了一下http消息请求的大致过程.我就先简单介绍下,然后 ...

  2. [转】:HTTP请求流程(一)----流程简介

    http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html HTTP请求流程(一)----流程简介 最近一直在研究如何让asp.net实 ...

  3. DNS查询的工作原理

    二.DNS查询的工作原理 1.DNS查询过程按两部分进行     1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析     2.如果不能再本机解析查询, 可根据设定的查询DN ...

  4. Linux DNS 查询剖析(第四部分) | Linux 中国

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/82879414 在第四部分中,我将介绍容 ...

  5. FFmpeg编解码处理1-转码全流程简介

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...

  6. 用户访问网页流程、DNS 解析流程

    一.用户访问流程 二.DNS解析流程 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它所提供的 ...

  7. 简单理解DNS解析流程(一)

    0x0 简单理解dns DNS服务器里存着一张表 表中放着域名和IP地址,域名和IP地址以映射关系保存,即一对一 浏览器访问某个域名,实际上是访问它的ip地址 所以浏览器需要知道域名对应的ip地址 如 ...

  8. Java DNS查询内部实现

    源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...

  9. gitlab工作流程简介

    gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...

随机推荐

  1. 探讨read的返回值的三种情况

    http://blog.chinaunix.net/uid-23629988-id-3035613.html 今天探讨一个很看似简单的API “read”的返回值问题.read的返回值有哪几个值?每个 ...

  2. jquery ajax 访问webServer的xml文件

    最近项目中要使用到通过ajax访问webServer的xml文件,通过下面的方式可以直接访问webServer的xml文件,不需要在web.xml中进行任何配置.它的返回参数就是服务器上的xml文件. ...

  3. 传智博客(JavaWeb方面的所有知识)听课记录(经典)

    一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...

  4. SPRING IN ACTION 第4版笔记-第九章Securing web applications-007-设置LDAP server比较密码(contextSource、root()、ldif()、)

    一.LDAP server在哪 By default, Spring Security’s LDAP authentication assumes that the LDAP server is li ...

  5. 忽然发现,if语句没有相应的continue功能

    就是剩下部分语句不用执行了,但是又不退出当前函数,只退出当前if块.虽说else可以解决问题,但是这样还是会重复写代码,假如continue语句后面的内容是相同的话.当然可以通过再次加一个if语句解决 ...

  6. sqlmap批量扫描burpsuite请求日志记录

    sqlmap可以批量扫描包含有request的日志文件,而request日志文件可以通过burpsuite来获取, 因此通过sqlmap结合burpsuite工具,可以更加高效的对应用程序是否存在SQ ...

  7. ssh-keygen的使用方法

    一.概述 1.就是为了让两个linux机器之间使用ssh不需要用户名和密码.采用了数字签名RSA或者DSA来完成这个操作 2.模型分析 假设 A (192.168.20.59)为客户机器,B(192. ...

  8. sed awk 要获得每行的最后一个逗号后边的内容

    获得每行的最后一个逗号后边的内容.例如:KIAA1967 KIAA1967, xxxxSECIS biding proin 2-like, SECISBP2L, yyyy 1234ankyrin re ...

  9. Android开发之 android:windowSoftInputMode属性详解

    android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...

  10. everything搜索工具小技巧

    everything工具平时用的也不多,但是有时候使用的时候却总是找不着北. everything支持五种搜索方式,如下图: 正则匹配搜索: 当你选择正则匹配之后,你可能需要匹配某个文件夹里面的某个文 ...