DNS协议解析
文章目录
1. 本文概览
本文不是为了讲解DNS域名解析相关概念,因此要求读者需要对DNS有相关的基本了解,最好对DNS相关概念有一定的认识。本文侧重分析DNS域名解析存在的问题,然后引出HttpDNS域名解析,并进行分析。
2. DNS解析存在的问题
2.1 DNS劫持
DNS劫持就是通过劫持DNS服务器,通过某些手段取得域名的解析记录控制权,进而修改域名的解析结果,导致对该域名的访问由原IP地址传入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。
例如:当我们向外部发出请求解析 DNS 的时候,首先会先连接到本地运营商的 DNS 服务器(如电信/联通/移动),由他们的 DNS 服务器帮我们去根和顶级 DNS 服务器解析,然后将解析的结果返回给客户端。但如果这些本地运营商在其 DNS 服务器上有一些自己的想法,比如想推送个广告呢?这样他就可以轻易的劫持你的 DNS请求,达到自己的一些“小需求”,这就是我们常说的运营商劫持。
对于DNS劫持,我们可以用一些方法来避免DNS劫持。首先,从上述DNS劫持的原理来看,我们可以明显得出DNS在解析域名的时候,经过本地DNS服务器的时候才出现DNS劫持的情况,如果我们在绕过这一层的时候,也就在一定程度上避免了DNS劫持,比如直接通过IP地址进行访问,或者在浏览器DNS缓存里输入正确的ip地址,这样在解析的时候直接在浏览器缓存里找到了该域名的ip地址,就不会在去走本地DNS服务器的流程了。相关方法有很多,本质上就是为了绕过发生DNS劫持的那一阶段。然而,接下来我将会介绍HttPDNS域名解析的相关原理,它在本质上就可以解决DNS劫持。
3. HttpDNS
3.1 概念
HttpDNS是使用HTTP协议向DNS服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求。也就是使用Http协议去进行dns解析请求,将服务器返回的解析结果(域名对应的服务器IP),直接向该IP发起对应的API服务请求,代替使用域名。
3.2 防止域名劫持
由于 HttpDNS 是通过 IP 直接请求 HTTP 获取服务器 A 记录地址,不存在向本地运营商询问 domain 解析过程,所以从根本避免了劫持问题。
3.3 精准调度提高响应
HttpDNS能够直接获取到用户的IP地址,从而实现精确定位与导流。由于是IP直接访问省掉了一次Domain解析过程,(即使系统有缓存速度也会稍快一些“毫秒级”)通过智能算法排序后找到最快节点进行访问。
3.4 用户连接失败率下降
通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。如果ip(a)访问错误,在下一次返回ip(b)或者ip© 排序后的记录。(LocalDNS很可能在一个ttl时间内(或多个ttl)都是返回记录)。
3.5 HttpDNS优势
从原理上来讲,HttpDNS只是将域名解析的协议由DNS协议换成了Http协议,并不复杂。但是这一微小的转换,却带来了无数的收益:
-
根治域名解析异常:由于绕过了运营商的LocalDNS,用户解析域名的请求通过Http协议直接透传到了HttpDNS服务器IP上,用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰。
-
调度精准:HttpDNS能直接获取到用户IP,可以保证将用户引导的访问最快的IDC节点上。
-
实现成本低廉:接入HttpDNS的业务仅需要对客户端接入层做少量改造,无需用户手机进行root或越狱;而且由于Http协议请求构造非常简单,兼容各版本的移动操作系统更不成问题;另外HttpDNS的后端配置完全复用现有权威DNS配置,管理成本也非常低。总而言之,就是以最小的改造成本,解决了业务遭受域名解析异常的问题,并满足业务精确流量调度的需求。
-
扩展性强:HttpDNS提供可靠的域名解析服务,业务可将自有调度逻辑与HttpDNS返回结果结合,实现更精细化的流量调度。比如指定版本的客户端连接请求的IP地址,指定网络类型的用户连接指定的IP地址等。
4. 总结
众所周知,DNS域名解析就是为了将我们人为好记的文字变为机器熟知的IP地址,看似只是一个映射的过程,其中是十分复杂的。由于全球无数人每天都在使用网络,每一次域名解析的时候都有可能要经过DNS服务器,这就要求DNS服务器必须是一个高可用、高并发、分布式的架构。