本文内容出自个人理解、笔记、操作、网络和《linux服务器配置全程实录》,笔者刚入门菜鸟,多有偏颇之处,望多指正.
 
         简单说下:神马是域名解析系统(DNS),这里主要说解析,神马是解析?其实很简单,通俗点,就是转换。我们输入网站,而后DNS帮忙把我们输入的网站转换成IP,君不见,您ping一个网站,出来的不就是IP吗?当出来这个IP的时候,DNS就已经完成它的工作了.
        
         至此,我们已经简单知道了DNS是干嘛的,然后我们提一些问题:
1、 DNS怎么工作的?
2、 如何配置一个简单的DNS服务器?
3、 DNS的数据量很多时,如何保证这个服务器数据完整性?
4、 主从服务器如何传输,如何加密传输(不要问我为啥要加密...你懂的)?
5、 如何实现DNS智能解析?
6、 如何编译安装?
7、 如何配置其日志功能的实现?
8、 如何对其做压力测试和监控分析?
........
带着以上的问题:咱们先说些浅显的理论,后续篇幅中,笔者会依次把各种实验列出 。
       
一、DNS是如何工作的?
         试想一下,全球有多少台接入互联网的计算机?这么多终端,需要如何DNS为其提供解析服务?如何有效的,快速的提供解析服务?于是引入了分层的结构。可能这么说有些过于直接,这么说吧:我国有多少人?如何有效的管理国家的人口?国家主席—>省长-->市长-->县长-->镇长--->乡长--->队长...而DNS则是:根域(.)-->顶级域(edu、com、cn..)-->二级域名—>主机名...          到这里,差不多清晰了吧?然后我们细说下DNS的层次结构:
 
DNS的层次结构:
 
          根域: .          就是一个点,由Internet机构授权并管理,全球共有13台服务器维护根域服务器(英法瑞日各一,其余皆在美国).国人当自强啊! 补充说明:全球只能有一个根,如果有两家都是根的话,试想一下,除非这俩家的互联网老死不相往来,否则,这俩给不同机构分配的同样的域名 www.google.com,你猜,会有神马结果呢?
 
          顶级域   根域下一级是顶级域,顶级域有三类:组织域、国家域地区域、反向域。
       组织类:com商业、gov政府、org民间团体、net网络服务机构、edu教育、mil军事
       国家类:cn中国、de德国、it意大利、uk英国、jp日本、kr韩国
       其实还有一个叫反向解析类:介个啊,简单说来就是给出IP,告诉你其注册域名,我们用的似乎很少(但是有人貌似做过统计,竟然比正向还多)...貌似多用于邮件服务器的反垃圾机制,限于笔者能力,此项到此为止。
 
          二级域:个人或组织注册的私有域名,但基于顶级域。例如baidu.com,就是基于.com。二级域可以包括主机或者子域,比如”sb.baidu.com”,而该子域还可以包含如”2.sb.baidu.com”这样的主机。
 
主机名:......这个你懂的.
 
二、DNS查询过程
         解析类型:(就是主机名和IP之间的转换关系)
               正向解析:     FQDN-->IP        FQDN就是完整意义的域名,记得后面有个点
               反向解析:     IP-->FQDN
         :此两种解析方式,完全不一样,因此两个解析库完全不同。且正向解析可以解析到任意网段,而反向解析则一般是唯一网段,若需要反向解析不同的网段,需要在配置文件中做出对应的配置。
 
查询类型:
         迭代查询:     发出多次请求
         递归查询:     只发出一次请求就得到最终结果
         如果客户端迭代查询,减轻了服务器压力,但是客户端会查询很慢,如果服务器负责迭代,那试想一下,一个负责全省解析的DNS服务器,它hold住吗?也就说,要么我们慢,要么服务器慢,其实也是咱们慢了...实际上我们客户端的查询类型都是迭代,准确的说:先递归后迭代,当然这又引入了另外一个话题,缓存DNS服务器。
 
缓存DNS服务器:
 
         事实上,我们的域名解析过程,都是通过我们设置的DNS缓存服务器进行的。也就是说,我们把查询请求给DNS缓存服务器,这个DNS缓存服务器负责了中间的迭代查询任务,DNS缓存服务器负责查询后把结果交给我们。
         缓存DNS服务器查询到的数据,会暂时的保留一段时间,以供一个地址短时间内下次使用更快捷。(我们个人搭建的服务器,都可以作为缓存服务器来使用)
 
 三、子域和转发
        还记得上面这个例子吗:
        国家主席—>省长-->市长-->县长-->镇长--->乡长--->队长...
        根域(.)-->顶级域(edu、com、cn..)-->二级域名—>主机名...
         子域:就是这个理论产生的:我们知道,根服务器不可能直接解析一个域名的,它只会告诉你,你的顶级域在哪,然后我们去管理我们所在顶级域的服务器查询即可。
         转发:试想一下,我们的DNS服务器下,有两个子域服务器(A,B),当一个查询请求B的的解析,查询到A子域服务器上,然后当然没找到,默认的情况是,这个请求出去,到最顶层的根,再依次查询进来,找到A,这样的过程自然是及其浪费时间和系统及网络资源的,因此,转发需求产生了:查询到当前子域B的找A请求,如果找不到,不出去,直接转发到父域或同级域即可。
 
 
