DNS:域名解析与地址管理

DNS 递归查询与迭代查询

  • 递归查询:客户端要求 DNS 服务器给出最终答案。
  • 迭代查询:服务器告诉查询方下一步应询问谁。

通常客户端向本地 DNS 发起递归查询,本地 DNS 再通过迭代查询联系根、顶级域和权威 DNS。

DNS 记录

记录作用
A域名指向 IPv4 地址
AAAA域名指向 IPv6 地址
CNAME域名指向另一个域名
NS指定权威 DNS 服务器
TXT存储文本验证信息

DNS 缓存由 TTL 控制。TTL 太短会增加查询压力,太长会使故障切换和发布生效变慢。

DNS 与 IP 地址的对应关系

DNS 的核心作用,是把便于人类记忆的域名解析成网络通信使用的 IP 地址:

https://www.example.com/path
                 └─ DNS 查询 www.example.com
                         ├─ A    → 93.184.216.34
                         └─ AAAA → 2606:2800:220:1:248:1893:25c8:1946

浏览器访问网站时,URL 中的域名会先经过 DNS 解析得到 IPv4 或 IPv6 地址,然后客户端才能使用这个地址建立 TCP/TLS 连接并发送 HTTP 请求。DNS 只负责“名称到地址”的解析,不负责传输 HTTP 数据。

常见对应关系

  • 一个域名可以对应多个 IP:例如通过 DNS 轮询、CDN 或多地域部署返回多个地址,用于负载均衡、就近接入和故障切换。
  • 多个域名可以对应同一个 IP:多个站点可以部署在同一台服务器、负载均衡器或 CDN 节点上,服务器再根据请求中的 Host 或 SNI 区分具体站点。
  • 域名也可以先对应另一个域名CNAME 不直接保存 IP,而是指向另一个域名,解析器继续查询目标域名的 AAAAA 记录。
  • 域名不一定永久对应同一个 IP:DNS 记录可以随着 CDN 调度、扩容、迁移或故障切换发生变化,客户端和 DNS 服务器会按照 TTL 缓存解析结果。

因此,DNS 与 IP 不是“一对一且永久不变”的关系,而是由 DNS 记录描述的可缓存映射关系:

域名 ──A/AAAA──> 一个或多个 IP
域名 ──CNAME───> 另一个域名 ──A/AAAA──> 一个或多个 IP

域名解析与 TCP 连接的关系

以访问 https://api.example.com 为例:

  1. 浏览器从 URL 中提取主机名 api.example.com
  2. 先查询浏览器、操作系统和 DNS 服务的缓存。
  3. 如果没有可用缓存,通过 DNS 获取 AAAAA 记录。
  4. 选择一个可用 IP 地址,使用目标 IP 和端口建立 TCP 连接。
  5. 如果是 HTTPS,再在连接上进行 TLS 握手,最后发送 HTTP 请求。

这里要注意:TCP 连接使用的是 IP 地址 + 端口,不是域名;但 HTTP 请求的 Host,以及 HTTPS 握手中的 SNI,仍然会携带域名信息,用于在同一 IP 上选择正确的站点和证书。

高频追问

  • DNS 劫持和污染有什么区别?
  • CDN 如何通过 DNS 把用户调度到就近节点?
  • DNS 缓存和浏览器 HTTP 缓存有什么区别?