一、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,即迭代查询给出最终答案的那台dns。平常我们去localdns去解析域名拿到的一般都是非权威应答,即localdns直接从缓存中查询结果,然后将结果返回给你,下图是用nslookup解析百度域名的结果,获得的就是非权威应答:
迭代查询:
发出多次请求才能得到答案。迭代查询的话,一般从根域查起,逐级查询,直到获得结果。为啥要逐级查询呢,因为dns是分层管理的,根域管理一级域,一级域管理二级域………即上级知道下级在哪。
3、DNS服务器的查询顺序:
1)如果查询请求是本机所负责区域中的数据的话,要通过查询区域数据文件返回结果(这样获得的就是权威应答);
2)如果查询请求不是本机所负责区域中的数据的话,就查询缓存,有答案则返回结果(非权威应答);
3)如果缓存中没有答案,则向根发起查询请求(前提是开启了递归),根返回负责.com的dns的ns记录和a记录,如此迭代查询直到获得结果。
二、DNS服务器类型
未完待续