移动端HTTPDNS架构方案

819 阅读2分钟

扩展阅读

可能是最全的iOS端HttpDns集成方案

移动解析HTTPDNS在App开发中实践总结

HTTPDNS在iOS端的实践

iOS端WebView " IP直连 " 如何处理 Cookie

HTTPDNS架构图

HTTPDNS架构图.png

策略层

  • 容灾策略放在网络库中处理,未在HTTPDNS架构中体现。
  • 黑白名单策略架构中只实现IPV6白名单,即未开启IPV6开关下,只获取白名单中的域名的IPV6地址。
  • 缓存策略仅做了内存缓存,可能是担心下次启动时服务器IP变更,直接使用本地缓存会导致访问失败。
  • 查询策略逻辑基本一致。

注入层

  • IP替换、SSL证书处理、Cookie处理、重定向处理皆在网络库中解决,未在HTTPDNS架构中体现。

HTTPDNS流程图

HTTPDNS流程图.png

流程说明

  • 注:名称有缩减,对应类图查阅
  1. NetworkingManager初始化
  2. HttpDNSManager初始化
    1. queue,初始化5分钟、1小时(刷新)时间
    2. 通过特定地址,验证Ipv6连通性
      1. 通过域名创建 DNSIPsSer 对象
      2. 对该对象打上isGetIPV6标签
      3. 通过IPTools判断该域名是否为ip地址
      4. 若不是,获取域名对应ip列表
      5. 通过DnsDes对域名加密,加密结果拼接到dnsURL上
      6. 解析结果,只取前1个
      7. 通过IPTools判断是否为ipv6地址
      8. 进行ipv6连通性测试
      9. 构建DNSResolItem对象,最终存入对象iPItemArray中
      10. 更新DNSIPsSer对象iPItemArray、isIpv6Done、updateTime属性
    3. ipv6白名单,开关,对称加密密钥
    4. 初始化监测网络变化
      1. 网络切换时,检测ipv6连通性,并对ItemArray所有域名重发。
  3. 获取本地域名缓存列表
  4. 对所有域名请求ip地址
    1. 若ItemArray中已有该域名,则跳过。
    2. 如果不存在此域名,则将次域名加入到域名列表。
    3. 更新ItemArray
    4. 批量请求ip地址
      1. 通过域名创建DNSIPSer对象
      2. 将域名组每8份一组进行切割、请求
      3. 通过白名单获取ipv6请求域名数组,并批量请求
      4. 若ipv6连通性未返回结果,等待0.6s,等待2s
      5. 解析获取的IPv4地址,只取前2个(会根据运营商、地区返回最佳IP)
      6. 构建DNSResolItem对象,最终存入对象iPItemArray中
      7. 更新DNSIPsSer对象iPItemArray、isIpv6Done、updateTime属性
  5. 程序进入前台,触发激活逻辑。
  6. 如果当前时间距离记录时间超过1小时,则所有dns都更新。

HTTPDNS类图

HTTPDNS类图.png