一、DNS查询
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解析百度域名的结果,获得的就是非权威应答:
迭代查询:
发出多次请求才能得到答案。迭代查询的话,一般从根域查起,逐级查询,直到获得结果。为啥要逐级查询呢,因为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:
邮件交换记录。邮件的地址一般是[email protected]的格式,由于只知道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是正式名称