ios dns预解析 苹果dns解析_DNS


ios dns预解析 苹果dns解析_域名服务器_02


ios dns预解析 苹果dns解析_缓存_03


ios dns预解析 苹果dns解析_域名服务器_04


ios dns预解析 苹果dns解析_ios dns预解析_05


ios dns预解析 苹果dns解析_域名服务器_06


ios dns预解析 苹果dns解析_域名服务器_07


DNS 核心系统层级结构

根域名服务器是关键,必须是众所周知的,找到了它,下面的各级域名服务器才能找到,否则域名解析就无从谈起了。既然知道了 DNS 的层次之分,那么不难猜出请求 apple.com 的 DNS 解析如下

  • (1) 首先访问根域名服务器,获取「com」顶级域名服务器的地址
  • (2) 请求「com」顶级域名服务器,返回「apple.com」域名服务器的地址
  • (3) 然后返回「apple.com」域名服务器,返回 apple.com 的地址

以上三层解析我们称为 DNS 核心解析系统,那么大家想想,全世界的 PC,app 等设备多如牛毛,如果每发一次请求都要按上面的 DNS 解析来获取 IP,那估计 DNS 解析系统就要炸了,如何缓解这种压力呢,答案是用缓存,事实上很多大公司,或网络运营商都会自建自己的 DNS 服务器,作为用户查询的代理,代替用户请求核心 DNS 系统,这样如果查到的话可以缓存查询记录,再次收到请求的号如果有缓存结果或者缓存未过期,则直接返回原来的缓存结果,大家可能听过 Google 的 8.8.8.8 DNS 解析服务器,这种就是 Google 自建的,我们一般称这种自建的为「非权威域名服务器」。

ios dns预解析 苹果dns解析_ios dns预解析_08


配置 DNS Server除了非权威域名服务器,还有浏览器缓存,操作系统缓存(大家熟知的 /etc/hosts 就是操作系统 DSN 缓存的一种)这样的话如果请求 example.com,dns 的完整解析流程如下:

ios dns预解析 苹果dns解析_缓存_09


1、 浏览器中输入 example.com 后,会先查看 浏览器的 DNS 缓存是否过期,未过期直接取缓存的,已过期会继续请求操作系统的缓存(/etc/hosts 文件等),还未找到,进入步骤 2

2、请求本地地址配置的DNSresolver(非权威域名服务器),一般由用户的Internet服务提供商(ISP)进行管理,例如有线Internet服务提供商、DSL宽带提供商或公司网,MAC的同学可以打开网络配置中的DNSServers来看下默认ISP提供的域名服务器(如果想用其他的非权威域名服务器,填入即可,这样就会覆盖ISP提供的默认地址)

ios dns预解析 苹果dns解析_DNS_10


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 工具来验证一下上面的请求流程

ios dns预解析 苹果dns解析_域名服务器_11


可以看到请求流程确实与我们的流程图一致!另外我们注意到 ip 地址返回了四个,这样的话 client 可以随机选择其中一个请求,这就是我们常说的 DNS 负载均衡,可有效缓存 server 压力。


[参考博客和书籍]
51 张图助你彻底掌握 HTTP [《图解TCP/IP》]