一、DNS查询

wKiom1YJWNiw6oWeAAG8GwDC9V4445.jpg

1、整个查询过程(PC和DNS都没有缓存的情况):

0.1)PC在浏览器上访问http://www.benet.com;


0.2)PC先查询本地hosts文件,如果没有hosts文件没有解析,则进行下一步;


1)PC向自己设置的localdns发起解析www.benet.com的请求;


2)localdns先向全球13台根dns中的一台发起请求:www.benet.com=?;

#localdns怎么知道根dns的ip地址呢?一般dns本地都会存放全球13台根dns的ip地址


3)根dns回给localdns说我不知道www.benet.com的ip地址,但.com的dns可能知道,你去问他吧,于是将.com的dns的ip地址告诉localdns(即.com这个域的NS记录,和NS对应的A记录);


4)localhost继续去问.com的dns:www.benet.com=?;


5).com回给localdns说我不知道www.benet.com的ip地址,但.benet.com的dns可能知道,你去问他吧,于是将.benet.com的dns的ip地址告诉localhost(即benet.com这个域的NS记录,和NS对应的A记录);


6)localdns继续去问.benet.com的dns:www.benet.com=?;


7).benet.com的dns将www.benet.com的ip地址(A记录)返给localdns;


8)localdns获得了www.benet.com的ip地址后将结果返回给PC;


9)PC获取了ip地址后就可以将ip封装在三层报头上了,然后将http请求发送到www.benet.com的web服务器;


10)web服务器将网页内容返给PC。


2、递归查询和迭代查询

递归查询:

    只发出一次请求,就能得到结果(查询的到或查询不到)。一般是用户向localdns发起查询请求时,用的是递归查询。如果localdns没有开启递归功能,那么本地如果没有结果,则直接返回查询不到,而不会进行迭代查询去获取结果。但一般localdns都会开启递归功能的~而某个域的权威dns一般只对内开启递归,对外关闭。

    所谓的localdns不一定指你的内网dns,像我们平常上网设置的114.114.114.114、8.8.8.8或者联通电信的dns,都可以叫localdns,这类dns也叫缓存dns,即将迭代查询得到的结果缓存到本地,当有其他用户请求同一个域名解析时直接调取缓存,加速dns查询速度,毕竟迭代查询还是很慢和消耗资源的~

    而权威dns呢就是管理某个域的dns,即迭代查询给出最终答案的那台dns。平常我们去localdns去解析域名拿到的一般都是非权威应答,即localdns直接从缓存中查询结果,然后将结果返回给你,下图是用nslookup解析百度域名的结果,获得的就是非权威应答:

wKioL1YJWUyTrHsGAAElQL9-7oQ496.jpg


迭代查询:

    发出多次请求才能得到答案。迭代查询的话,一般从根域查起,逐级查询,直到获得结果。为啥要逐级查询呢,因为dns是分层管理的,根域管理一级域,一级域管理二级域………即上级知道下级在哪。


3、DNS服务器的查询顺序:

1)如果查询请求是本机所负责区域中的数据的话,要通过查询区域数据文件返回结果(这样获得的就是权威应答);


2)如果查询请求不是本机所负责区域中的数据的话,就查询缓存,有答案则返回结果(非权威应答);


3)如果缓存中没有答案,则向根发起查询请求(前提是开启了递归),根返回负责.com的dns的ns记录和a记录,如此迭代查询直到获得结果。


二、DNS服务器类型

1、主DNS:某个域的权威DNS。


2、辅助DNS:也叫从DNS,作用主要是减轻主DNS的负载压力。数据文件,也就是解析记录都是由主DNS同步得来。


3、缓存DNS:可运行域名服务器软件但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的回答,一旦获取一个答案,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。


4、转发DNS:仅将查询转发给其他DNS,不缓存不递归。

例1:zone “wsh.com” IN {

                                             type forward;

                                             forwarders  { 172.16.0.1; };

                               #意思就是将解析wsh.com.这个域的请求直接转发给172.16.0.1


例2:options {

                                   forwarders { 172.16.0.1; };

                              };

                               #将所有解析请求转发给172.16.0.1


三、DNS的资源记录(RR)

       标识这个域内的角色,比如谁是NS服务器,谁是邮件服务器,谁是www服务器等。常用的记录有:SOA、NS、MX、A、AAAA、PTR、CNAME。


1、SOA:

       起始授权记录。定义域的所有者,以及和从DNS的相关参数(如同步间隔、超时时间等)。


2、NS:

        名称服务器。表明谁对这个区域有解释权,即谁是该区域的权威DNS。NS服务器本身的NS记录一般没什么用,因为上级域名服务器已经有了该NS记录将该域的授权指向你。但还是要写,当别人查询NS记录时,你还要能返回。

        举个例子:如果你在万网买了一个域名如www.abc.com,你可以选择让万网的DNS替你解析这个域名,也可以自己架设一个DNS服务器,让这台服务器从今往后替代万网的DNS服务器解析,那么你就需要在你的DNS上设置NS记录,然后在万网域名管理系统中写条NS记录指到你的DNS上。这样以后就是你自己的DNS服务器负责提供解析了。也就是说NS记录就是用来授权的,将某个域的解析权交给某个名称服务器。

         NS记录的格式为:

         wsh.com.       IN    NS      ns.wsh.com.            #表示wsh.com.这个域的域名服务器是ns.wsh.com.

         ns.wsh.com.  IN    A           1.1.1.1                  #域名服务器的IP地址

         

3、MX:

        邮件交换记录。邮件的地址一般是example@abc.com的格式,由于只知道abc.com并不能定位邮件服务器,所以需要MX记录指向该域的邮件服务器。

        MX记录的格式为:

        wsh.com.           IN      MX    5        mail1.wsh.com.

        mail1.wsh.com.         IN      A        1.1.1.3


4、A:

        FQDN --> IPv4。即域名对应的IP映射。


5、AAAA:

        FQDN-->IPv6。


6、PTR:

        IP --> FQDN。反解,即IP对应的域名映射。

        邮件服务器的A记录一定要有对应的PTR记录,否则你的邮件发往其他邮件服务器时,其他邮件服务器会根据你服务器的IP地址反向查询这个IP对应的域是不是你邮件服务器的域,如果不是或解析不到的话它会认为你是垃圾邮件服务器,直接拒收你的邮件!这个PTR一般是写在你的SMTP服务器的公网IP所属的运营商端。


7、CNAME:

        别名记录。这种记录允许您将多个名字映射到同一台主机

        如:x   IN    CNAME   y     #别名是x,y是正式名称