计算机网络--应用层--6--DNS DNS 核心系统层级结构根域名服务器是关键必须是众所周知的找到了它下面的各级域名服务器才能找到否则域名解析就无从谈起了。既然知道了 DNS 的层次之分那么不难猜出请求 apple.com 的 DNS 解析如下(1) 首先访问根域名服务器获取「com」顶级域名服务器的地址(2) 请求「com」顶级域名服务器返回「apple.com」域名服务器的地址(3) 然后返回「apple.com」域名服务器返回 apple.com 的地址以上三层解析我们称为 DNS 核心解析系统那么大家想想全世界的 PCapp 等设备多如牛毛如果每发一次请求都要按上面的 DNS 解析来获取 IP那估计 DNS 解析系统就要炸了如何缓解这种压力呢答案是用缓存事实上很多大公司或网络运营商都会自建自己的 DNS 服务器作为用户查询的代理代替用户请求核心 DNS 系统这样如果查到的话可以缓存查询记录再次收到请求的号如果有缓存结果或者缓存未过期则直接返回原来的缓存结果大家可能听过 Google 的 8.8.8.8 DNS 解析服务器这种就是 Google 自建的我们一般称这种自建的为「非权威域名服务器」。配置 DNS Server除了非权威域名服务器还有浏览器缓存操作系统缓存大家熟知的 /etc/hosts 就是操作系统 DSN 缓存的一种这样的话如果请求 example.comdns 的完整解析流程如下:1、 浏览器中输入 example.com 后会先查看 浏览器的 DNS 缓存是否过期未过期直接取缓存的已过期会继续请求操作系统的缓存/etc/hosts 文件等还未找到进入步骤 22、请求本地地址配置的DNSresolver非权威域名服务器一般由用户的Internet服务提供商(ISP)进行管理例如有线Internet服务提供商、DSL宽带提供商或公司网MAC的同学可以打开网络配置中的DNSServers来看下默认ISP提供的域名服务器如果想用其他的非权威域名服务器填入即可这样就会覆盖ISP提供的默认地址3、 DNS resolver 将 example.com 的请求转发到 DNS 根名称服务器, 根服务器返回「.com」顶级域名服务器地址4、 DNS resolver 再次转发 example.com 的请求这次转发到步骤三获取到的 .com 域的一个 TLD 名称服务器。.com 域的名称服务器使用与 example.com 域相关的四个 Amazon Route 53 名称服务器的名称来响应该请求。5、Amazon Route 53 名称服务器在 example.com 托管区域中查找 example.com 记录获得相关值例如Web 服务器的 IP 地址 (192.0.2.44)并将 IP 地址返回至 DNS 解析程序。6、DNS resolver 最终获得用户需要的 IP 地址。解析程序将此值返回至 Web 浏览器。DNS 解析程序还会将 example.com 的 IP 地址缓存 (存储) 您指定的时长以便它能够在下次有人浏览 example.com 时更快地作出响应。我们可以用 dig 工具来验证一下上面的请求流程可以看到请求流程确实与我们的流程图一致另外我们注意到 ip 地址返回了四个这样的话 client 可以随机选择其中一个请求这就是我们常说的 DNS 负载均衡可有效缓存 server 压力。~~~text用户输入 www.example.com↓浏览器/操作系统缓存 → 未命中↓本地 DNS 服务器递归解析器↓┌─────────────────────────────────┐│ 1. 查询根服务器 ││ 根服务器 → 返回 .com TLD 服务器││ 2. 查询 .com TLD 服务器 ││ .com TLD → 返回 example.com 权威服务器 ││ 3. 查询 example.com 权威服务器 ││ 权威服务器 → 返回 www.example.com 的 IP │└─────────────────────────────────┘↓本地 DNS 服务器返回 IP 给操作系统↓浏览器使用 IP 访问服务器[参考博客和书籍] [51 张图助你彻底掌握 HTTP](https://mbd.baidu.com/newspage/data/landingsuper?context%7B%22nid%22%3A%22news_8962429018124444299%22%7Dn_type-1p_from-1) [《图解TCP/IP》]