初识DNS服务器

    我们都知道IP可以确定一台计算机在Internet上的唯一地址,但人对数字的感知有限,因此为了方便网络中计算机的访问,便给每台计算机和IP建立一个映射关系,访问主机时只需输入主机名就可以了,就像我们的***一样,日常生活中,总不能用***号去称呼每一个人吧。早期TCP/IP网络中,这种名称解析工作通过hosts文件完成,但hosts文件是一个纯文本文件,在小型网络中,还可以满足人们的使用,但在Internet中,如果用hosts文件维护所有主机和IP之间的关系,显然是不合理的,因此DNS便应运而生。

一、DNS是什么?

    DNS是Internet的一项核心服务,采用层级(树状)和划分域的方式管理各主机。最早被保罗提出时,我们输入的主机地址最后必须加一个小数点.结尾,经过后期的优化,这个小数点可以省略。这个小数点就是根域,通过顶级域、二级域、主机名构成一个倒置的树状结构,组织成一个域名空间。到目前为止,全球共有13个根域,由Internet名称注册授权机构管理。顶级域分为三种类型:组织域,如:.com、.net、.org、.gov、.edu等;国家域:.cn、.us等;反向域:.in-addr-arpa,这些域不允许个人或组织注册。二级域是指那些注册到个人、组织或公司的名称,相当于承包到户。而主机名是最最底层的域名空间。由主机名加DNS后缀共同组成FQDN(Full Qualified Domain Name,完全合格域名空间),例如域名www.51cto.com,www是其主机名,51cto.com是其DNS后缀。采用这种层级结构可以有效的消除名称冲突

wKioL1SIDKbTOP7cAAGSBSDRXw0276.jpg

二、DNS的工作方式(C/S)

    那么DNS服务是如何工作的呢?当我们在地址栏中输入一个地址时,计算机首先查询的是hosts文件(/etc/hosts),当找不到主机时,会去本地dns缓存去查找,无果后,再请求DNS服务器,

    DNS服务器是如何工作的呢?当DNS服务器收到查询请求时,会遍历其数据库文件,最后要么响应一个查询成功的回复给客户端,要么返回查询失败的回复;这便是递归查询。当DNS服务器在自己的缓存区找不到主机时会直接请求根域,由根域响应其子域的IP,子域继续查询它的下一级域,直到找到拥有该域名的DNS服务器,或者查询超时为止,这种查询便是迭代查询。无论是DNS客户端还是DNS服务器端都会将查询结果记录在本地dns缓存中,方便下次访问主机。

wKioL1SIMkGDlcCxAAFREgBzhJQ305.jpg

当我们访问www.51cto.com时,将该域名的查询提交给DNS服务器,DNS服务器没有查询到该域名的记录时,会直接将该查询提交给根服务器,要求解析(①),根接收该查询请求,将.com的DNS服务器的IP回复给DNS服务器(②),则DNS服务器将该域名提交给.com域的服务器要求其解析(③),.comDNS服务器会将51cto.com域的DNS服务器IP地址回复给DNS服务器(④),则DNS服务器将该域名的查询请求再提交给51.cto域的DNS服务器(⑤),如果此服务器找到了www.51cto.com的记录,将其IP回复给DNS服务器;如果查无此记录,则返回查询失败的结果给DNS服务器(⑥)。由DNS服务器将查询到的IP或查询失败的消息返回给客户端即我们。

    每个DNS服务器在提供域名查询服务时,都是基于自己的区域解析数据库,该数据库包含了DNS区域资源信息的资源记录(Resource Record,RR)

    资源记录的语法格式如下:

    domain [ttl] IN RR_TYPE RR_DATA

    DNS区域数据库的资源记录常见的有以下几种:

    SOA:起始授权记录,定义了该区域的全局参数,进行整个区域的管理设置,一个区域有且只有一条SOA记录

    SOA示例:

    test.com. 600 IN SOA ns.test.com. yzq0535.163.com (
                                    2014120901;序列号 Serial
                                    3H;刷新频率 Refresh
                                    1H;失败重新尝试频率 Retry
                                    1W;失效时间 Expire
                                    1H;缓存时间 TTL )

    SOA后面跟的七个参数的意义分别是:

ns.test.com----Master DNS服务器主机名:意为在该区域,ns.test.com为test.com的主要DNS服务器

yzq0535.163.com----管理员的邮箱:由于@符号在区域解析数据库文件中有特殊意义,因此邮箱的@用.替代。

