1、什么是DNS?

DNS:Domain Name Service 域名解析服务器,名称解析,它是众多服务的一个基础服务工具,也是互联网的一个基础工具。在互联网上DNS服务器的核心及标准都是基于一个软件来实现的,那就是BIND,Berkely Internet Name Domain,互联网上几乎所有的电子服务器都是由BIND来构建的,尽管现在又出现了很多其他的电子服务器,但它们的工作机制都是一样的,最关键是搞清楚DNS是一种什么样的结构,如何进行工作的,等等。那什么是域名呐?首先要了解域的概念,域指的是一个范围,不可能是某个特定的对象。如:magedu.com是域,而不要把www.magedu.com 当做是域名,他是一个主机名,也叫FQDN-->Full Qualified Domain Name完全限定域名.
2、DNS用来做什么的呐?

从它的名字可以看出,用作名称解析Name Resolving,也可以说是名称转换,但为何叫域名解析呢?因为这个转换过程背后有查询过程,而这个过程依赖于数据库(例如/etc/passwd就是一个数据库),DNS解析主要是解析从FQDN<-->IP,而这种转换是双向转换的,给我一个FQDN我能找到IP地址,反之亦然。
如我们有一个这样的额数据库,里面可能放着
172.16.0.1  www.magedu.com    www
172.16.0.1  mail.magedu.com   www
这些数据,当我们去访问www.magedu.com时我们只要找到与之对应的数据的IP地址就找到了,这个过程就叫名称解析的过程,但要想实现名称解析不仅要有DNS,根据用户名找到id号也是域名解析,所以完成域名解析的机制有很多种,因此为了有一个统一的框架就出现了nsswitch
3、nsswitch的介绍

