DNS是 domain name system 的简写,翻译成中文就是域名系统
DNS实际上就是一个翻译官,它的功能是将域名地址解析为IP地址
这是因为我们的网络环境大多都是ICP/IP的框架,即计算机的通信主要是通过IP地址进行通信的,但是10位数以上的IP地址我们很难记住,我们一般使用域名地址进行访问,域名地址和IP地址是一一对应的关系,在计算机通信的时候,需要将域名地址转换为IP地址
DNS系统一般采用树状结构,比如ru.wikipedia.org为例,org是顶级域名,wikipedia为二级域名,ru为三级域名
权威DNS就是最终决定域名解析结果的服务器
递归DNS又称为Local DNS,虽然没有域名解析的决定权,但是它代理了向权威DNS获取域名解析结果的过程
Local 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返回给西藏用户,导致用户的网络访问延迟上升。
传统的域名解析存在这么多的问题,主要是Local DNS造成的,有什么解决的方法吗?这时候HTTPDNS 登场了。
HTTPDNS 就是使用HTTP协议进行域名解析,直接绕过了运营商的Local DNS
HTTPDNS 有如下优点:防止域名劫持、调度精准、实时生效
调度精准
传统的域名解析的调度不精准的问题,主要是由于Local DNS的部署和分配的问题,HTTPDNS 直接把用户的IP信息交给权威DNS,这样权威DNS就可以忽略Local DNS IP信息,根据终端用户的IP信息进行精准调度,避免了Local DNS的坐标干扰
- 业务层的域名解析请求只和缓存进行交互,不实际发生网络解析请求。如果缓存中存在记录,不论过期与否,直接返回业务层缓存中的记录;
- 如果缓存中的记录已过期,后台发起异步网络请求进行HTTPDNS解析;
原文链接:https://www.cnblogs.com/liangshuang/p/8990275.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/16312