我们一般记住网站是记住网站的名称,但是很难记住网站的 IP 地址,所以我们需要一个地址簿来进行索引,而在网络中的地址簿就是 DNS 服务器
DNS 服务器是高并发高可用分布式的,其为树状结构,如下图所示:
DNS 服务器按照层次可以分为以下三种
-
根域 DNS 服务器
根域就是所谓的 . 比如 www.baidu.com,在配置中应该是 www.baidu.com. (后面还有一个点),一般我们在浏览器里输入时会省略后面的点
返回顶级域 DNS 服务器的 IP 地址
-
顶级域 DNS 服务器 - 返回权威 DNS 服务器的 IP 地址
-
权威 DNS 服务器 - 返回响应主机的 IP 地址
如何区分当前域名是几级域,可以参考域名中有几个点来判断(除了根域外),比如baidu.com就是个一级域,而www.baidu.com就是个二级域(它是在baidu.com这个域里面有一个叫做www的主机)
DNS 域名查找规则:
- 在客户端和浏览器:本地 DNS 之间的查询方式是递归查询
- 在本地 DNS 服务器与根域及其子域之间的查询是迭代查询
递归查询:
客户端输入 URL 之后,开始递归查找,任意一个查找过程中找到了都会结束查找流程
本地浏览器缓存中查找(chrome://dns/) → 本地 hosts 文件查找 → 本地 DNS 解析器缓存查找 → 本地 DNS 服务器查找
如果在本地 DNS 服务器中无法查找到,则会根据本地 DNS 服务器设置的转发器查询,但是如果未设置转发器,则迭代查找的过程如下:
在查找的过程中有以下的优化点:
-
DNS 存在多级缓存 - 按照离浏览器的距离排序的话:
浏览器缓存 → 系统缓存 → 路由器缓存 → IPS 服务器缓存 → 根域名服务器缓存 → 顶级域名服务器缓存 → 主域名服务器缓存
-
在域名和 IP 的映射过程中,给了应用基于域名做负载均衡的机会。