HTTPDNS解析

简介

HTTPDNS使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTPDNS服务器,从而绕过运营商的Local DNS,能够避免Local DNS造成的域名劫持问题和调度不精准问题。 HTTPDNS是面向移动开发者推出的一款域名解析产品,具有域名防劫持、精准调度等特性。开通HTTPDNS服务后,您就可以在管理控制台添加要解析的域名,调用服务API进行域名解析。HTTPDNS是一款递归DNS服务,与权威DNS不同,HTTPDNS并不具备决定解析结果的能力,而是主要负责解析过程的实现。

众所周知,发送HTTP请求后,会通过DNS解析,找到服务器后再响应请求。不过,传统的DNS系统存在很多问题,最常见的就是DNS劫持、平均访问延迟较高、用户连接失败率较高这三个问题。其中最重要的是DNS劫持,因为DNS解析是交给运营商来做的,所以解析结果被运营商劫持插入广告,解析结果不按 TTL 缓存,解析被错误递归(跨地区甚至跨运营商)等问题导致我们不得不去寻找一种可以绕开运营商的办法来做【域名->IP】的映射方式,那就是HttpDNS。

HttpDNS是通过ip直接请求http获取服务器A记录地址,不存在向本地运营商询问domain解析过程,所以从根本避免了劫持问题。同时由于是ip直接访问省掉了一次domain解析过程,可以在一定程度上降低平均访问延迟。HttpDNS和LocalDNS最大的区别在与:前者使用HTTP协议进行域名解析;后者协议运行在UDP协议之上,使用端口号53。

DNS

什么是DNS

网络通讯大部分是基于TCP/IP协议的,而TCP/IP是基于IP寻址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名,而其中的转换工作就需要借助DNS域名解析服务。简单来说,DNS就是提供将主机名和域名转换为IP地址的工作,工作原理如下图。

DNS工作流程

事实上,DNS是一个应用层协议,他为其他应用层协议提供解析工作,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。具体的工作过程如下: ①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了; ②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如http://www.baidu.com/, 并将这个主机名传送给DNS应用的客户端; ③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作); ④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址; ⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接。

DNS体系架构

可以发现,当应用程序发送网络请求时,会调用DNS的客户机端,并指明需要被转换的主机名。当用户主机的DNS客户端接收到请求后,会向网络中发送一个DNS查询报文。所有DNS请求和回答报文使用的UDP数据报经过端口53发送,经过若干ms到若干s的延时后,用户主机上的DNS客户端接收到一个提供所希望映射的DNS回答报文。因此,从用户主机上调用应用程序的角度看,DNS是一个提供简单、直接的转换服务的黑盒子。但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。并且,全球的根域名服务器只有13个,为什么是13个,而不是更多,请看为何根域名服务器只有13个?

DNS的一种简单的设计模式就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射,在这种集中式的设计中,客户机直接将所有查询请求发往单一的DNS服务器,同时该DNS服务器直接对所有查询客户机做出响应,尽管这种设计方式非常诱人,但他不适用当前的互联网,因为当今的因特网有着数量巨大并且在持续增长的主机,这种集中式设计会有单点故障(嗝屁一个,全球着急),通信容量(上亿台主机发送的查询DNS报文请求,包括但不限于所有的HTTP请求,电子邮件报文服务器,TCP长连接服务),远距离的时间延迟(澳大利亚到纽约的举例),维护开销大(因为所有的主机名-ip映射都要在一个服务站点更新)等问题。

DNS服务器一般分三种,根DNS服务器,顶级DNS服务器,权威DNS服务器,架构图如下。

- 根DNS服务器:返回顶级域DNS服务器的IP地址 - 顶级域DNS服务器:返回权威DNS服务器的IP地址 - 权威DNS服务器:返回相应主机的IP地址

假设全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区。对象存储通过跨可用区部署,实现高可用性。在每个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器。

在上面的DNS架构体系中,其工作的流程大体如下:

  1. 当一个客户端要访问http://object.yourcompany.com时,需要将域名转为ip,所以请求本地DNS解析器。
  2. 本地DNS解析器查看是否有本地缓存这个记录,如果有则直接使用
  3. 如果没有,请求本地的DNS服务器。
  4. 本地的DNS服务器一般部署在你的数据中心或所在运营商的网络中,本地DNS服务器需要查看本地是否有缓存,如果有则返回。
  5. 若无,本地DNS需要递归的从根DNS服务器,查到顶级域名服务器,最终查到权威DNS服务器,返回给本地DNS服务器。