四、数据文件的格式内容说明等。
         本来想做实验的时候说这个东东,但是太多,还是在这说吧.这里可以暂时不看,一会下面写数据文件的时候,不懂的地方,可以直接在这里查询相关内容。
         注:本段解说引用下面链接:
http://blog.163.com/jgh2008@126/blog/static/285962462008320495111/
资源记录(Resource Record, RR)
资源记录的标准格式:
name        [ttl] CLASS       RTYPE       RDATA     
 
字段可以包含如下的特殊字符
; — 引出注释
@ — 表示当前域
() — 允许数据跨行,通常用于 SOA 记录
* — 仅用于 name 字段的通配符
 
name 字段
name 字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名;对象名可以是相对域名或全域名,全域名应该以“.”结束;若几条连续的 RR 记录涉及同一个对象名,则第一条 RR 记录后的 RR 记录可以省略对象名;若出现字段名字段,则必须出现在第一个字段
ttl 字段
ttl(time to live) 字段是一个寿命字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该字段,而使用位于文件开始处的 $TTL 语句所指定值。
 
class 字段
class 字段用于指定网络类型,可选的值有:IN、CH 和 HS,其中 IN (Internet)是广泛使用的一种。虽然 IN 是该字段的默认值,但通常我们会显示地指出。
 
rtype 字段
rtype 字段用于说明 RR 的类型。常用的 RR 类型如下:
                                                                                                               
类型  说明
 
区记录 SOA (Start Of Authority) SOA 记录标示一个授权区定义的开始。SOA 记录后的所有信息是控制这个区的 
NS (Name Server) 标识区的域名服务器以及授权子域 
基本记录 A (Address) 用于将主机名转换为 IP 地址,任何一个主机都只能有一个 A记录 
PTR (PoinTeR) 将地址转换为主机名 
MX (Mail eXchanger) 邮件交换记录。控制邮件的路由 
安全记录 KEY (Public Key) 储存一个关于DNS 名称的公钥 
NXT (Next) 与 DNSSEC 一起使用,用于指出一个特定名称不在域中 
SIG (Signatrue) 指出带签名和身份认证的区信息,细节见 RFC 2535 
可选记录 CNAME (Canonical NAME) 给定主机的别名,主机的规范名在A记录中给出 
SRV (Services) 指出知名网络服务的信息 
TXT (Text) 注释或非关键的信息
 
关于RR 的书写顺序
 
SOA RR 应该放在最前面
通常 NS RR 紧跟在 SOA RR 之后
其他记录的顺序无关紧要
 
data 字段
data 字段的内容取决于 RR 的类型字段。
 
SOA 记录的数据说明
Hostname
存放本 Zone 的域名服务器的主机名
Contact
管理域的管理员的邮件地址
SerialNumber
本区配置数据的序列号,用于从服务器判断何时获取最新的区数据
Refresh
辅助域名服务器多长时间更新数据库
Retry
若辅助域名服务器更新数据失败,多长时间再试
Expire
若辅助域名服务器无法从主服务器上更新数据,原有的数据何时失效
Minimum
设置被缓存的否定回答的存活时间
 
对 Contact 来说,因为“@”在文件中有特殊含义,所以邮件地址 root@mos.com. 写为 root.mos.com.
对 SerialNumber 来说,它可以是 32 位的任何整数,每当更新区文件时都应该增加此序列号的值,否则 named 将不会把区的更新数据传送到从服务器
缓存时间字段 Refresh、Retry、Expire、Minimum 可以使用时间单位字符 m、h、d、w 分别表示分钟、小时、天、星期。
各个缓存时间字段的经验值为
Refresh — 1 到 6 小时
Retry — 20 到 60 分钟
Expire — 1 周 到 1 月
Minimum — 1 到 3 小时
Minimum 设置被缓存的否定回答的存活时间,而肯定回答(即真实记录)的默认值是在区文件开始处用 $TTL 语句设置的。
 
 
NS 资源记录
NS RR 用于标识一个区的权威服务器(包括主服务器和从服务器),并将子域授权赋予其他服务器,其格式如下:
zone       [ttl]      IN    NS      hostname
A 资源记录
A RR 是 DNS 数据库的核心,它提供了主机名到 IP 地址的映射。其格式为:
hostname       [ttl]      IN    A      IPAddress
PTR 资源记录
PTR RR 提供了 IP 地址到主机名的映射。其格式为:
MX 资源记录
MX RR 用于邮件系统实现邮件路由。有关电子邮件的更多介绍请参见  。 其格式为:
zone   [ttl] IN   MX preference   host
其中 preference 是优先级字段,数值越小优先级越高。
CNAME 资源记录
CNAME RR 用于设置主机的别名。 其格式为:
nikename    [ttl]   IN CNAME   hostname
 
分析器指令
在区文件中还可以使用分析器指令,分析器指令可以为 RR 的输入提供方便。
$ORIGIN — 设置默认域(或初始域)
$TTL — 为没有定义精确的生存期的 RR 定义缺省的 TTL 值