DNS与HTTP DNS

今天我们来总结一下客户端是如何找到机房入口 IP,并与后台服务建立连接的

核心主线

整体链路可以概括为:

1
2
3
4
5
6
7
8
9
用户输入/客户端访问域名

DNS / HTTP DNS 解析域名

获得机房入口公网 IP

客户端通过 IP 访问机房入口

后续进入 LVS、Nginx、业务服务等后台链路

其中:

  • DNS 是传统、通用的域名解析体系。
  • HTTP DNS 是为了解决传统 DNS 在延迟、劫持、调度精准度、变更生效速度等方面的问题而引入的增强方案。

1.2 DNS:客户端连接机房的基础技术

1. DNS 的意义

互联网通信的基础是 IP 地址。客户端要访问机房,就必须知道机房的公网 IP。

但 IP 地址是一串数字,不方便记忆,也不方便在后台 IP 变更时对用户保持透明,因此引入了域名。

DNS(Domain Name System,域名系统) 的作用是:

维护域名与 IP 地址之间的映射关系,并提供把域名翻译为 IP 地址的能力。

DNS 给互联网应用带来的价值主要有:

  • 降低用户记忆成本:用户只需要记住域名,而不需要记住 IP 地址。
  • 屏蔽机房 IP 变更:公司更换公网 IP 时,只需修改 DNS 配置,用户无感知。
  • 支持简单负载均衡:同一个域名可以映射到多个 IP,把不同用户解析到不同入口。
  • 支持故障摘除:如果某个 IP 对应的入口不可用,DNS 可以将其从解析结果中移除。

2. 域名结构

域名采用层次化树形结构,从右向左层级逐渐变细。

mail.google.com 为例:

1
2
3
4

└── .com 顶级域名
└── google.com 二级域名
└── mail.google.com 三级域名

常见层级:

  • 根域名:域名体系的顶端。
  • 顶级域名:如 .com.net.cn.us
  • 二级域名:如 google.comapple.com
  • 三级域名及更多级别:如 mail.google.comwww.baidu.com

重点理解:每一级域名负责控制下一级域名的分配和解析入口。


3. 域名服务器类型

DNS 系统中的域名服务器主要分为 4 类。

类型 作用 重点
根域名服务器 负责顶级域名服务器地址的查找 DNS 体系顶层入口
顶级域名服务器 负责某个顶级域名下二级域名的查找 .com.cn 对应服务器
权威域名服务器 真正决定某个域名最终解析成哪个 IP 大公司常自建,中小公司常托管
本地域名服务器 客户端最先请求的 DNS 代理与缓存 通常由运营商提供

其中最关键的两个角色:

  • 权威 DNS 服务器:最终决定域名解析结果。
  • 本地 DNS 服务器:客户端的 DNS 查询代理,会缓存解析结果,加速后续查询。

4. DNS 域名解析过程

传统 DNS 解析通常采用递归查询。

以访问 www.baidu.com 为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
客户端
↓ 查询本地缓存
浏览器缓存 / Hosts / 系统 DNS 缓存
↓ 未命中
本地域名服务器
↓ 查询
根域名服务器
↓ 返回 .com 顶级域名服务器地址
.com 顶级域名服务器
↓ 返回 baidu.com 权威域名服务器地址
baidu.com 权威域名服务器
↓ 返回 www.baidu.com 对应 IP
本地域名服务器
↓ 缓存并返回
客户端获得 IP 地址

关键点:

  1. 客户端会先查本地缓存,例如浏览器缓存、系统缓存、Hosts 文件。
  2. 未命中后,请求本地域名服务器。
  3. 本地域名服务器作为代理,依次查询根 DNS、顶级 DNS、权威 DNS。
  4. 权威 DNS 返回最终 IP。
  5. 本地 DNS 缓存解析记录,再返回给客户端。

5. DNS 解析记录中的重要字段

DNS 解析结果会被缓存,常见字段包括:

字段 含义
Domain 域名
TTL 生存周期,表示缓存多久
Class 协议类型,通常为 IN,表示 Internet
Type 记录类型,如 A 表示 IPv4,AAAA 表示 IPv6
Rdata 记录数据,即域名对应的 IP 地址

其中 TTL 很重要:

  • TTL 越长,缓存命中率越高,解析压力越小。
  • TTL 越长,IP 变更生效越慢。
  • TTL 越短,变更更快,但 DNS 查询压力更大。

1.3 HTTP DNS:对传统 DNS 的增强

1. 传统 DNS 存在的问题

虽然 DNS 是互联网基础设施,但在大型互联网应用中,它有明显不足。

问题一:解析延迟较高

传统 DNS 可能经历多级递归查询:

1
本地缓存 → 本地 DNS → 根 DNS → 顶级 DNS → 权威 DNS

理想情况下解析只需几毫秒到几十毫秒,但实际场景中可能超过 1 秒,影响用户访问体验。

问题二:调度不够精准

权威 DNS 看到的通常是本地 DNS 服务器的 IP,而不一定是真实客户端 IP。

这会导致:

  • 权威 DNS 判断用户地理位置不准;
  • 用户可能被解析到距离较远的机房入口;
  • 不同运营商之间可能出现错误调度;
  • 运营商做“域名转发”时,用户可能拿到不符合自身运营商网络的 IP。

最终表现为:用户访问路径变长,请求延迟升高。

问题三:DNS 劫持

