DNS是什么
DNS是应用层的协议,全名为Domain Name System(域名解析系统)。当我们输入www.baidu.com的时候,浏览器就要向这个URL的主机名对应的服务器发起请求,就得知道服务器的IP地址,对于浏览器来说,DNS的作用就是将主机名转换成IP地址。
DNS是一个分布式数据库,整个DNS系统由分散在世界各地的很多台DNS服务器组成,每台DNS服务器上都保存了一些数据,这些数据可以让我们最终查询到主机名对应的IP。
DNS缓存
在域名服务器解析的时候,使用缓存保存域名和IP地址的映射,有2种缓存方式:
- 浏览器缓存:浏览器在获取网络域名的实际IP地址后会对其进行缓存,减少网络请求的损耗
- 操作系统缓存:用户自己配置的hosts文件
DNS查询过程
DNS的查询过程,简而言之,就是问这些DNS服务器,你知道这个主机的IP吗?不知道?那你知道去哪台服务器上可以查到吗?直到查到我想要的IP为止。
- 首先搜索浏览器的DNS缓存,缓存中维护了一张域名和IP地址的对应表
- 若没有命中,则搜索操作系统的DNS缓存
- 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的DNS缓存,查找成功则返回结果
- 若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
a. 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
b. 本地域名服务器拿到这个顶级域名服务器的地址后,向其发送请求,获取权限域名服务器的地址
c. 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
d. 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来
e. 至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起