就是实现为多种需要实现名称解析的机制提供名称解析的平台的,它仅仅是提供平台 ,并不负责实际意义上的域名解析。它本身可以让别人完成域名解析的,因此负责域名解析的就相当于一个个店铺,真正实现卖商品的功能,而我们的应用程序要想实现域名解析,这个程序只需要到框架上去找那个对应能够负责给我们完成名称解析的那个店铺就可以了,所以当我们能够实现将DNS转换成IP地址的这种解析机制有两个:libnss_files.so和libnee_dns.so,这两个是库文件,所以需要被调用 ,而nsswitch展现的就是一个配置文件-->/etc/nsswitch.conf,我们在这个配置文件中定义了有这么一行:
hosts: files   dns ,而这两项也有前后关系
file指的是:/etc/hosts
dns指的是:DNS服务器
因此当我们访问一个主机名的时候,主机名无法建立联系,它会调用一个库文件,完成从主机名到IP地址的转换,而这种完成机制叫做stub resolver:名称解析器,这是一个软件或程序,它会通过某个库调用去找nsswitch.conf这些配置,根据这里面的次序去找file,看看我们的主机名有没有定义IP地址,如果有解析成功,所有当我们去ping www.magedu.com命令时,它会借助stub resolver来完成域名解析,而stub resolver第一步先去找/etc/hosts文件里面有没有与www.magedu.com对应的IP地址,如果没有就去找DNS解析。
4、每一台主机上都有一个hosts文件,hosts文件当中记录了每一个主机IP地址和它的名称的关系,一般来讲它的格式如下: 
IPADDR           FQDN        Ailases(主机别名)
例如:172.16.0.1  www.magedu.com    www
但是由于网络发展速度越来越快,大家都纷纷发现了互联网的好处,加入主机中的网络越来越多,而每台主机都给自己的主机起名字的话,那彼此间的通信很困难,为了规范这种名称机制出现了IANA:互联网地址名称分配机制,但由于有政府背景,后来人们发现DNS已经成为一种互联网资源了,而且是一种基础资源,因此不应该被美国政府所维护,人们不放心。后来人们把这种功能转交给了另一种民间组织ICANN,目前来讲我们的名称分配和地址分配是靠ICANN来实现的,而ICANN是用来管理最顶级的名称或者域,它现在有很多子级。如果某台主机想要加入到主机中来,它要先向IANA申请一个IP地址,有了IP地址就可以实现通信了,但这时别人想要找你,必须通过IP地址才能找到你,而IP地址不容易,那这时我们就要申请一个域名 ,这时IANA就用于维护主机IP与主机名的对应关系,也可以说IANA维护了一个数据库,这个数据库里面建立了有互联网中每台主机的Ip和主机名。
5、例题解析:
如果我们的申请的网络中有很多主机了,比如说有ABC三台主机,那么A怎么知道新加进来的D主机呐?如果刚开始没有一点点基本调用的话A主机是无法知道的,主机A只知道有D主机,但D主机却无法建立联系,它要想与D主机建立联系,要把D主机转换成IP地址,但是D的IP地址只有IANA知道,而IANA早期通过ftp保留一个hosts文件,他就像一个文档一样,更新的时候都是在线的,下载一个都是最新的,随时更改随时保存,因此A主机只需要下载IANA的hosts文档覆盖自己主机上的hosts文件就可以与D主机建立联系了。但随着互联网的发展,IANA以远远不能满足要求,这时就需要定制计划,来适应互联网的发展速度。早期任务如下:
5.1、周期性任务:每半小时自动下载一次hosts文件,但这半小时中也会出错的,这时又执行了任务2,代替了任务1
5.2、建Service:当在访问主机名时,只需要向我提交请求,我来帮你解决,这种方法大大简化了客户端的复杂程度,但这种复杂度移向了IANA
5.3、分布式数据库:随着互联网的更新,多个server不堪重负,这时任务3就出现了,把自己管理的区域划分成每小片,再给每小片找个片长就可以了而每小片也可以划分成子片,逐级授权,但授权层次过多也不好,过少也不行。总片管理片,片在管理子片,一次类推,切记每一个片只能管理它的直接子片,比如人:他只能管他的儿子,不能管他的孙子一样,不能越级指挥就是这个道理。这就是它的层级结构,每个级别它都只负责它下的级别,不能越级管理。
注意:www.magedu.com.:最后一个.表示全局的,根
6、TLD:顶级域,所有的顶级域都是划分给对应的组织来进行管理的
6.1、TLD分为三类: 
     组织域:.com,.org,.net,.cc
     国家域:.cn,.tw,.hk,.iq,.ir,.jp
     反向域:IP-->FQDN:反向
             FQDN-->IP:正向
6.2、查询方式:两段式:递归,迭代
         递归:只发出一次请求,从客户端查起的是递归,一般都是前递归后迭代
         迭代:可能发出多次请求,前几次返回的都是参考答案
6.3、解析: 
     正向: FQDN-->IP(一个名字可以有多个IP,这是DNS的高级机制,它一次只返回给你一个名字,并且是轮流返回的)
     反向:IP-->FQDN(一个IP可以有多个名字)
6.4、DND:分布式数据库 
     上级仅知道其直接下级
     下级只知道根的位置
6.5、dns服务器: 
     接受本地客户端的查询请求(递归)
     外部客户端请求,请求权威答案(每一个主机的直接上级给出的答案才是权威的,并且他还能限定缓存时间)
         肯定答案:TTL(如果有返回的是肯定答案)
         否定答案:TTL(没有时返回否定答案)
     外部客户端请求非权威答案
6.6、DNS服务器类型:共4种 
    主DNS服务器:数据修改,如果主DNS服务器挂了,那辅助DNS服务器会每隔一段时间发一次请求,如在一定时间还没有收到回复,那辅助DNS也会随之而去,即自杀。
    辅助DNS服务器:请求数据同步,每隔一段时间会定期到主DNS请求,把更新的内容同步过来,   
            serial number:序列号,版本号,主DNS数据文件是否发生修改,若发生变化,就加1
            refresh:刷新时间,检查时间周期(每隔多长时间辅助检查主版本号)
            retry:重试时间,应该小于refresh时间
            expire:过期时间
            nagative ansuer TTL :否定答案的缓存时长
    缓存DNS服务器:
    转发器:不缓存,只转发请求的
