什么是DNS?

DNS:Domain Name Service:域名服务:即域名解析服务,是一种应用层的协议,它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCPUDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

举一个例子,www.mgeedu.com作为一个域名和IP地址101.200.188.230相对应。DNS服务器就像是一个自动的电话号码簿,我们可以直接拨打mageedu的名字来代替电话号码(IP地址)。DNS在我们直接调用网站的名字以后就会将像www.mageedu.com一样便于人类使用的名字转化成像101.200.188.230一样便于机器识别的IP地址。因此有了DNF服务以后,我们可以直接在使用域名去访问对应IP主机提供的服务,例如:http服务,在浏览器直接键入域名。


域名的规范和结构:

www.magedu.com:FQDN(Full Qualified Domain Name)

域名必须以英文句号“.”结尾,当用户访问www.mageedu.com的HTTP服务时必须在地址栏中输入:www.mageedu.com.,这样DNS才能够进行域名解析。但是现在的DNS服务器已经可以自动补上结尾的句号。所以输入域名可以省略这个.,但域名其实都以点结尾的。

其实域名的结构也是一个和文件系统相似的倒置树状结构,从根开始,往下分级展开,构成整个域名结构。

以www.mgaeedu.com.这域名为例:域名是从右到左对应这个树状结构,

最右的那个点.表示DNS根域名服务器:所有DNS服务的起点。

com.:一级域,也叫顶级域,tld(Top Level Domain),根的下一级。

mageedu.com.:com这个顶级域下面的一个二级域。

www.mageedu.com.:mageedu.com.这个二级域下面的一个三级域。


例如:在这个二级域:magedu.com.下面可以有

www.magedu.com. 1.1.1.1
ftp.magedu.com. 2.2.2.2
bbs.magedu.com. 3.3.3.3
cloud.magedu.com. 4.4.4.4

........

这些都是这个二级域下面的三级域。


当然,每个三级域下面都可以有四级域,然后五级域。

只要总域名的长度不大253个字符长度就可以。



DNS的解析方式:

解析类型:正向解析和反向解析

正向解析名称 --> IP

解析过程:从根服务器开始,依次往下查询,一直到要查询的这个域的上级DNS域服务器反馈答案为止。(注意此过程描述不准确,只是为了形象描绘一下大致流程)

例如:解析www.mageedu.com这个域名,首先会去找根域名服务器,然后根域名服务器会反馈com这个一级域服务器的地址,然后就去找com.这个服务器,它会反馈mageedu.com.这个二级服务器的地址。然后再去找mageedu.com.这个服务器,它会反馈www.mageedu.com.这个三级域名对应的IP地址,解析完成。


DNS查询有两种方式:递归和迭代

DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。

递归查询:客户端把它需要解析的要求交给设置使用的DNS服务器,然后这台服务器帮它从根服务器一直查询到目标域所在的上级域服务器,解析出目标域的IP地址,然后反馈给主机。客户端对设置的这台DNS服务器的查询就叫递归查询。

迭代查询:DNS服务器接收了客户端的递归查询请求后,从查询根域服务器开始,每一步反馈结果,然后查询下一级域服务器,直到查询到目标的IP地址。这个DNS服务器对每一级域服务器查询就是迭代查询。

wKiom1cMR_LhEe27AAA6B6d_MUM551.png  一次完整的查询解析请求经过的流程:
Client(客户端) --> hosts文件 --> DNS Local Cache --> DNS Server (recursion) --> 
          自己负责解析的域:直接查询数据库并返回答案;
          不是自己负责解析域:-->Server Cache --> iteration(迭代)

如果客户端设置的DNS服务器不能为它做递归查询:那么每一次查询都是迭代查询。过程可以用下图表示

wKioL1cMSwXhl-ORAAESEnnLmT8686.png            
DNS服务器类型:
负责解析至少一个域:
            主名称服务器;
            辅助名称服务器;
不负责域解析:
        缓存名称服务器;
                
解析答案类型:                
解析答案:
      肯定答案:查找到的域名对应的IP地址
      否定答案:不存在查询的键,因此,不存在与其查询键对应的值;
按答案可靠性分类:
           权威答案:由直接负责的DNS服务器返回的答案;
           非权威答案:从本机host文件,DNS缓存,DNS服务器缓存反馈的答案


反向解析:IP --> 名称
注意:正向解析和反向解析二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库文件。但解析方式是一样的。                

主-从DNS服务器

主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;

从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
主服务器”通知“从服务器随时更新数据;
区域传送: 全量传送:axfr, 传送整个数据库;
        增量传送:ixfr, 仅传送变量的数据;


区域(zone)和域(domain)的概念

以magedu.com域为例:
             FQDN --> IP:正向解析
                 正向解析库中的一个区域
             IP --> FQDN:反向解析
                 反向解析库中的一个区域
                    
区域数据库文件:/var/named/下的各文件,文件里面是资源记录。

资源记录:Resource Record, 简称rr;
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN --> IPv4;
AAAA:地址记录, FQDN --> IPv6;
CNAME:Canonical Name,别名记录;
PTR:Pointer,IP --> FQDN
MX:Mail eXchanger,邮件交换器;优先级:0-99,数字越小优先级越高;
                

资源记录的定义格式:

    name      [TTL]     IN    RR_TYPE   value


各资源记录具体格式:

SOA:

name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;

value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)

序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
否定答案的缓存保留时长:                         
例如:magedu.com.     86400     IN         SOA     magedu.com.     admin.magedu.com.  (
              2017010801    ; serial
              2H           ; refresh
              10M          ; retry
              1W           ; expire
              1D )        ;negative answer ttl 
                         
                        
NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录; 
例如:
   magedu.com.     86400     IN     NS      ns1.magedu.com.
   magedu.com.     86400     IN     NS      ns2.magedu.com.
                    
MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:
    magedu.com.         IN     MX     10      mx1.magedu.com.
    magedu.com.         IN     MX     20      mx2.magedu.com.
                    
A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;
例如:
    www.magedu.com.        IN     A    1.1.1.1
    www.magedu.com.        IN     A    1.1.1.2
    bbs.magedu.com.           IN     A    1.1.1.1
        
AAAA:
name:FQDN
value: IPv6地址
            
PTR:(用于反向解析)
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQND
例如:
    4.3.2.1.in-addr.arpa.      IN  PTR    www.magedu.com.
                    
CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;
例如:
    web.magedu.com.      IN      CNAME  www.magedu.com


注意:  

      (1) 记录中第一条资源记录必须是SOA:
      (2) TTL可以从全局继承;
      (3) @表示当前区域的名称;
      (4) 相邻的两条记录其name相同时,后面的可省略;
      (5)对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;


示例:

wKiom1cMV-KxjfQDAABbPiOjvcQ837.png