“App 优化网络,先从优化 DNS 开始”

一、前言谈到优化,首先第一步,肯定是把一个大功能,拆分成一个个细小的环节,再单个拎出来找到可以优化的点,App 的网络优化也是如此 。
在 App 访问网络的时候,DNS 解析是网络请求的第一步,默认我们使用运营商的 LocalDNS 服务 。有数据统计,在这一块 3G 网络下,耗时在 200~300ms,4G 网络下也需要 100ms 。
解析慢,并不是 LocalDNS 最大的问题,它还存在一些更为严重的问题,例如:DNS 劫持、DNS 调度不准确(缓存、转发、NAT)导致性能退化等等,这些才是网络优化最应该解决的问题 。
想要优化 DNS,现在最简单成熟的方案,就是使用 HTTPDNS 。
今天就来聊聊,DNS、HTTPDNS,以及在 Android 下,如何使用 OKHttp 来集成 HTTPDNS 。
二、DNS 和 HTTPDNS2.1 什么是 DNS
在说到 HTTPDNS 之前,先简单了解一下什么是 DNS?
在网络的世界中,每个有效的域名背后都有为其提供服务的服务器,而我们网络通信的首要条件,就是知道服务器的 IP 地址 。
但是记住域名(网址)肯定是比记住 IP 地址简单 。如果有某种方法,可以通过域名,查到其提供服务的服务器 IP 地址,那就非常方便了 。这里就需要用到 DNS 服务器以及 DNS 解析 。
DNS(Domain Name System),它的作用就是根据域名,查出对应的 IP 地址,它是 HTTP 协议的前提 。只有将域名正确的解析成 IP 地址后,后面的 HTTP 流程才可以继续进行下去 。
DNS 服务器的要求,一定是高可用、高并发和分布式的服务器 。它被分为多个层次结构 。

  • 根 DNS 服务器:返回顶级域 DNS 服务器的 IP 地址 。
  • 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址 。
  • 权威 DNS 服务器:返回相应主机的 IP 地址 。
这三类 DNS 服务器,类似一种树状的结构,分级存在 。
“App 优化网络,先从优化 DNS 开始”

文章插图
 
当开始 DNS 解析的时候,如果 LocalDNS 没有缓存,那就会向 LocalDNS 服务器请求(通常就是运营商),如果还是没有,就会一级一级的,从根域名查对应的顶级域名,再从顶级域名查权威域名服务器,最后通过权威域名服务器,获取具体域名对应的 IP 地址 。
“App 优化网络,先从优化 DNS 开始”

文章插图
 
DNS 在提供域名和 IP 地址映射的过程中,其实提供了很多基于域名的功能,例如服务器的负载均衡,但是它也带来了一些问题 。
2.2 DNS 的问题
DNS 的细节还有很多,本文就不展开细说了,其问题总结来说就是几点 。


    推荐阅读