DNS的学习笔记心得

DNS详解:

      由于目前的互联网所使用的是TCP/IP协议,在利用Internet传送数据的时候,就必须要利用IP地址。但IP地址不方便记忆,所以在早期会利用某些特定的档案将主机名与IP做一个对应,这样就可以透过主机名来取得该主机的IP,这就是早期hosts这个档案的用途。
      因为互联网的高速发展,IP数量的增多,不可能把每个IP地址与主机名全写入hosts文件(windows一般存放在系统盘下windows\System32\drivers\etc下 linux一般存放在/etc/hosts下)里,而且hosts文件如果太大,也不利于其他主机同步化,导致每次访问主机都会重新下载一次档案才能顺利通信。所以在后来为了解决这个问题,开发出了新的一套域名解析系统(DNS),只需知道该主机名,部署DNS服务,就可轻易的连上该主机。


DNS(Domain Name System)域名系统

 DNS的主要作用是将主机名和IP地址之间的一个互相转换。是个类似倒树状目录架构,逻辑组织域名,将主机名的管理分配在不同层级的DNS服务器当中,经由分层管理,成为域名空间。

从主机名查询到IP为正向解析

从IP查询到主机名为反向解析

不管正向解析还是反向解析,每个领域的记录都是一个zone(区域文件)
一般正向解析文件的zone里面一般记录了SOA(开始验证) NS(名称服务器)A(地址);反向解析除了NS(标示区域的授权名字服务器)、SOA(标示授权的开始)之外,还会用PTR(指向记录,也就是要反向解析到主机名)


说到DNS就必须明白FQDN的概念:

完整主机名:Fully Qualified Domain Name(FQDN)

 一个与DNS有关的主机名概念,就是主机名与区域之间的关联,例如北京有一个座机号为12345,而上海也有一个座机号为12345,如在上海直接拨打将会拨打到上海的12345上,如你要拨打到北京这必须加010区号,这个区号就指的是区域名(domain name),而电话号码就指主机。
 当我们想访问一个主机名为www的网站,如我们想访问不同地方的主机,就必须给他指定区域名,如www.google.com.hk 这是谷歌在香港的主机,而www.google.com.tw 这就是谷歌在台湾的主机,.hk/.tw就指的是区域名,而.com就指的是主机的名称。所以我们可以利用主机名来分辨出不同位置,可以访问所想访问的主机。

明白FQDN的主机名与区域名之间的关系后,就需明白DNS的域名空间架构如何,DNS是如何来进行查询的工作原理。

 DNS的命名空间的根(最顶级)是由Internet名字授权机构(INTERNIC)管理,全世界总共有13个根域(.),在根域以下,由Internet名字授权机构把域授权给连到Internet的各个组织,如com /org /edu/cn等等,下面进行详细介绍:
 
 1.根域:(Root Domain)根域只有一个,根域是默认的,一般不需要表示出来(如com. 但.默认是添加的)。DNS命名空间都是由位于美国的INTERNIC负责管理域进行授权管理的。在根域服务器中并没有保存全世界的所有的DNS名称,其中只保存着顶级域的DNS服务器名称与IP地址的对应关系。每一层的DNS服务器只负责管理其下一层域的DNS服务器名称与IP地址的对应关系。
 
 2.顶级域(Top-Level Domain,TLD)
在根域之下的第一级域便是顶级域。顶级域位于最右边。顶级域有两种类型的划分方法:机构域和地理域。比如:com(用于商业)、org(组织机构)、edu(教育)、mil(军事)、net(网络、通讯)、gov(政府单位)、cn(中国)等
 
 3.各级子域(Subdomain)
除了根域和顶级域之外,其它域均称为子域。一个域可以有多个子域,子域下面也可拥有子域。

  4.主机名(Host Name)
位于最左边的便是域主机名。
 

如下图:
                                                      .   根域
                         |                                                               |
                 com(顶级域)                                     cn(顶级域)
          |                       |                                                  |  
  sina  yahoo            microsoft(子域)                        com(子域)
       |                           |                                                 | 
       |                           |                                             baidu(子域)    
     www          dev、www(主机名)                             |
                                                                                www(主机名)


 如果我们想获得一个领域,就必须向上层进行申请,例上图,如果我想获得一个sina的领域,我必须向上层顶级域进行申请,所获得的领域名必须跟上上层的后缀如sina.com。由于DNS系统是以授权的阶层式的形式来管理,所以说上一层只记录下一层的主机名,如上图根域只记录com和cn的讯息,而com只记录sina/yahoo/microsoft的主机信息。
 当你想访问www.baidu.com时(正向解析),你的计算机就会根据你所提供的DNS来进行联机查询,我们以电信的DNS服务器为例,这时候电信的这部DNS服务器会进行如下工作:

1、用户会先查询本机的缓存信息如没有回查询hosts文件里是否有记录,如果没有则向DNS服务器提出查询请求(递归)

2、收到用户查询请求后,电信服务器会先查看是否属于自己管理的区域范围,如果不是则查看本身缓存有没有www.baidu.com的记录,若有则直接访问,若没有,则联系根服务器,询问域名IP地址,根服务器会给予电信服务器一个信息,这个域名由.com区域管理,返回.com的服务器IP地址。

3、服务器会向第二层的.com进行查询,然后.com会给予服务器baidu.com这个服务器所在的IP的地址。(迭代)

4、得知baidu.com的IP地址后,访问baidu.com,baidu.com会给予服务器www.baidu.com的IP地址,这样就查询到www.baidu.com的IP地址。

5、当服务器查询到正确的IP地址后,电信服务器会记录一份查询的结果在自己的缓存内存中当中(缓存的保存时间可以在DNS服务器上设置),以方便下一次的查询,然后电信服务器会将结果反馈给用户,这样就访问到了www.baidu.com的页面。

DNS查询模式的一般分为递归查询和迭代查询
1.递归查询:
主机向本地域名服务器的查询会采用递归查询
一般客户机和DNS服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。
如下图(以访问百度为例):
用户
  |
电信DNS服务器
  |
根域
  |
顶级域.com
  |
baidu.com一级域(给予www.baidu.com的IP地址)
  |
查询到www.baidu.com的IP地址后,在原路返回给予用户。

2.迭代查询(反复查询):
一般DNS服务器之间属迭代查询,如.com不能响应电信服务器的请求,则它会将baidu.com的IP给电信服务器,以便其再向baidu.com发出请求。
上述2-5步骤则为迭代查询。

递归查询和迭代查询的区别如上所述:递归查询会持续的指定前向主机,查询到的主机IP也会原路递归给用户;而迭代查询指DNS服务器向另一个服务器查询一个结果不可到达时,服务器则会返回一个IP地址给用户的DNS服务器,然后DNS服务器会接着查询下一个IP地址,如此反复,直到查询到结果为止。

而反向解析则指直接输入IP地址,查询IP对应的服务器,如对方服务器建立的PTR指针,这对方服务器则直接解析成网址反馈给用户。


学习LINUX时了解的关于DNS服务,若有错误谢谢指正!

你可能感兴趣的:(递归查询,dns,迭代查询)