在早期的网络世界中,网络主机将主机名映射到ip保存在一个共享静态的文件hosts中。由hosts文件实现网络中域名的管理。但internet的计算机迅速增加时,通过一个中心授权机为所有Internet主机管理一个主机文件的工作将无法进行。文件会随着时间的推移而增大,这样按当前和更新的形式维持文件以及将文件分配至所有站点将变得非常困难,甚至无法完成,于是便产生了DNS服务器。

DNS:Domian Name System ,c/s架构,udp/tcp,端口53,应用层协议。


基本概念:

FQDN:Full Qualified Domain Name,完整主机名    www.baidu.com.

    . 根

    .com 顶级域

    .baidu.com 二级域

    www 主机名


域:

    TLD:Top Level Domain 顶级域包括:组织域(.com .net .edu)和国家域(.cn .hk .tw),还有特殊域(arpa域:用于地址到名称转换的特殊域)

    SLD:Second-level-Domain 二级域,如下

    baidu.com域,以下是二级域中的完整主机名

        www.baidu.com

        mail.baidu.com


image.png


DNS解析方式(每个域都有两个区域):

    正向解析:FQDN-->IP

    反向解析:IP-->FQDN


区域:baidu.com域有

    FQDN-->IP正向解析库,称一个区域

    IP-->FQDN反向解析库,称一个区域


DNS查询类型:

    递归查询:

    由客户端发出解析主机名的请求后,由Local DNS负责完成解析任务(客户端不负责),若Local DNS缓存无结果则会请求根服务器,根服务器返回顶级域服务器的ip后,Local DNS会继        续向.com请求解析,.com会返回baidu.com二级域的ip,Local DNS继续请求二级域的ip,得到www.baidu.com对应的ip地址,缓存在本地后返回给客户端。

    image.png

  注:chrome浏览器的DNS缓存输入chrome://net-internals/#dns可查看,火狐浏览器可输入about:config查看DNS缓存配置。

      

    迭代查询:客户端发出解析主机名的请求,Local DNS返回无缓存和根服务器ip地址后就不负责了,由客户端发送解析请求到根服务器……如下图:

image.png

DNS报文格式:

下图是用于查询和响应的报文格式:由12字节首部和4长度可变字段组成;

image.png

标识:由客户程序设定并由服务器返回,客户程序通过使用它来确认查询和响应是否匹配;

标志:由若干子字段组成,如下图:

image.png

    QR:1bit字段,0表示查询报文,1表示响应报文

    opcode:4bit字段,0表示标准查询,1表示反向查询,2表示服务器状态请求

    AA:1bit字段,表示授权回答,该名称服务器是授权于该域的

    TC:1bit字段,表示可截断的,使用UDP时当响应的总长度大于512时,只返回前512个字节

    RD:1bit字段,此字段在查询报文中使用,1表示期望递归,告知名称服务器必须处理这个查询,称为递归查询,0表示被请求的名称服务器没有一个授权回答,它返回一个可以解答该查询的其他名称服务器列表,称为迭代查询

    RA:1bit字段,表示可用递归,若名称服务器支持递归查询,则此字段为1

    zero:3bit字段,必须为0

    rcode:4bit字段,返回码字段,0表示没有差错返回,3名称差错

问题数:4个16bit字段,对于查询类第一个字段为1,其他字段都是0,对于应答报文,至少有一个应答,其他两字段是0或非0

查询问题:格式如下图

image.png

查询名:需要查询的名称,是一个或多个标识符的序列,每个标识符的首字节计数值来说明随后标识符的字节长度,每个名称以最后为0的标识结束,长度为0的标识符是根符号

image.png

每个问题都有一个查询类型也称为域名解析方式,每个响应也有一个类型。

常见域名解析方式:

    A记录:域名对应的ip,多个域名可以指向同一个ip,多个ip不可以指向多个域名;

    CNAME记录:canonical name别名解析,为一个域名设置一个或多个别名,如baidu.com是a.shifen.com的别名;

    NS记录:又称名称服务器,这个区域由哪些DNS服务器负责解析;

    SOA记录:在众多NS记录中指定主服务器负责解析;

    MX记录:邮件交换记录

    PTR记录:指针记录用于指针查询,IP地址被看成in-addr.arpa域下的一个域名

 

DNS响应报文中资源记录部分:

其中DNS报文中最后三个字段回答字段、授权字段、附加信息字段都是采用一种资源记录RR的相同格式,报文格式如下图:

image.png

域名:记录中资源对应的名称,格式与查询名字段格式相同

类型:RR类型码,值与查询类型中一样

类:指internet数据

生存时间:客户程序保留该资源记录的秒数,通常为2天

资源数据长度:资源数据的数量


实例:ping qq.com,同时tcpdump抓包

19:33:15.941772 IP 192.168.146.136.51574 > public1.114dns.com.domain: 30492+ A? qq.com. (24)
19:33:15.954342 IP public1.114dns.com.domain > 192.168.146.136.51574: 30492 2/0/0 A 111.161.64.40, A 111.161.64.48 (56)

第一行 +表示期望递归,A表示查询类型为A,?表示查询不是响应 ,后表面紧接着是要查询的域名,24表示UDP数据报中用户数据长度(12字节固定长度的报文首部+8位域名方式+4位查询类型和查询类)

第二行 从名称服务器返回的响应信息,2/0/0表示响应报文中最后3个变长字段的资源记录数,回答RR数为2个。


高速缓存:

为了减少internet上DNS的通信量,所有的名称服务器都使用高速缓存。高速缓存由名称服务器维护。

名称解析器在主机上使用/etc/reslove.conf文件中删除nameserver后使用名称服务器IP,在这个文件中可能存在无nameserver字段的行,指的是名称解析器使用本地主机上的名称服务器。


DNS服务器类型:

    负责解析至少一个域(权威答案):

        主名称服务器:维护所负责解析的域数据库的服务器,读写均可;

        从名称服务器:从主DNS服务器复制一份解析库,只能读操作;

        复制操作实施方式:

            序列号:即数据库的版本号,主服务器数据库内容发生变化,版本号递增;

            刷新时间间隔:从服务器多久到主服务器检查序列号更新状况;

            重试时间间隔:从服务器从主服务器请求同步解析失败时,再次发起尝试请求的时间间隔;

            过期时长:从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;若真联系不上时,停止提供服务;

            否定答案的缓存时长:否定答案缓存多久

    不负责域解析(非权威答案):

        缓存名称服务器(Local DNS)


DNS域维护:

    上面说了从服务器复制主服务器的方式,域维护是通过DNS协议在从主服务器之间共同维护一个共同的zone(区域)文件。共有两种方式:

    全量传送axfr

    增量传送lxfr