前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTPDNS 解析

HTTPDNS 解析

作者头像
xiangzhihong
发布2022-11-30 15:35:12
2.6K0
发布2022-11-30 15:35:12
举报
文章被收录于专栏:向治洪

简介

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. 当一个客户端要访问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 服务的 API 比较标准,直接发一个 Get 请求,带上请求参数,返回结果以 json 返回,如下所示。

代码语言:javascript
复制
http://203.107.1.1/d?host=www.linkedkeeper.com

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

代码语言:javascript
复制
{
  "host": "www.linkedkeeper.com",
  "ips": [
    "115.238.23.241",
    "115.238.23.251"
  ],
  "ttl": 57
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • DNS
    • 什么是DNS
      • DNS工作流程
        • DNS体系架构
          • DNS缺点
          • HTTPDNS
            • 简介
              • 解决的问题
                • HTTPDNS改造
                相关产品与服务
                移动解析 HTTPDNS
                移动解析 HTTPDNS 基于 HTTP 协议向腾讯云的 DNS 服务器发送域名解析请求,替代了基于 DNS 协议向运营商 Local DNS 发起解析请求的传统方式,可以避免 Local DNS 造成的域名劫持和跨网访问问题,解决移动互联网服务中域名解析异常带来的困扰。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档