DNS 劫持是指域名解析结果被篡改,导致用户访问错误 IP。

可能来源:

  • 运营商在本地 DNS 层面劫持;
  • 黑客篡改用户机器的 Hosts 文件;
  • 恶意网络环境返回错误解析结果。

影响包括:

  • 用户无法访问目标网站;
  • 用户被引导到广告页面;
  • 用户被引导到钓鱼网站;
  • 企业业务流量受损。

2. HTTP DNS 的原理

HTTP DNS 的核心思想是:

不再通过传统 DNS 协议访问本地 DNS 服务器,而是客户端直接用 HTTP 请求访问指定的 HTTP DNS 服务器 IP,由 HTTP DNS 服务返回域名对应的最优 IP。

示例流程:

1
2
3
4
5
6
7
8
9
客户端
↓ HTTP 请求固定 IP
HTTP DNS 服务器,例如 http://5.5.5.5/d?dn=go.friendy.com&ip=客户端IP
↓ 查询权威 DNS / 调度系统
返回最优入口 IP

客户端直接访问该 IP

HTTP Header 中携带 Host: go.friendy.com

注意:HTTP DNS 服务本身一般不通过域名提供服务,而是通过固定 IP 提供服务。否则访问 HTTP DNS 前仍然需要 DNS 解析,就失去了意义。


3. HTTP DNS 的优势

优势 说明
降低解析延迟 客户端直接访问 HTTP DNS,缩短传统 DNS 递归链路
防止 DNS 劫持 绕过运营商本地 DNS,降低解析结果被篡改的风险
调度更精准 HTTP DNS 能拿到真实客户端 IP,更容易做就近接入和运营商匹配
变更生效更快 不受传统 DNS 多级缓存影响,入口 IP 变更能更快覆盖客户端
可结合业务策略 客户端 SDK 可以按连通性、延迟、失败率等策略选择 IP

HTTP DNS 本质上并不神秘:它只是把域名解析从 DNS 协议迁移到 HTTP 服务接口上,同时把解析权和调度权更多地收回到业务方可控的系统中。


4. HTTP DNS 实践中的容灾设计

HTTP DNS 有优势,但不能完全替代 DNS。因为域名解析是客户端访问后台的第一步,一旦失败,用户就会被挡在机房之外。

因此,客户端网络 SDK 应该设计多级兜底策略:

1
2
3
4
5
优先使用 HTTP DNS
↓ 失败
降级使用传统 DNS
↓ 失败
使用预留兜底 IP

具体流程:

  1. 客户端优先使用 HTTP DNS 解析域名。
  2. 如果 HTTP DNS 返回空数据或网络错误,则降级到本地 DNS。
  3. 如果传统 DNS 也失败,则使用客户端内置或服务端下发的兜底 IP。

这种设计的目标是:

  • 优先保证解析质量;
  • 其次保证解析可用;
  • 最后保证用户至少能进入后台入口。

5. HTTP DNS 的补充策略

实践中还可以进一步优化:

安全策略

HTTP DNS 可以使用 HTTPS,避免解析请求和响应被中间人篡改。

多 IP 下发策略

HTTP DNS 服务可以一次返回多个候选 IP,并按优先级排序。

客户端可以:

  1. 默认使用第一个 IP;
  2. 如果连通性差或访问失败,切换到下一个 IP;
  3. 根据延迟、失败率等指标做动态选择。

这样可以进一步提升客户端接入成功率和访问体验。


DNS 与 HTTP DNS 对比

对比项 DNS HTTP DNS
协议 DNS 协议 HTTP / HTTPS
客户端访问对象 本地域名服务器 固定 IP 的 HTTP DNS 服务
是否依赖运营商本地 DNS 否,通常绕过
解析链路 多级递归查询 直接请求解析服务
劫持风险 较高 较低
调度精准度 可能只能看到本地 DNS IP 可以看到真实客户端 IP
变更生效速度 受多级缓存和 TTL 影响 更可控、更快
通用性 浏览器和系统天然支持 通常需要客户端 SDK 支持
最佳实践 作为基础兜底能力 作为 App / SDK 的优先解析能力

最重要的架构思想

  1. 客户端进入机房的第一步是域名解析:没有正确、快速的解析结果,后面的 LVS、Nginx、业务服务都无法发挥作用。
  2. DNS 解决了 IP 不可读、IP 变更不透明、简单负载均衡等基础问题
  3. 传统 DNS 的主要问题是延迟、劫持、调度不精准、变更不够快
  4. HTTP DNS 的核心价值是绕过本地 DNS,把解析过程变成业务方可控的 HTTP 服务调用
  5. HTTP DNS 不能单独作为唯一方案:客户端必须设计 DNS 降级和兜底 IP,保证接入链路高可用。
  6. 大型互联网接入设计的关键不是单点技术,而是多级容灾链路:HTTP DNS 优先,传统 DNS 兜底,预置 IP 保底。

一句话总结

DNS 负责把用户可记忆的域名解析为机房入口 IP,是客户端连接后台的第一步;但传统 DNS 存在解析延迟、劫持、调度不精准和变更生效慢等问题,因此大型互联网应用常引入 HTTP DNS,通过客户端直接请求可控的解析服务来获得更精准、更安全、更快速的入口 IP,同时配合传统 DNS 和兜底 IP 构建高可用的接入解析链路。

© 2026 DadaVinCi's Blog

Elegant theme by Shiro · Made by Acris with ❤️