网络编程之DNS域名解析

简介

DNS 又称域名系统 (Domain Name System) 它将域名和IP地址相互映射成一个分布式数据库。使人们更加方便的访问互联网。

传统DNS解析过程

假如用户发送www.baidu.com地址请求

  1. www.baidu.com 这个请求会先通过运营商本地域名服务器,解析出对应的IP地址。
  2. 当运营商本地域名服务器数据库中没有查到该域名对应的IP地址时,就会向根域名服务器发送域名解析请求。
  3. 根域名服务器会返回本地域名服务器一个查询的主域名服务器地址。
  4. 本地域名服务器得到主域名服务器地址后,然后向域名服务器发送域名查询请求。如果查到域名对应的IP地址,先保存在自己本地服务器,然后返回给用户,如果没有主域名服务器没有查到则返回相关的其他主域名服务器地址给本地域名服务器。
  5. 本地域名服务器不断的去请求直到拿到域名对应的IP地址。
  6. 用户根据www.baidu.com对应的IP访问百度的网页。

整个域名解析的过程对于用户是无感知的,用户能直观感觉到的只是网页加载的快慢。

HttpDNS

对于应用程序而言,加载页面的快慢直接影响用户的体验,如果是弱网环境,很有可能访问失败,所以如何保证用户在任何情况下的用户体验就变得十分重要。于是HttpDNS技术就出现了。

HttpDNS利用Http协议直接向目标服务器发送域名查询请求。目标服务器返回查询的域名对应一组IP地址。客户端可以使用这一组IP地址进行数据请求。HttpDNS的优势是查询快,避免了本地服务器的查询。同时也减少了DNS攻击。

在Okhttp网络框架中,已经为我们提供了DNS的实现接口。

public interface Dns {

    Dns SYSTEM = new Dns() {
      @Override public List<InetAddress> lookup(String hostname) throws UnknownHostException {
        if (hostname == null) throw new UnknownHostException("hostname == null");
        return Arrays.asList(InetAddress.getAllByName(hostname));
    }
  };
    List<InetAddress> lookup(String hostname) throws UnknownHostException;

根据传入的hostname域名进行解析,返回一组IP地址,然后按照OkHttp尝试的顺序。如果 连接到一个地址失败,OkHttp将重试连接到下一个地址,直到 连接建立,IP地址集耗尽,或超过限制。

Http提供了添加dns的构建方法。

public Builder dns(Dns dns) {
      if (dns == null) throw new NullPointerException("dns == null");
      this.dns = dns;
      return this;
    }

HttpDNS解析过程

  1. 客户端先实现Dns接口,并且实现lookup方法。
  2. 先从本地代码缓存中根据域名查询对应的IP地址,如果有缓存验证IP是否过期,未过期直接返回。
  3. 如果过期或本地没有缓存则开始发起Http网络请求,将请求到的IP地址更新到本地,并且返回给OKhttp使用。
  4. 下次请求则直接从本地缓存中获取对应的IP的地址。

传统DNS解析对比HttpDNS解析

优点:

  1. 查询速度快。HttpDNS直接通过http网络接口返回IP地址。传统DNS则是先经过本地域名服务器然后逐级查询,耗时久。
  2. 减少dns解析错误,HttpDNS是直接获取IP地址,传统DNS则通过本地域名服务器查询,IP地址很容易被拦截篡改。
  3. 返回的IP更稳定,HttpDN获取的IP在服务器后端可以优先返回稳定的IP地址,而传统DNS则查询的不一定是最优IP地址。

缺点

  1. HttpDNS需要用户手动实现,而传统DNS则不需要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值