DNS缺点

不过,正如文章开头说的,传统的DNS存在很多缺点: 域名缓存问题:本地做一个缓存,直接返回缓存数据。可能会导致全局负载均衡失败,因为上次进行的缓存,不一定是这次离客户最近的地方,可能会绕远路。 域名转发问题:如果是A运营商将解析的请求转发给B运营商,B去权威DNS服务器查询的话,权威服务器会认为你是B运营商的,就返回了B运营商的网站地址,结果每次都会夸运营商。 出口NAT问题:做了网络地址转化后,权威的DNS服务器,没法通过地址来判断客户到底是哪个运营商,极有可能误判运营商,导致跨运营商访问。 域名更新问题:本地DNS服务器是由不同地区,不同运营商独立部署的,对域名解析缓存的处理上,有区别,有的会偷懒忽略解析结果TTL的时间限制,导致服务器没有更新新的ip而是指向旧的ip。 解析延迟:DNS的查询过程需要递归遍历多个DNS服务器,才能获得最终结果。可能会带来一定的延时。

HTTPDNS

简介

HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。

正是由于传统的DNS存在诸多的缺点,所以现在稍微有点规模的公司都会自己搭建HTTPDNS服务器。HTTPDNS 的原理很简单,将 DNS 这种容易被劫持的协议,转为使用 HTTP 协议请求 Domain <-> IP 映射。 获得正确 IP 之后,Client 自己组装 HTTP 协议,从而避免 ISP 篡改数据。它的架构图也比较简单,如下图所示。

解决的问题

使用HttpDns,可以有效解决传统DNS的DNS劫持、访问时间延迟等问题。 - Local DNS 劫持:由于 HttpDns 是通过 IP 直接请求 HTTP 获取服务器 A 记录地址,不存在向本地运营商询问 domain 解析过程,所以从根本避免了劫持问题。 - 平均访问延迟下降:由于是 IP 直接访问省掉了一次 domain 解析过程,通过智能算法排序后找到最快节点进行访问。 - 用户连接失败率下降:通过算法降低以往失败率过高的服务器排序,通过时间近期访问过的数据提高服务器排序,通过历史访问成功记录提高服务器排序。

HTTPDNS改造

关于HTTPDNS改造的文章和方案也很多,如下: 【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解 沪江从DNS到httpdns的演进

除了自己搭建外,也可以直接使用第三方服务,国内有一部分厂商已经提供了这种解析服务,如阿里云HttpDNS。 阿里云的 HttpDNS 服务的 API 比较标准,直接发一个 Get 请求,带上请求参数,返回结果以 json 返回,如下所示。

http://203.107.1.1/d?host=www.linkedkeeper.com

请求成功时,返回结果如下所示。

{
  "host": "www.linkedkeeper.com",
  "ips": [
    "115.238.23.241",
    "115.238.23.251"
  ],
  "ttl": 57
}

在移动端,将由 HttpDns 获得的 IP 地址在原有 URL 的基础上,将域名替换为 IP,然后用新的 URL 发起 HTTP 请求即可。

文章来源:HTTPDNS解析 - 知乎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: HttpDNS与传统DNS之间存在一些区别。首先,HttpDNS的服务器地址一般是固定的,可以通过DNS方式获取其IP地址,或者将其IP地址写死在客户端中。而传统DNS的服务器地址是通过域名解析得到的。其次,HttpDNS可以绕过域名缓存问题,提供更快的解析速度。传统DNS存在域名缓存问题,可能导致解析结果不及时或不准确。此外,HttpDNS可以避免域名劫持问题,而传统DNS可能存在本地运营商对某些域名进行劫持或屏蔽的情况。因此,HttpDNS相对于传统DNS在解析速度和可靠性方面有一些优势。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [HttpDNS和传统DNS的区别](https://blog.csdn.net/idaretobe/article/details/128637448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Dns与httpDNS的区别](https://blog.csdn.net/apple_51931783/article/details/128410769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值