前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库DNS A记录 CNAME 区别 根域名
计算计算机网络DNS 与 TLS

DNS 中 A 记录和 CNAME 记录有什么区别,为什么根域名通常不能直接使用 CNAME?

A记录将域名直接映射到IPv4地址,CNAME则把域名别名指向另一个域名,由后者继续解析。根域名不能使用CNAME,因为它必须包含NS等关键记录,而CNAME会禁止同节点其它记录存在。

前端进阶之旅 · 一题精讲更新于 2026.09.05
计算机网络#DNS 与 TLS#网络协议
先看核心答案
理解线索

A记录与CNAME的本质区别

  1. A记录将主机名映射到一个IPv4地址
  2. CNAME记录将主机名指向另一个规范域名
  3. 共存限制CNAME节点不能再有其它记录(如A、MX、TXT)

同一DNS名称只能选择其中一种定位方式,不能混用。

核心回答

先记住这个答案

A记录把主机名解析为IPv4地址,CNAME将主机名指向另一个规范名称,解析器跟随该目标继续查询。但CNAME记录与其它数据记录不能共存于同一节点,且不允许有子节点;根域名必须包含NS、SOA等管理记录,若引入CNAME则违背RFC 1034规则,导致基础解析功能破坏,因此根域不能设为CNAME。

  • A记录是地址映射,直接给出IPv4。
  • CNAME是别名跳转,需要目标继续解析。
  • CNAME禁止与其它记录共存,根域因此受限。

A与CNAME在解析机制上的差异

A记录是终结点记录,它直接把一个DNS名称与IPv4地址绑定。比如 api.example.com 用A记录指向 203.0.113.10,递归解析器查询该名称时,返回的就是这个地址,整个过程没有二次查询。

CNAME记录是别名记录,它把一个名称标记为另一个名称的别名。例如 www.example.com 是 cdn.example.net 的CNAME,递归解析器先获得目标名 cdn.example.net,然后需要对该目标名再发起一次独立的查询,继续解析以找到最终的IP。由于CNAME的本质是跳转,链中每一跳都必须解析成功,并且总跳数通常由递归服务器限制(具体数值因实现而异),以防死循环。

协议层面的关键约束是:如果DNS节点上存在CNAME,那么该节点就不能有其它记录,比如A、MX、TXT。RFC 1034规定,当查询名称匹配到CNAME且查询类型不是CNAME时,服务器应返回CNAME记录,客户端需继续向目标名称查询以获取所需类型记录(递归解析器可自动跟随)。这一约束使得CNAME只适合用在完整主机别名上,不适合挂在需要多种记录类型的根区域或命名空间节点上。

迁移主机时如何选A还是CNAME

假设你用 blog.example.com 发布博客,托管在 webhost1.example.net,IP是 192.0.2.1。某次运维中你需要把站点切换到另一服务商的 webhost2.example.net(其IP为 198.51.100.1)。如果最初使用的是A记录,你必须同时修改 blog.example.com 的A记录为新IP,并可能在服务商侧进行内容迁移配置;而使用CNAME,只需把 blog.example.com 的CNAME指向 service.example.net,由托管商统一调整该名称的解析,用户端的DNS天然跟随变化,TTL传播后无需改动自有域。

然而CNAME的使用有限制:当 blog.example.com 还需要同时提供MX邮箱服务或TXT验证记录时,直接设CNAME就会与MX、SPF等记录冲突,导致邮件路由失效。这种情况下要么改用A记录,要么把不同服务分配到不同子域,如 www.example.com 作为站点CNAME,邮件用 mail.example.com 的A和MX。实际决策时应先列出该名称需要的所有记录类型,凡有其它业务需求,优先选A。

根域名为什么不能使用CNAME

根域名(如 example.com)是DNS区域中的顶点,它携带区域权威性所需的记录:至少要有NS记录(区域权威服务器列表)和SOA记录(区域管理参数)。若把 example.com 设为CNAME,根据前述的共存规则,NS、SOA甚至MX都不得与其同存,于是权威服务器将无法宣告自己是该区域的来源,整个域的解析都会失效。

即使只把根域CNAME到其它域名,递归解析器也会遇到矛盾:查询 example.com 的NS时发现它对CNAME,指向 target.net,但区域数据中 example.com 又必须是权威起点,无法委派给 target.net。RFC 1912等实践文档也明确根域不允许CNAME。变通做法是让根域自身返回WEB服务器的IP(A记录),并让 www.example.com 作为CNAME;若需要完全跟随内容域变化,可使用HTTP 301跳转或使用DNS服务的ALIAS/ANAME非标准功能(但这是私有实现的工程取舍)。

回答前,多想一步

容易答错的地方

认为CNAME解析速度慢于A记录
实际上两者都能被递归服务器缓存;CNAME额外暴露的目标名通常也会在单个查询响应中附带,若配合合适TTL差别很小,慢源于跳数多和目标不在同一区域时的额外解析轮次,并非CNAME本身。
根域不能CNAME只是CDN限制
这是常见的误解。根域不能CNAME的根本是DNS协议中CNAME不得与NS、SOA等共存,而并非CDN或服务商不提供。CDN厂商的ALIAS/ANAME记录就是为规避这一限制实现同类效果。
试着用自己的话回答

面试官还会怎么问?

CNAME 链最多能有多长?

递归解析器通常会设置CNAME链的最大跳数以防止无限循环,但具体上限没有统一标准,通常由实现决定(如BIND等常见软件有可配置参数),超过限制则返回错误。每跳都增加一次潜在的查询开销。

CNAME 和 HTTPS 记录(SVCB/HTTPS)之间的关系是什么?

HTTPS记录(类型65)可指示客户端使用特定端口或ALPN等参数,但不能被用作CNAME。CNAME若指向目标后,客户端通常会解析目标的HTTPS记录;部分场景下可用HTTPS记录做并行解析优化,但两者数据结构不同,不可替换。

WWW 子域名用 CNAME 时,对外发起的网络连接由谁完成?

由CNAME最终目标对应的IP地址负责。客户端的连接请求发往目标记录解析出的IP,而不是别名域名自身,因此源站、证书域名校验都以最终域名为准。

从一道题,走向一组知识

把知识连起来

DNS 与 TLS

DNS 域名解析的完整过程是怎样的,递归查询和迭代查询有什么区别?

同属「DNS 与 TLS」专题,接着看 DNS 解析过程 递归 迭代 在具体场景中的处理方式。

DNS 与 TLS

修改 DNS 记录后为什么不会立即全球生效,如何缩短切换时间?

同属「DNS 与 TLS」专题,接着看 DNS 生效时间 传播 缓存 在具体场景中的处理方式。

参考资料

  • DNS

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. A与CNAME在解析机制上的差异
  3. 迁移主机时如何选A还是CNAME
  4. 根域名为什么不能使用CNAME
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