A 记录和 CNAME 记录有什么区别?
简化版
A 记录把域名直接指向一个 IP 地址(终点);CNAME 把域名指向另一个域名(别名,还要再解析一次那个域名才拿到 IP)。区别就一点:A 记录指 IP、CNAME 指域名。CNAME 的好处是解耦——目标 IP 变了只改一处;缺点是多一次解析、且不能配在根域名上。
详细版
| 维度 | A 记录 | CNAME 记录 |
|---|---|---|
| 指向 | IP 地址(IPv4) | 另一个域名(别名) |
| 解析次数 | 一次到位拿到 IP | 要再查目标域名的 A 记录 |
| 根域名(apex) | 可以配 | 不能配(标准限制) |
| 与其他记录共存 | 可以 | 不能(同名下不能有别的记录) |
| 典型场景 | 域名直接绑 IP | CDN 接入、多域名指向同一目标 |
# A 记录:直接到 IP
example.com. A 93.184.216.34
# CNAME:www 是 example.com 的别名,解析 www 会再去查 example.com 的 A
www.example.com. CNAME example.com.
完整版教学
一、本质区别:终点 vs 中转
- A 记录是「终点」:域名 → IP,解析一步到位。
- CNAME 是「中转/别名」:域名 → 另一个域名,解析器拿到 CNAME 后,还要继续解析目标域名,直到遇到 A 记录才拿到最终 IP。
所以访问一个配了 CNAME 的域名,实际发生了「链式解析」:www.example.com →(CNAME)→ example.com →(A)→ IP。这多了一跳,但换来了灵活性。
二、CNAME 的核心价值:一处修改,处处生效
CNAME 最大的用处是解耦域名和 IP。设想你有 www、img、api 好几个域名都指向同一台服务器:
- 全用 A 记录:每个域名都写死 IP。将来服务器换 IP,你得逐个改所有 A 记录。
- 用 CNAME 指到一个主域名:www/img/api 都 CNAME 到
example.com,只有example.com配 A 记录。换 IP 时只改这一条 A 记录,其他自动跟着变。
这就是「一处修改、处处生效」。CDN 接入正是这个逻辑的典型应用——CDN 让你把域名 CNAME 到它提供的域名(如 xxx.cdn.com),之后 CDN 在它那一侧动态调度到最近的边缘节点,你完全不用管(详见「CDN 工作原理」那道题)。
三、CNAME 的两个硬限制
① 不能配在根域名(zone apex)上。 根域名(如 example.com 本身)通常必须有 SOA 和 NS 记录,而 DNS 标准规定:一个域名有了 CNAME,就不能再有任何其他记录。这就冲突了,所以根域名不能配 CNAME。
想让根域名也享受 CNAME 式的灵活,云厂商提供了变通方案 ALIAS / ANAME 记录(在 DNS 服务器侧把它解析成目标的 A 记录,对外表现得像 A)。
② 多一次解析、略慢。 CNAME 链每多一跳就多一次查询。虽然有缓存缓解,但链条太长(CNAME 指向 CNAME 指向 CNAME…)会拖慢解析,应尽量避免。
四、什么时候用哪个
- 根域名、或就是要绑固定 IP → 用 A 记录(apex 只能用 A/ALIAS)。
- 子域名、要接 CDN、多个域名指向同一目标、目标 IP 可能变 → 用 CNAME。
五、常见误区
- ❌ 以为 CNAME 指向 IP——它指向另一个域名,A 才指向 IP。
- ❌ 在根域名上配 CNAME——标准不允许,用 A 或云厂商的 ALIAS/ANAME。
- ❌ 让 CNAME 和其他记录(如 MX、TXT)配在同一个名字下——CNAME 不能与任何其他记录共存。
- ❌ 堆很长的 CNAME 链——每跳一次多一次解析,影响性能。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| A 记录 | 域名直接映射到 IPv4 地址 |
| AAAA 记录 | 域名映射到 IPv6 地址 |
| CNAME | 域名别名,继续解析到目标规范名 |
www.example.com. 300 IN CNAME web.example.net.
web.example.net. 300 IN A 203.0.113.10
api.example.com. 300 IN A 203.0.113.20
A 记录回答“最终去哪个 IP”,CNAME 回答“这个名字其实是另一个名字”。
- 误区:CNAME 最终也直接存 IP。 CNAME 存的是另一个域名,解析器还要继续追到 A/AAAA 记录才能得到 IP。
- 误区:根域名随便配置 CNAME。 根域名通常还要有 NS、SOA 等记录,标准 DNS 不建议把 zone apex 配成 CNAME。
- 误区:用了 CNAME 就一定更慢很多。 可能多一次查询,但递归解析器会缓存中间结果,实际影响取决于 TTL 和缓存命中。
- 追问:CDN 为什么常让你配 CNAME? 服务商可以控制 CNAME 后面的调度域名,把用户解析到合适节点。
- 追问:A 记录变更为什么不是立刻生效? 递归解析器和客户端会按 TTL 缓存旧结果,过期后才重新查询。
- 追问:一个域名能有多个 A 记录吗? 可以,常用于简单轮询或多地址容灾,但调度能力弱于专业负载均衡或 CDN。
七、加强记忆
A 记录指 IP(终点、一步到位、能配根域名);CNAME 指另一个域名(别名、要再解析一次、不能配根域名、不能与其他记录共存)。CNAME 的价值是解耦——目标 IP 变了只改一处,CDN 接入就靠它;根域名要类似效果用云厂商的 ALIAS/ANAME。