2014120901---序列号,表示数据库文件的新旧,在有主从(Master/Slave)DNS服务器的时候,一旦修改了主DNS服务器上的区域解析数据库文件时,一定要将此序列号加1,以便使Slave节点能更新自己的数据库文件。

3H---3小时之后刷新,Slave根据此值向Master请求数据库文件更新。

1H---1小时后重试,当Slave连接不上Master时,多长时间尝试重新连接Master。每隔3小时Slave主动连接Master,若连接不成功则接下来尝试连接时间会变成会每隔1小时。

1W---1周后失效,当Slave尝试连接一直失败到达一周时间,Slave将不再更新,只能等待系统管理员处理。

1H--缓存时间,在这个区域解析数据库文件中,每笔RR记录都没到之前声明的TTL时间的话,以此值为主。


    NS:域名服务器记录,记录了某区域的授权服务器,一个区域至少有一条NS记录

    NS示例:

test.com. IN NS ns1.test.com.
test.com. IN NS ns2.test.com.

NS记录通常跟A记录相伴随。


    A:地址记录,将一个FQDN映射成IP地址,若查到某域名的A记录有多条,DNS服务器会基于“轮询”的方式给多个用户进行响应

    A示例:

ns1.test.com. IN A 1.1.1.1
ns2.test.com. IN A 2.2.2.2
www.test.com. IN A 1.1.1.1
mx1.test.com. IN A 3.3.3.3
mx01.test.com. IN A 4.4.4.4


    PTR:反向地址记录,将一个IP映射到FQDN

    PTR示例:

1.1.1.1.in-addr.arpa. IN www.test.com.
2.2.2.2.in-addr-arpa. IN www.test.com.


    MX:邮件服务器记录,一个区域解析数据库文件中可以有多个MX记录,表示所有向这个区域发送的邮件,要送到后面对应的邮件服务器才行,当邮件服务器有多台时,按优先级排列,数字越小,优先级越高(0-99)

    MX示例:

 test.com. IN MX 1 mx1.test.com.
 test.com. IN MX 8 mx01.test.com.


    CNAME:别名记录,可以定义当客户端错误域名请求时自动更正错误,如wwww.51cto.com转换成www.51cto.com

    CNAME示例:

wwww.test.com. IN CNAME www.test.com.
www1.test.com. IN CNAME www.test.com.


    资源记录必须从一行的第一列开始。其排列格式任意,但通常是SOA记录、NS记录、其他记录(A记录or PTRor CNAME),并使用“;”作注释。

    其成功查询的响应结果也有两种:权威回答:客户端请求的域名是该DNS服务器负责的域;非权威回答:DNS服务器在其缓存文件中找到的A记录。

三、DNS服务器的类型

    为提供更优质的DNS服务,对同一区域解析的DNS服务器通常会设置多个,主DNS服务器:负责某区域解析,对区域所有的资源记录更新都通过此服务器进行;从DNS服务器:也是负责某区域的DNS服务解析,但不负责更新操作,只能从该区域的主服务器或其他从服务器同步其区域数据库文件;DNS缓存服务器:不负责任何区域的权威应答,仅用于帮助指向此服务器的客户端作递归查询。

    那么主从(Master/Slave)DNS服务器是如何协调工作的呢?每个区域数据库文件定义了区域数据库版本号serial、刷新时间refresh、重试时间retry、过期时间expire和否定应答的TTL值。从DNS服务器在达到了刷新时间间隔之后,就会发起同步请求到主DNS服务器,主DNS服务器则响应serial给从DNS服务器,从DNS服务器将自己的serial与主DNS服务器的serial做比较,如果发现主的serial大于自己,意味着主服务器的区域数据库文件更新了,因此请求同步。这种协调存在问题,万一主DNS服务器上有更新,恰巧相应的客户端DNS请求发送到了从服务器,这岂不是坑了客户端吗?还好DNS服务的notify机制巧妙的处理了这个问题,主DNS服务器为让从DNS服务器及时更新区域数据库文件,会主动触发从服务器发起更新请求,即使从DNS服务器的刷新时长未到。因此其协调机制总结为:周期性检查+通知。

四、其他(总结于《DNS与BIND (中文第四版)》)

域名,域,主机三者的关系:位于树中叶子位置的域名通常表示单个主机,树内部的域名既可以命名一台主机,也可以表示一个域。

域和区的区别,域通过授权之后被分成区,一个区和一个域可以共享同一个域名,却含不同的节点。区不含有任何在已经被授权出去的子域中的节点,如果域中某个子域没有被授权,那么区就包含这个子域中的域名和数据。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章