为啥需要 DNS 呢,因为终端间的数据交互是通过 IP 地址来定位目标的,IP 地址如 192.168.8.8。由于人类对无规律的 IP 地址不容易记忆,因此一般使用 域名地址 来代替 IP 地址 进行搜索使用,但实际上终端间的访问最终还是通过 域名地址映射获取 IP 地址来访问的。
用户习惯使用域名地址来访问终端,当浏览器发出请求后,操作系统会使用 DNS 来查询域名地址对应的 IP 地址是什么,查询成功后操作系统会通过 IP 地址来访问终端来获取资源。
域名 DNS 名称服务器查询都是从根部.按照从右往左顺序原则进行的。
通常情况下,主机向本地名称服务器的查询一般都是采用递归查询,而本地名称服务器向 DNS名称服务器采用迭代查询。
递归查询:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。
迭代查询:1. 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。2. 根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。
最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
https://www.google.com.
.(根域名)一般都代表root,因此可以不写。
.com 顶级域名服务器(简称TLD)
google.com 二级名称服务器(权限/权威 域名服务器)
www.google.com 权威名称服务器
DNS查询流程:
递归查询(递归解析)
是默认的 DNS 解析方式。在这种解析方式中,如果客户端配置的本地名称服务器遇到不能解析的,则后面的查询全由本地名称服务器
代替DNS客户端
进行查询,直到本地名称服务器从权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉 DNS 客户端查询的结果。
-
客户端
向本机配置的本地名称服务器
发出 DNS 域名查询请求。 -
本地名称服务器
收到请求后,先查询本地的缓存
,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以 DNS 客户端的角色发送与前面一样的 DNS 域名查询请求发给根名称服务器。 -
根名称服务器
收到 DNS 请求后,把所查询得到的所请求的 DNS 域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器。 -
本地名称服务器
根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面一样的 DNS 域名查询请求。 -
顶级名称服务器
在收到 DNS 查询请求后,也是先查询自己的缓存
,如果有所请求的 DNS 域名的记录项,则直接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给 DNS 客户端,否则向本地名称服务器返回所请求的 DNS 域名中的二级域名所对应的二级名称服务器地址。 -
本地名称服务器
根据根名称服务器所返回的二级名称服务器地址,向对应的二级名称服务器发送与前面一样的 DNS 域名查询请求。 -
二级名称服务器
在收到 DNS 查询请求后,也是先查询自己的缓存
,如果有所请求的 DNS 域名的记录项,则直接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给 DNS 客户端,否则向本地名称服务器返回所请求的 DNS 域名中的三级域名所对应的三级名称服务器地址。 -
就这样
本地名称服务器
重复步骤 6 和步骤 7 的方法一次次地向三级、四级名称服务器等查询,直到
最终的对应域名所在区域的权威名称服务器
返回到最终的记录给本地名称服务器。 -
然后再由
本地名称服务器
返回给DNS 客户
,同时
本地名称服务器会缓存
本次查询得到的记录项。
参考文档