Skip to content

DNS 基础知识

域名层级

  • 根域名
    例:www.baidu.com.

  • 顶级域名

    • 通用顶级域名:.com.net.edu.org
    • 国家顶级域名:.cn.jp
    • 新顶级域名:.xyz.top.red
  • 二级域名

    • 例:baidu.comjd.com
    • 国家顶级域名下的二级域名:com.cngov.cn
  • 三级域名

    • 例:www.baidu.com
    • 例:sina.com.cn(一级域名 cn,二级域名 com.cn

DNS 查询流程

1. 递归查询

  • 查询顺序:

    1. 浏览器缓存
    2. 操作系统缓存(如 hosts 文件)
    3. 本地 DNS 解析器缓存
    4. 本地 DNS 服务器配置区域资源
    5. 本地 DNS 服务器缓存(非权威)
  • 本地 DNS 无解时:

    1. 向 13 台根域名服务器之一发送请求
    2. 根服务器返回对应顶级服务器地址(如 .com)
    3. 本地 DNS 访问顶级服务器,获得权威域名服务器地址(如 baidu.com 的权威服务器)
    4. 本地 DNS 向权威服务器请求,获取目标域名的 A 记录或 CNAME 记录
    5. 缓存结果并返回客户端,设置 TTL
  • DNS 记录类型:

    • A 记录:域名 → IPv4 地址
      • 如:www.foo.com111.111.111.111
    • CNAME 记录:域名 → 另一目标域名,最终由目标域名的 A 记录解析 IP
      • 如:www.foo1.comwww.foo2.comwww.foo3.com 都指向 www.foo.com,更换服务器 IP 时,仅需修改 CNAME 所指的目标域名(即 www.foo.com)的 A 记录即可,便于维护
    • NS 记录:子域名指向其他 DNS 服务器
    • MX 记录:域名指向邮件服务器

2. 迭代查询

  • 若开启转发模式,本地 DNS 把请求转发至上游 DNS(称为转发器),由上游 DNS 继续递归查询,最后结果返回给本地 DNS,再返回给客户端。

DNS预解析

原理:提前将 DNS 解析结果缓存到系统缓存中,加快访问速度

现代浏览器会对 a 标签的 href 连接自动预解析,但 HTTPS 不会自动预解析

html
<!-- 对单个域名预解析 -->
<link rel="dns-prefetch" href="//www.baidu.com"> 

<!-- 开启自动预解析 -->
<meta http-equiv="x-dns-prefetch-control" content="on">
<!-- 关闭自动预解析 -->
<meta http-equiv="x-dns-prefetch-control" content="off">

DNS 协议

  • DNS 查询:默认使用 UDP 协议(快,只需请求/应答即可)
  • 区域传输:用于主/辅 DNS 服务器间数据同步,使用 TCP 协议(大数据量,需可靠传输)
  • 特殊情况
    • DNS 响应内容超过 512 字节,自动切换至 TCP
    • 随着 EDNS 的引入,UDP 支持更大数据包(最多 4096 字节),但依然可靠性有限
    • 现代规范要求 DNS 查询同时支持 UDP 和 TCP

为什么 DNS 要分级递归解析?

  • 分级管理:每级域名由上一级管理机构管理,保证全网唯一性和高效分布式管理
  • 逐级查找:通过逐级缩小范围,优化查询性能,降低根服务器压力