zoukankan      html  css  js  c++  java
  • DNS篇

    什么是DNS?

    DNS是 domain name system 的简写,翻译成中文就是域名系统

    DNS能做什么?即是干什么用的?

    DNS实际上就是一个翻译官,它的功能是将域名地址解析为IP地址

    为什么会有DNS的存在?

    这是因为我们的网络环境大多都是ICP/IP的框架,即计算机的通信主要是通过IP地址进行通信的,但是10位数以上的IP地址我们很难记住,我们一般使用域名地址进行访问,域名地址和IP地址是一一对应的关系,在计算机通信的时候,需要将域名地址转换为IP地址

    域名地址的结构分析

    DNS系统一般采用树状结构,比如ru.wikipedia.org为例,org是顶级域名,wikipedia为二级域名,ru为三级域名

    权威DNS

    权威DNS就是最终决定域名解析结果的服务器

    递归DNS

    递归DNS又称为Local DNS,虽然没有域名解析的决定权,但是它代理了向权威DNS获取域名解析结果的过程

    Local DNS上有缓存模块,如果在目标域名在缓存模块中存在,并且没有过期,则递归DNS返回缓存结果,否则会一级一级的查询各级域名的权威权威DNS直到获取完整的域名的解析结果

    DNS是如何工作的呢?

    比如我们需要访问www.taobao.com

    1、终端向Local DNS发起域名解析请求

    2、Local DNS获得域名解析请求后首先获取根域名服务器的地址

    3、获取到根域名服务器地址后Local DNS向根域名服务器发起请求域名解析请求,根域名服务器返回顶级域名com的地址

    4、随后Local DNS向com域名服务器发起解析请求,得到taobao.com域名的解析结果

    5、Local DNS向taobao.com域名服务器发起解析请求,得到www.taobao.com域名解析的结果

    6、Local DNS将递归查询获得的IP地址缓存并返回给终端

    注意:实际过程中,Local DNS服务器会先查询缓存,缓存命中并且没有过期,则返回缓存结果,否则启动递归查询流程

    域名解析存在的问题

    域名劫持

    其表现为域名A应该返回的DNS解析结果IP1被恶意替换为IP2,导致访问A失败或者访问到一个不安全的站点

    下面是几种常见的域名劫持的场景

    场景一:黑客侵入宽带路由器并且对终端用户的Local DNS进行攥改,指向黑客自己伪造的Local DNS

    场景二:缓存污染

    在接收到域名解析请求的时候,Local DNS首先会查找缓存,如果这个时候缓存被进行的修改,会导致缓存污染

    调度不精准

    关于调度不精准的原因,主要有两个:解析转发和Local DNS分布不均匀

    解析转发

    部分的Local DNS供应商为了降低运营成本,会将请求到自己节点的域名解析请求转发到其它供应商的Local DNS

    比如用户请求一个cdn.aliyum.com的域名解析请求,用户分配到的Local DNS A节点为了节约成本,把该次请求转发给了Local DNS B,权威DNS在进行域名解析的时候,会根据Local DNS的IP信息进行智能调度,比如权威DNS根据Local DNS B的IP进行调度,分配了CDN节点,但是这个CDN节点对终端的cdn.aliyum.com并不是最优的CDN,可能在地理上相隔很远。

    Local DNS分布不均匀

    比如我国的东部地区Local DNS分布密集,西部地区比较稀疏,比如一位西藏的用户准备范围CDN时,我们预期他应该会被调度到西藏的CDN节点A上以实现就近接入和访问加速。但由于Local DNS的资源有限,西部地区的终端用户被统一调度到青海的Local DNS B上,这时候权威DNS根据Local DNS B的IP进行CDN域名的智能解析,并将青海的CDN节点B返回给西藏用户,导致用户的网络访问延迟上升。

    HTTPDNS

    传统的域名解析存在这么多的问题,主要是Local DNS造成的,有什么解决的方法吗?这时候HTTPDNS 登场了。

    HTTPDNS 就是使用HTTP协议进行域名解析,直接绕过了运营商的Local DNS

    HTTPDNS 有如下优点:防止域名劫持、调度精准、实时生效

    调度精准

    传统的域名解析的调度不精准的问题,主要是由于Local DNS的部署和分配的问题,HTTPDNS 直接把用户的IP信息交给权威DNS,这样权威DNS就可以忽略Local DNS IP信息,根据终端用户的IP信息进行精准调度,避免了Local DNS的坐标干扰

    域名解析的最佳实践

    预解析

    懒加载

    • 业务层的域名解析请求只和缓存进行交互,不实际发生网络解析请求。如果缓存中存在记录,不论过期与否,直接返回业务层缓存中的记录;
    • 如果缓存中的记录已过期,后台发起异步网络请求进行HTTPDNS解析;
  • 相关阅读:
    【Python】异常
    【Python】面向对象
    【Python】文件操作
    【Python】函数
    【Python】介绍以及环境搭建
    【Java】阿里巴巴开发规范手册
    【Java】NIO
    【Java】JUC
    【Git】国内的项目托管网站-码云
    【Git】在 Idea 中使用 Git
  • 原文地址:https://www.cnblogs.com/liangshuang/p/8990275.html
Copyright © 2011-2022 走看看