一直以来对浏览器地址栏输入的地址有极大的困惑,为何输入的是www?为何结尾是.com?为何要用"."来分隔三部分(大多数状况下)?好吧,大学后才知道,这东西学名是叫域名,而不是网民称的网址什么的;域名让咱们更方便的访问,而不是要死记住那一大串的数字:ip地址;web
1、先认识一下这个名称域,也能够叫ta名称空间,在空间上形象的把ta看做一棵倒置的树,数据结构里的树形结构知道吧,就跟那差很少的样子;数据库
好比www.baidu.com 浏览器
根域(.)在最后被省略不写,com是它的顶级域,baidu是二级域名,www是三级域名,也叫主机名缓存
下面详细介绍域名空间:
服务器
首先是根域(.);session
根域下面是顶级域,也由Internet域名注册受权机构管理,共有3种类型的顶级域.
1.组织域,采用3个字符的代号,表示DNS域中所包含的组织的主要功能或活动,经常使用的组织域名.
2.地理域.采用两个字符的国家或地区代号,如cn为中国,kr为韩国,us表明美国.
3.反向域.这是一个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字.
数据结构
对于顶级域的下级域,Internet域名注册受权机构受权给Internet的各类组织,当一个组织得到了对域名空间某一部分的受权后,这个组织就负责命令所分配的域及其子域,包括域中的计算机的其余设备,并管理分配的域中主机名字与IP地址的映射信息.ide
域名系统就是负责名称解析的,有正向解析和反向解析。顾名思义就是由名称知晓IP抑或是由IP知晓名称;spa
2、一次完整的DNS查询有两种:日志
一、主机向本地域名服务器的查询通常都是采用递归查询。所谓递归查询就是:若是主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机本身进行下一步查询。所以,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示没法查询到所需的IP地址。
二、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特色:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪个域名服务器进行查询”。而后让本地服务器进行后续的查询。根域名服务器一般是把本身知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,而后把这个结果返回给发起查询的主机。
举个栗子:
假定域名为m.xyz.com的主机想知道另外一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:
一、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。
二、本地服务器采用迭代查询。它先向一个根域名服务器查询。
三、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
四、本地域名服务器向顶级域名服务器dns.com进行查询。
五、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
六、本地域名服务器向权限域名服务器dns.abc.com进行查询。
七、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
八、本地域名服务器最后把查询结果告诉m.xyz.com。
3、资源记录 RR
有如下几种类型:
A,AAAA,PTR,SOA,NS,CNAME,MX
下面分别介绍每一个资源类型及在数据库中的具体格式
1.SOA:Start Of Authority,起始受权记录
在任何一个数据库中有且只能由一条SOA记录,并且必须是数据库的第一条记录
name:当前域的域名,如:qhdlink.com.;或者可使用"@"代替
value:
1.当前区域的主DNS服务器的FQDN;
2.当前区域数据库的管理员的邮件地址;可是使用"."来代替"@";
如:mailmaster.(@)whjlab.com
3.主从服务器进行区域传送的相关时间定义及否认答案的统一TTL;
(Serial 1H 15M 1W 1D)
括号内的字段的意义是:
表明这个zone file 的版本,每当zone file 内容有变更,name server 管理者就应该增长这个号码,由于slave 会将这个号码与其copy 的那份比对以便决定是否要再copy 一次(即进行zone transfer )。
slave server 每隔这段时间(秒),就会检查master server 上的serial number。 不 过这里会发生一个问题就是,在master server 在update data 完成到slave server 来检查时再update 可能还有 好一段时间,所以这段期间master/slave DNS server间zone files 就可能出现不一致。 所 以在Bind较新的版本中便加入"notify"功能,使用者在"named.conf" 设定中在须要的zone 中加入"notify"的设定,则master server在update 完成某个zone file 的data 后便会主动发个讯息(NOTIFY),借以通知该其它的slave servers,所以若是slave servers 也有支援这个"notify"功能时,接下来slave servers 立刻就能够作zone transfer 来update data。
当slave server 没法和master 进行serial check时,要每隔几秒retry 一次。
当时间超过Expire 所定的秒数而slave server 都没法和master 取得连络,那么slave 会删除本身的这份copy。
表明这个zone file 中全部record 的内定的TTL 值,也就是其它的DNS server cache 这笔record 时,最长不该该超过这个时间。
例:
@ 86400 IN SOA ns1.whjliab.com. mail.whjlab.com.(
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D;)ttl
2.A:Address,主机记录
标识从彻底合格域名到IP地址的映射关系;FQDN --> IPv4
name:域中某主机的FQDN或主机名
value: 与主机名对应的IPv4地址
例:
www.whjlab.com. 86400 IN A 192.168.1.1
www IN A 192.168.1.1
3.AAAA:Address,FQDN --> IPv6
4.NS记录:
name:当前域的域名
value:当前区域内某DNS服务器的彻底合格域名,如:ns#.qhdlink.com
注意:
1.一个域内能够有多个NS资源记录
2.每一个NS资源记录都必需要有一个A记录与之对应
例如:
whjliab.com. 86400 IN NS ns1.whjlab.com.
5.MS记录:
name
value:当前域中某有效的邮件服务器的主机名
注意:
1.一个域中能够有多条
2.每一个MX都要有一条A记录对应
例如
whjlab.com. 86400 IN MX 10 mail1.whjlab.com
@ IN MX 20 mail2
6.CNAME:
name 别名的FQDN或者简单名称
value 真正名称的FQDN或者其简单名称
例:
web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.
web IN CNAME www
7.PTR记录:
name:IP地址反过来写,并在其后缀加反向域标准后缀
好比:1.72.16.172.in-addr.arpa.
4、主从DNS服务器:
主DNS:维护所负责解析的区域数据库文件的主体服务器,即:能够在区域数据库中进行增删改等管理操做;读写操做都可进行
从DNS:辅助DNS服务器,从主DNS-server或者其余的从DNS-server以区域传送的方式复制对方的区域数据库;因此从DNS不具有管理操做的做用;
为了保证二者中 的数据库保持一致,须要保证:
序列号一致:Serial,即数据库中的版本号;主DNS服务器的数据库内容若是发生变化,序列号应该自增。若是从服务器接收到的新数据库,若是其序列号没有变化,则忽略;若是发现其序列号比当前自身的数据库序列号大,则更新;
刷新时间间隔:refresh,从DNS服务器每隔多长时间到主DNS服务器上去检查序列号的变化更新状况;
重试时间间隔:retry,从DNS服务器向主DNS服务器要求同步数据失败以后,再次发起尝试请求的时间间隔;
过时时间:expire,从DNS服务器始终联系不到主DNS服务器时,从DNS服务器多长时间以后中止服务;
否认答案的缓存时长:minimal TTL
5、实现方式-Bind软件
实现DNS协议的程序是BIND,其中BIND的服务器的主程序是named
bind:
主配置文件:/etc/named.conf
能够在此配置文件中使用include命令包含其余的配置文件;
/etc/named.lscdlv/key
/etc/named.rfc1912.zones
声明区域;
/etc/named.root.key
主配置文件的格式:
1.注释方式:
//或者/* ... */
2.分段配置的特色
a.访问控制列表定义字段
acl ACL_NAME {...};
b.全局选项段:
options {...}
c.日志配置段:
logging {...};
d.区域配置段:
zone "ZONE_NAME" IN {...}
e.视图配置段:
view VIEW_NAME {...}
f.include包含段:
include /PATH/TO/SOME_CONFIG_FILE
options {
listen-on port 53 { 127.0.0.1; };
//在启动DNS服务以后,named进程所监听的ipv4地址
listen-on-v6 port 53 { ::1; };
//在启动DNS服务以后,named进程所监听的ipv6地址
directory "/var/named";
//规定的解析库的根目录
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; };
//访问控制语句,容许哪些主机将查询请求发送至本服务器;默认为localhost,即只为服务器自身提供查询请求处理;
recursion yes;
//全局开启递归查询;默认为全部客户端开启递归查询
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside yes;
//建议初学者关闭 此dnssec功能
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};