Dns&HttpDns

目录

1、Dns
2、HttpDns

1、Dns

dns流程
  1. 终端向LocalDNS发起递归查询。

  2. LocalDNS(未开启转发模式),则向根DNS服务器发起迭代查询请求。(如开启转发模式,则转发至上级localDns)

(任何LocalDNS都需知道根DNS服务器的IP地址(全球共13台)。)

  1. 根DNS服务器返回一级域名服务器IP地址,(com DNS服务器的IP地址)。

(LocalDNS将com DNS服务器及其IP地址加入到缓存,下次DNS请求,在缓存未过期的情况下,授权给com 区的域名需向com DNS服务器请求查询时,直接往com DNS服务器发查询请求,不再向根DNS服务器请求。)

  1. LocalDNS服务器向一级域名服务器(com DNS服务器)发起迭代查询请求。

  2. com DNS服务器返回二级域名服务器IP地址(wangsu.com DNS服务器的IP地址)。

(LocalDNS将wangsu.comDNS服务器及其IP地址加入到缓存,下次DNS请求,在缓存未过期的情况下,授权给wangsu.com区的域名需向wangsu.com DNS服务器请求查询时,直接往对应 DNS服务器发查询请求,不再向根DNS服务器及com DNS服务器请求。)

  1. LocalDNS服务器向wangsu.com DNS服务器发起迭代查询请求。

7.wangsu.com DNS服务器给出域名的IP地址。

(LocalDNS将www.wangsu.com
IP地址加入到缓存,下次相同的DNS请求,在缓存未过期的情况下,LocalDNS直接给出该域名的IP地址,不再向权威DNS服务器查询。)

  1. LocalDNS服务器将该域名对应的IP地址返回给终端用户,

(DNS客户端将域名对应的IP地址接入缓存。下次请求该域名时,若缓存未过期,DNS客户端直接从缓存取出IP,不再向LocalDNS发起迭代查询。)

递归查询指如果终端用户所请求的LocalDNS服务器不知道被查询的域名的IP地址,则以DNS客户端的身份,向其它域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

迭代查询指域名服务器或者给出最终结果,或者告诉DNS客户(此处指LocalDNS)应去哪些DNS服务器查询。

递归查询LocalDNS如果没有记录客户端发过来的域名对应的ip地址,则以客户端的身份,根域名服务器发起迭代查询,迭代查询是值,根域名服务器不直接告诉LocalDNS结果,而是告诉LocalDNS去哪里查询,然后LocalDNS一级一级的查询,直至最终得到结果。

2、httpdns

2.1、httpdns解决的问题

2.1.1、域名劫持

1、黑客侵入了宽带路由器并对Local DNS进行篡改;
2、攻击者还可以监听终端用户的域名解析请求,并在Local DNS返回正确结果之前将伪造的DNS解析响应传递给终端用户
3、Local DNS针对部分域名的缓存进行更改

2.1.2、调度不精准

由于运营商策略的多样性,其 Local DNS 的解析结果可能不是最近、最优的节点。

部分Local DNS A供应商为了降低运营成本,会将请求到自己节点的域名解析请求转发给其他供应商的Local DNS B节点,Local DNS B请求权威dns解析时,权威dns会根据Local DNS B的ip,分配离Local DNS B地理位置最近的ip地址。

Local DNS的布点受成本因素制约分布并不均匀也会导致上述调度不准的问题。

2.2、HTTPDNS

1、使用HTTP协议进行域名解析,将域名解析请求直接发送到HTTPDNS服务端,绕过运营商 Local DNS ,避免域名劫持。
2、HTTPDNS服务端会将终端用户的IP信息直接交付给权威DNS,从而解决调度不精准的问题。
3、另外通过域名预解析、缓存(DNS解析结果)、(解析结果)懒更新策略等方式实现无延迟解析。

2.2.1、预加载

app启动时,可以对我们后续需要用到的域名,调用HTTPDNS SDK中的预解析方法发起异步的预解析请求。

域名预解析
2.2.2、懒更新

所谓懒加载策略,核心的实现思路如下:

1、如果缓存中没有记录,那么异步网络请求HTTPDNS解析,获取解析结果。
(网络请求需要异步,同步调用需要直接拿到结果,可采取线程池+Future的策略)
2、如果缓存中存在记录,不论过期与否,直接返回业务层缓存中的记录;
3、如果缓存中的记录已过期,后台发起异步网络请求进行HTTPDNS解析;

绝大多数场景下域名对应IP变更并不频繁,特别是在单次APP的使用周期内,域名解析出的IP往往是相同的。
另一方面,即使域名对应的IP发生改变,后台会异步发起的异步HTTPDNS解析解析会很快获取最新解析结果 ,结合我们的网络重试策略,保证了下一次网络请求的正确性。

懒更新
2.2.3、OKhttp+HttpDns
public class OkHttpDns implements Dns {
    private static final Dns SYSTEM = Dns.SYSTEM;
    HttpDnsService httpdns;//httpdns 解析服务
    private static OkHttpDns instance = null;
    private OkHttpDns(Context context) {
        this.httpdns = HttpDns.getService(context, "account id");
    }
    public static OkHttpDns getInstance(Context context) {
        if(instance == null) {
            instance = new OkHttpDns(context);
        }
        return instance;
    }
    @Override
    public List<InetAddress> lookup(String hostname) throws UnknownHostException {
        //通过异步解析接口获取ip
        String ip = httpdnsManager.getIpByHost(hostname);
        if(ip != null) {
            //如果ip不为null,直接使用该ip进行网络请求
            List<InetAddress> inetAddresses = Arrays.asList(InetAddress.getAllByName(ip));
            Log.e("OkHttpDns", "inetAddresses:" + inetAddresses);
            return inetAddresses;
        }
        //如果返回null,走系统DNS服务解析域名
        return Dns.SYSTEM.lookup(hostname);
    }
}

//给okhttpclient设置自定义的dns
private void okhttpDnsRequest() {
    OkHttpClient client = new OkHttpClient.Builder()
    .dns(OkHttpDns.getInstance(getApplicationContext()))
    .build();

自定义一个类实现Dns,并重写Dns的lookup方法,
在这个方法中结合懒更新策略获取域名对应的ip,包装成InetAddress list进行返回。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容