• DNS服务之一:DNS服务相关概念详解


      首先提出一个问题,www.baidu.com是一个域名吗?答案是否定的,我们把www.baidu.com这样格式的名称称为主机名,FQDN(Full Qualified Domain Name,完全合格(限定域名))。www.baidu.com代表的肯定是一台主机,不然我们无法与它建立联系,因为一般来讲,我们要想通信,肯定在某一时刻是一对一的,这样我们才能来回进行交流。所以主机间的通信也是如此,它们必须一对一进行通信,而我们既然能够访问www.baidu.com,说明这是一台主机而不是一个范围。

      而baidu.com则是一个域名(Domain Name),因为在这个域内有很多主机,有的主机叫www,有的叫ftp,还有的叫mail,正是这些主机糅合起来组成了一个(区域,是一个范围。因此不可能是某个特定的对象)。而com也是一个域名因为在com下包含了baidu、ibm、hp等这样一些域。

    一、DNS基本概念

      DNS(Domain Name Server,域名服务器),可用于实现名称解析(Name Resolving,又称名称转换),在名称转换的背后有查询过程,因此称为解析,而既然要查询,当然就得需要依赖于一个数据库了。

      DNS解析名称的过程:实现FQDN<---->IP地址的转换(双向转换,但这种双向是由两种完全不同的机制实现的),如:

        172.16.0.1-->www.test.com

        172.16.0.2-->mail.test.com

      其它名称解析的过程

        用户名<---->ID号

        服务名称<---->端口号(如http<---->80,ftp<----->23)

        因此实现名称解析的机制有很多,不止DNS。为了对这些名称解析的机制进行统一管理,出现了一个统一的框架nsswitch。  

      1、nsswitch

      nsswitch是为多种需要实现名称解析的机制提供名称解析的平台,需要注意的是nsswitch只提供平台,并不负责实际上的名称解析。架构如图所示:

      因此我们实现能够将主机名转换成IP地址的这种解析机制,有两个,分别为Libness_files(.so),Libnss_dns(.so),这两个都是库文件,库是需要被调用的,所谓的调用者就是如上图所示,调用的库对象就是上图中平台下的对应的店铺,而它们彼此之间建立关联关系就是通过nsswitch这个框架,而nsswitch对我们而言的展现形式就是库文件(/etc/nsswitch.conf)。

      /etc/nsswitch.conf文件格式:

        hosts:  files  dns

          files:/etc/hosts文件的位置

          dns:DNS服务

      当我们访问主机名时,主机名无法直接建立联系,这时候我们调用一个库文件完成主机名到IP地址的转换,这个完成机制我们在本机叫做stub resolver(stub:基本的、最根处的、最原始的名称解析器,它本质上就是一个程序),这个名称解析器会通过某个库调用来完成这个转换,首先名称解析器去找nsswitch.conf中指定的配置,根据此处的次序先找files指定的文件,再从这个文件中查找访问的主机名能不能查到对应的IP地址,如果有,解析成功。

      所以当我们去ping www.baidu.com,因为www.baidu.com是一个主机名,无法直接与之建立联系,需要将它转换成IP地址,所以ping命令就会借助于本地的stub resolver来完成名称解析,stub resolver第一步先去找/etc/hosts中有没有www.baidu.com对应的IP地址,如果没有,就去找DNS解析。

      /etc/hosts的文件格式:

        IPADDR    FQDN      Aliases(主机别名)

        172.16.0.1  www.test.com  www

      那么为什么要用到/etc/hosts这个文件呢?

        因为在互联网诞生之初,主机数量很少,只需要通过每一个主机的hosts文件记录每一个主机的IP地址和它的主机名的对应关系即可。

        在小规模的网络中,hosts文件用于实现名称解析有效的工作了很长的时间。但后来随着互联网规模的不断扩大,若每一台主机都随意的给自己起名的话,那么彼此之间的通信会很麻烦。所以出现了所谓的名称地址管理机构IANA(互联网地址名称分配机构),但IANA有政府背景,后来DNS成为了一种基础性的互联网资源,因此不适合再被美国政府所维护了,后来将这种名称(地址)分配的功能转交给了民间组织ICANN(为了规范名称和地址的对应关系)。

        ICANN管理最顶级的名称(域),在现在有了很多的第二级各地驻地机构。IANA维护了一个数据库,记录互联网上所有的主机和IP地址的对应关系。

      2、DNS组织架构

      

      根域:位于最顶层的那个域

      TLDTop Level Domain,顶级域):第一级域

        顶级域常见的有三类:(组织域和国家域有ICANN直接管理或由ICANN下辖给某个组织机构管理(这种授权是彻底的))

          组织域:.com、.org.、.net、.cc

          国家域:.cn、.tw、.hk、.iq、.ir、.jp

          反向域:IP-->FQDN专用,正向和反向用的不是同一个数据库,即FQDN-->IP与IP-->FQDN不是同一个数据库

      3、DNS查询方式

      递归:请求(查询)者发送一次请求就能得到结果(客户端访问DNS服务器的方式)

        如:

        

          A有一道问题不知道答案,它去问B,而B也不知道答案,它去问C,C把答案返回给B,B再把答案返回给A,这个过程就是递归。(在这个过程当中,A只发送了一次请求)

      迭代:请求(查询)者发送多次请求才能得到结果(DNS服务器查询得到结果的方式)

        如:

          

          A有一道问题不知道答案,它去问B,但B也不知道答案但B知道C知道答案,于是B告诉A可以去问C,于是A从C处获取了答案,这个过程就是迭代。(在这个过程当中,A发送了多次请求)

      为安全和效率考虑,根不能与任何主机递归。

      

      互联网的查询是两段式的,先递归后迭代。

      4、解析

      正向解析:FQDN-->IP

      反向解析:IP--FQDN

        

      权威答案:直接从需要查询的域名节点的直接上级获取的答案;

      非权威答案:任何不是从其直接上级获取的答案;(如本地缓存域名服务器)

      

      DNS是通过分布式机制将查询需求一层层的划片给更小的管理机构,使得某一个片内的管理只需要由一个服务器完成即可。但若一个公司的域内的主机很少,单独建立一个解析域名的服务器很费劲,也可以支持一个服务器管理多个域

      一个IP地址可以有多个主机名(如一台主机既作为www服务器又作为ftp服务器时且共用同一IP地址),一个主机名也可以有多个IP地址(负载均衡,DNS高级功能,但效果比较差)

      DNS的分布式数据库特色:

        上级仅知道其直接下级;

        下级只知道根的位置;

      DNS服务器工作职责(按请求及范围划分):

        接受本地客户端请求(此过程是递归的)

        外部客户端请求:请求权威答案

          权威答案的结果是:

            肯定答案(有TTL值)

            否定答案(有TTL值)

        外部客户端请求:请求非权威答案

      域和区域:

        域:Domain

        区域:Zone  

          站在DNS的角度,域是逻辑概念,区域是一个物理概念

        域是逻辑概念,即域是不会真正存储的概念所以它是一个逻辑概念;而区域是真正存储下来的数据文件,所以它是物理概念。

        区域和域没有必然的包含关系(大小之分),因为域是从上级得到授权(正向区域的授权和反向区域的授权是分开进行的),但它的上级又是从区域文件中定义的,那么域就来自于区域文件,那么这个域又包含在区域中,故域和区域没有必然的包含关系。但从某一个具体的域来看,区域比域小一些。

      5、DNS服务器主从结构

      DNS服务器的两种角色:主、从

      DNS服务器常见的类型

        (1).主DNS服务器:数据修改一般在此修改(增删改)

        (2).辅助DNS服务器:请求数据同步(客户端主动请求数据,这个机制叫pop(拉取)机制(有需要时即拉取),而服务器送的机制叫push(推送,未访问却发送过来))。辅助DNS服务器每隔一段时间请求主DNS服务器,查看数据是否有更改。

          辅助DNS服务器定义的有效数据:

            serial number:版本号,序列号;

            refresh:从数据库检查的时间周期,即定义每隔多长时间辅助DNS服务器检查主服务器的版本号;

            retty:重试时间(小于refresh),当辅助DNS服务器发送检查版本号请求,而服务器未响应,请求重新发送的时间;

            expire:过期时间(认为DNS宕机时间)

            negative answer TTL:否定答复的有效时间(也需要定义在主从结构的配置信息中)

        (3).缓存DNS服务器:不负责任何权威答案的DNS服务器,仅提供权威信息;

        (4).转发器:不缓存,只转发请求。(客户端无法访问互联网时,但可以通过DNS服务器解析域名)

      当主DNS服务器宕机时,辅助DNS服务器会每隔一段时间检查,若在有效期内无法获得主DNS服务器的应答,辅助DNS服务器会“自杀”。主DNS服务器的数据有一个版本号,从DNS服务器的数据也有一个版本号(serial number),主DNS服务器的数据一旦发生改变,其版本号会加1,从DNS服务器发现版本号不一样,数据即发生改变。

      6、资源记录格式

      DNS服务器的数据库中,每一个条目都称作一个资源记录(Resource Record,RR)

      资源记录格式:

        TTL 600;

        NAME [TTL](可省,当每一个TTL值都相同时,可在全局定义TTL) IN(表明这是一个Internet上的资源记录) RRT(资源记录类型) VALUE

        例:

          正向解析:www.test.com.(在DNS服务器中定义时,最后的.必须写)  IN  A  1.1.1.1

          反向解析:1.1.1.1  IN  PTR  www.test.com.

          (上述两个都是资源记录)

      资源记录类型:

        用来标记这条记录(我们要解析的这个值)在当前的DNS服务器内扮演了什么样的角色。比如公司内部有很多服务器,哪个是mail服务器?,就是通过RRT标志的。(在DNS服务器中定义时,最后的.必须写)

         (1) SOA(Start Of Authority,起始授权记录):用来表明一个区域内部主从服务器如何同步数据以及起始授权对象是谁的。

          ZONE NAME TTL IN SOA FQDN ADMINSTARTOR_MAILBOX(邮箱地址)(

                          serial number

                          refresh

                          retty

                          expire

                          negative ttl)

          (这条记录一定要出现在这个区域数据里面的第一条)

          时间单位:M(分钟),H(小时),D(天),W(周),默认单位为秒

          邮箱格式:admin@qq.com(不能使用@符号,因为@符号在此源文件中有特殊意义。@表示ZONE NAME,是一个通配符,用来匹配当前区域的名称。把@改为.)改写为admin.qq.com

          举例:test.com. 600 IN SOA ns1.test.com admin.qq.com(

                                      20190304  ;2019年03月04日,最长不超过10位,这种方式易于理解

                                      1H

                                      5M

                                      1W

                                      1D)    ;若写在同一行中,括号可不写,把括号看做续行符;";"为注释符,而不再是"#"

        (2) NS(Name Server):DNS服务器,可定义在正向也可以定义在反向,ZONE NAME(区域名称,与域有区别,正向区域名称与域名相同,但反向域不同,反向区域名为网段地址反写加上.in-addr.arpa.-->FQDN(DNS服务器的主从靠区域内部服务器定义)

        例:(NS记录与A记录要成组出现)

          test.com 600 IN NS www.test.com(还需增加一个A记录用于指定IP地址,但这个A记录一般用不上,因为在其上级中已经指定了IP地址)

          ns.test.com 600 IN A 1.1.1.2

        (3) MX(Mail eXchange,邮件服务器):ZONE NAME-->FQDN(为避免宕机,邮件服务器应用多个,但此时新发来一封邮件,该有哪个台邮件服务器接受呢?因此邮件服务器有优先级的概念,当邮件服务器较多时,找优先级比较高的那台服务器转发,若这台服务器正忙或不在线,找优先级次之的服务器)MX记录只能定义在正向当中

         ZONE NAME TTL IN MX pri(优先级) VALUE

         优先级:0-99,数字越小级别越高

         如:test.com. 600 IN MX 10 mail.test.com.(同样需要A记录)

           mail.test.com. 600 IN A 1.1.1.3

        (4) A(address):FQDN-->IPv4,只能在正向定义

        (5) AAAA:FQDN-->IPv6,只能在正向定义

        (6) PTR(pointer):IP-->FQDN,只能在反向定义

        (7) CNAME(Canonical Name,正是名称;又称作别名记录,用来表明一个FQDN的名字是谁的):FQDN-->FQDN

         例:www2.test.com. IN CNAME www.test.com.(www2.test.com.是www.test.com的别名)

        (8) TXT

        (9) CHAOS

        (10) SRV

      7、配置区域文件实例

       实现test.com与192.168.0.0/24的关联,在此域中,www的IP为192.168.0.1,mail的IP为192.168.0.2

      

      .com授权信息:

        test.com. IN NS ns.test.com.

        ns.test.com. IN A 192.168.0.10

      建立两个区域文件:

        正向区域文件:

          test.com.(可用@替换) IN SOA

          www.test.com. IN A 192.168.0.1

          可简写为:

          www(简写时一定不能在后面加.) IN A 192.168.0.1

        反向区域文件:

          0.168.192.in-addr.arpa(反向区域名为网段地址反写加上.in-addr.arpa.) IN SOA

          1.0.168.192.in-addr-arpa.(可简写为1) IN PTR www.test.com.(在反向区域文件中,此处一定不能简写,因为简写时补的是区域名)

      8、区域相关概念

      (1) 区域传送:主服务器向从服务器数据传送的过程

          类型:

            完全区域传送:axfr(从服务器刚安装时,没有任何数据,此时需要将数据传送给从服务器)

            增量区域传送:ixfr(运行一段时间之后,主DNS服务器新增了一个条目,主DNS服务器新增了一个条目,主DNS服务器将新增的条目传送给从DNS服务器)

      (2) 从DSN服务器可以是另外一个从DNS服务器的从服务器,可以接受另外一个从服务器传送的数据,只要能保证数据的一致。

      (3) 区域类型:(针对于传输数据时的区域类型)

        主区域:(主DNS服务器)master

        从区域:slave

        提示区域:hint(定义根的位置,只要自己的服务器无法查询到数据,就到根查询)

        转发区域:forward(无法查询到,可不必去找根,而是通过额外的配置信息,到配置的区域查找)

  • 相关阅读:
    【转】IOS缓存机制详解
    Soul网关插件之Sofa
    Soul网关代理Dubbo插件的使用
    Soul网关默认Divide插件的使用
    高性能网关Soul源码调试环境搭建
    大厂面试系列一些问题的解答
    大厂面试系列一些问题的答案
    大厂面试系列(十三):Java基础
    大厂面试助手(十二):场景和设计
    Action Filters for ASP.NET MVC
  • 原文地址:https://www.cnblogs.com/long-cnblogs/p/10472020.html
Copyright © 2020-2023  润新知