ok,顶级域之后就是我们熟知的一级域名,譬如 www.example.com 中的 example 就是一级域。有兴趣的可以自己试着用 dig 指令再追踪一下:dig example.com. +trace ,可以看到是从根节点从右向左逐步查找的 。
NS 为何
上面两张 dig 命令贴图中间出现了很多次 NS ,NS 即是 NameServer,大部分情况下又叫权威名称服务器简称权威 。
什么是权威呢,通俗点讲其实是某些域的权威,也就是权威上面有这些域的最新,最全的数据,所有这些域的数据都应该以此为准(只有权威可以增删改这些域的数据),就像上面 dig com +trace 的结果可以看到,com 的权威是上面的 13 个根域 。同理,所有的顶级域(cn、org、net 等等)的权威都是根域 。
DNS 解析
其实上面就是 DNS 解析的一个大致过程,即 迭代解析 ,但是不是很详尽,一个完整的 DNS 解析过程如下:
Step1: 首先拿到 URL 后,浏览器会寻找本地的 DNS 缓存,看看是否有对应的 IP 地址,如果缓存中存在那就好了,如果没有,那就得向 DNS Server 发送一个请求,找到你想要的 IP 地址 。
Step2: 首先他会向你的 ISP(互联网服务提供商) 相关的 DNS servers 发送 DNS query 。然后这些 DNS 进行递归查询(recursive) 。所谓的递归查询,就是能够直接返回对应的IP地址,而不是其他的 DNS server 地址 。
Step3: 如果上述的 DNS Servers 没有你要的域名地址,则就会发送迭代查询,即会先从 root nameservers 找起 。即是假如你要查询 www.example.com ,会先从包含根结点的 13 台最高级域名服务器开始 。
Step4: 接着,以从右向左的方式递进,找到 com. 然后向包含 com 的 TLD(顶级域名) nameservers 发送 DNS 请求 。接着找到包含 example 的 DNS server 。
Step5: 现在进入到了example.com 部分,即是现在正在询问的是权威服务器,该服务器里面包含了你想要的域名信息,也就是拿到了最后的结果 record。
Step6: 递归查询的 DNS Server 接受到这 record 之后, 会将该record 保存一份到本地 。如果下一次你再请求这个 domain 时,我就可以直接返回给你了 。由于每条记录都会存在 TLL ,所以 server 每隔一段时间都会发送一次请求,获取新的 record,
Step7: 最后,再经由最近的 DNS Server 将该条 record 返回 。同样,你的设备也会存一份该 record 的副本 。之后,就是 TCP 的事了,下面是一张萌萌的简化图:
到这里,我们大致就可以梳理一下,迭代查询的过程如下:
流程: . => com. => .exampl.com. => www.example.com. => IP adress
TTL 为何
TTL 是 Time To Live 的缩写,该字段指定 IP 包被路由器丢弃之前允许通过的最大网段数量 。TTL 是 IPv4 包头的一个 8 bit 字段 。
简单的说它表示 DNS 记录在 DNS 服务器上缓存时间 。
扯了这么多 http 请求,DNS 解析,回到正题域名收敛上,从上面可以看到,DNS 解析其实是一个很复杂的过程,在 PC 上,我们采用域名发散策略,是因为在 PC 端上,DNS 解析通常而言只需要几十 ms ,可以接受 。而移动端,2G 网络,3G网络,4G网络/wifi 强网,而且移动 4G 容易在信号不理想的地段降级成 2G ,通过大量的数据采集和真实网络抓包分析(存在DNS解析的请求),DNS的消耗相当可观,2G网络大量5-10s,3G网络平均也要3-5s(数据来源于淘宝) 。下面附上在 2G,3G,4G,WIFI 情况下 DNS 递归解析的时间 (ms):
因为在增加域的同时,往往会给浏览器带来 DNS 解析的开销 。所以在这种情况下,提出了域名收敛,减少域名数量可以降低 DNS 解析的成本 。
下图是手机端页面加载数和域名分散数的关系(from Mobify Developer):
推荐阅读
- 域名被墙怎么办?访问域名无法打开服务器上面搭建的网站
- 一级域名一般在哪里
- 毛孔粗大用收敛水有用吗
- 收敛水可以湿敷吗
- 收敛水是化妆水吗
- 收敛水可以收缩毛孔吗
- 收敛水有酒精吗
- 收敛水对皮肤有伤害吗
- 收敛数列一定有界吗
- 数列收敛是数列有界的什么条件