什么是 DNS?
DNS 的全称是 domain name system,即域名系统,是互联网的一项服务。实质上他是一个分布式数据库,功能是联系域名和 ip 地址。通过域名,最终得到该域名对应的 ip 地址的过程则是域名解析的过程。
DNS 组成部分
DNS 由下面三个部分组成
- 名称解析器(resolver)
- 域名空间(domain name space)
- 名称服务器(name server)
浏览器是如何向 DNS 服务器发出查询
- 浏览器搜索自身的 DNS 缓存:
首先浏览器会去搜索自身的 DNS 缓存,看缓存有没有过期,过期的话缓存的解析就结束了(chrome 缓存的时间只有一分钟,查看 chrome 的缓存可打开:chrome://net-internals/#dns )。 - 搜索操作系统自身的 DNS 缓存:
如果浏览器没有找到缓存或者缓存过期失效,浏览器就会搜索操作系统自身的缓存,没有找到或者失效,解析结束(操作系统的缓存:window 系统是一天,mac 系统严格根据 DNS 协议中的 TTL)。 - 读取本地的 hosts 文件:
若操作系统的缓存也没有找到或失效,浏览器就会去读取本地的 hosts 文件(Hosts 文件也可以建立域名到 IP 地址的绑定关系,可以通过编辑 Hosts 文件来达到名称解析的目的。 例如,我们需要屏蔽某个域名时,就可以将其地址指向一个不存在 IP 地址,以达到屏蔽的效果)。 - 浏览器发起一个 DNS 的系统调用:
hosts 中没有找到对应的配置项的话,浏览器发起一个 DNS 的调用(向本地主控 DNS 服务,一般来说是你的运营商提供的)。
DNS 查询分为递归查询和迭代查询
递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。
域名的层级结构如下:
1 | 主机名.次级域名.顶级域名.根域名 |
迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:你下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。
由于递归模式会导致 DNS 服务器流量很大,所以现在大多数采用迭代模式。
总结:该文章主要介绍一些概念性的东西,欲知详情,请听下回分解!