跳到主要内容

DNS 解析域名

域名系统是将网站域名和 IP 地址相互映射的一个分布式数据库,能够更方便的访问互联网

CDN 三级缓存策略

三级缓存 浏览器 操作系统 本地域名服务器 优先递归,再迭代

  • 首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
  • 若没有命中,则继续搜索操作系统的 DNS 缓存
  • 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
  • 若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询

递归查询,本地域名服务器执行多次查询, 操作系统只需要请求一次

-- 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器

  • 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
  • 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
  • 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
  • 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起
  • 至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起

迭代查询,操作系统执行多次查询

在这种方式下,DNS 客户端负责所有查询工作,而不是本地域名服务器代表客户端进行查询。当客户端发起一个 DNS 请求时,它会首先询问它配置的主名称服务器。如果主服务器无法直接提供答案,它会给客户端一个指向下一个服务器的提示,客户端便将查询请求发送到这个新的服务器,如此往返,直到找到完整的答案。这种查询方式称为迭代查询,因为查询的每一步都由客户端迭代进行

绕过运营商域名查询

使用 Android DNS 模块(okhttp)

  • 支持 http/2,http/2 通过使用多路复用技术在一个单独的 TCP 链接上支持并发,通过在一个连接上一次性发送多个请求来发送或接收数据
  • 如果 HTTP/2 不可用,连接池复用技术也可以极大减少延时
  • 支持 GZIP,可以压缩下载体积,甚至可以达到 70%
  • 响应缓存可以完全避免网络重复请求
  • 如果服务器配置了多个 IP 地址,当第一个 IP 连接失败时,OkHttp 会自动尝试下一个 IP