DNS协议是一种基于UDP的应用层协议,它用于将网站的网址也就是域名,转换为IP地址,以便用户可以访问网站。
图片
DNS把域名和IP地址联系在一起,有了保存网站域名和IP地址对应关系的DNS服务器,我们就不用输入IP地址来访问一个网站,而是输入网址,然后通过向DNS服务器请求获取域名对应的IP来访问网站了。
图片
DNS域的命名空间是一种树状层次结构,一般可分为根域、一级域(也叫顶级域)、二级域、子域以及主机名。
图片
对应地,在域名的每一层都会有一个域名服务器,来提供对应层级的域名解析服务。
图片
DNS进行域名解析的过程是,主机先查本地浏览器上的DNS缓存,再查本机操作系统中的DNS缓存以及hosts文件,如果都没有,才会向本地DNS服务器发起DNS域名解析请求,本地DNS服务器如果有请求域名对应的IP地址,则直接返回告诉主机。如果没有,就向根域名服务器发送请求,根域名服务器是最高层次的,它不直接用于域名解析,但是它会告诉本地DNS服务器去找对应的顶级域名服务器,接着,本地DNS服务器去找对应的顶级域名服务器请求,顶级域名服务器会告诉本地DNS服务器去找对应的权威DNS服务器,本地DNS于是再转向问权威 DNS服务器,权威DNS服务器查询后将对应的 IP 地址告诉本地 DNS,本地DNS再将IP地址返回给主机。
这个时候,为了避免下次对这个域名发起DNS解析时,再来一遍上面的解析过程,主机和本地DNS都会对刚刚的域名解析结果进行缓存,下次再解析时,如果有缓存就可以直接从缓存中获取解析结果。
图片
图片
图片
图片
图片
从上面的过程可以看到,DNS的查询方式分为两种,一种是递归,一种是迭代。
递归查询指的是如果 A 请求 B,那么 B 作为请求的接收者,一定要给 A 想要的答案。
图片
迭代查询指的是,如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求。
图片
在实际应用中,递归查询通常用于从请求主机到本地 DNS 服务器的查询,而迭代查询则用于本地 DNS 服务器向根域名服务器或者顶级域名服务器发出查询请求。
图片