7、资源记录格式:数据库中的每一个条目称作一个资源记录(Resource Record,RR)
NAME   TTL(可省略)IN(Internet)RRT(资源记录类型) VALUE
www.magedu.com.     IN             A                  1.1.1.1(正向)
1.1.1.1             IN             PTR        www.magedu.com.(反向解析)
资源记录类型:就是用来标识我们所解析的这个值,它主要在我们当前的DNS服务器内扮演什么样的角色。
7.1、SOA(Start Of Authority):起始授权记录,用与标明一个区域内部主从服务器之间如何同步数据,以及其起始数据对象是谁。只能有一个SOA授权记录
ZONE    NAME   TTL    IN    SOA   FQDN    ADMINISTRATOR_MAILBOX(
                                           serial number
                                           refresh
                                           retry
                                           expire
                                           nagative ansuer TTL)
时间单位:M(分钟)、H(小时)、D(天)、W(周)、默认单位是秒
邮箱格式:admin@magedu.com-写为--> admi.magedu.com(@具有通配符的意义)
magedu.com.    600   IN    SOA    ns1.magedu.com.   admin.magedu.com(2013040101 1H 5M 1W 1D)
也可以写成:
magedu.com.    600   IN    SOA    ns1.magedu.com.   admin.magedu.com  (
                                        2013040101   #最长不能超过10为位
                                        1H
                                        5M
                                        1W 

                                      1D )                                                             
7.2、NS:Name Service 名称服务器,表明自己的身份:Zone NAME -->FQDN
magedu.com.    600  IN   NS  ns1.magedu.com.
magedu.com.    600  IN   NS  ns2.magedu.com.
ns1.magedu.com.     600     IN     A    1.1.1.2
ns2.magedu.com.     600     IN     A    1.1.1.4
7.3、MX(Mail eXchanger):邮件交换器  Zone NAME-->FQDN
有优先级的概念:0-99,数字越小级别越高 (格式如下)
ZONE      NAME     TTL   IN    MX     pri  VALUE
magedu.com.        600   IN    MX     10  mail.magedu.com.
mailmagedu.com.    600   IN     A    1.1.1.3
7.4、A(address):地址    FQDN-->IPV4(地址)
7.5、AAAA(address):    FQDN-->IPV6
7.6、PTR(pointer):指针记录   IP-->FQDN
7.7、CNAME(Canonical NAME):别名记录   FQDN-->FQDN
www2.magedu.com.     IN    CNAME   www.magedu.com.
8、域和区域:
域:Domain,站在DNS的角度,域是逻辑概念(域不会真正存在,包括正向解析,反向解析)
区域:Zone,站在DNS的角度,区域是物理概念 ,这两者没有必然的包含关系
域授权:来自上级的区域
9、例题:规划DNS服务器:
magedu.com.    IN    NS   ns.magedu.com.
ns.magedu.com.  IN  A      192.168.0.10
magedu.com.   192.168.0.0/24
www 192.168.0.1
mail  192.168.0.2,MX
建立两个区域文件:
正向区域文件
magedu.com.  IN  SOA
www.magedu.com.  IN  A  192.168.0.1
简写为:
www   IN   A   192.168.0.1
反向区域文件
0.168.192.in-addr.arpa    IN   SOA
1.0.168.192  IN  PTR   www.magedu.com.(不能简写)
也可以写成-->1  IN  PTR    www.magedu.com.(不能简写)
注意:MX,A只能定义在正向文件当中,NS正向反向都可以,其他定义在反向
10、区域传送的类型: 
     完全区域传送:axfr,传送所有的内容
     增量区域传送:ixfr,只传送改变的内容
11、区域类型:   
      主区域:master
      从区域:slave
      提示区域:hint,定义根在什么地方
      转发区域:forward