一句话定义:DNS 记录类型(DNS Record Type)就是域名系统这本“全网电话簿”里每一行条目所遵循的格式,它规定这条记录回答什么问题、值该填成什么样子。
解析到底在查什么
在浏览器里输入一个域名后,浏览器并不会直接知道服务器的地址。它会把问题交给递归解析器(recursive resolver),由解析器逐级去问根服务器、顶级域服务器,最后问到该域名的权威服务器(authoritative server)。权威服务器返回的,就是一条条按类型组织好的记录。解析器把答案缓存一段时间(TTL,Time To Live),在这段时间内重复的查询就直接使用缓存。
打个比方:域名像“某小区 3 号楼”这样的地址名,A 记录则是贴在门上的具体门牌号;CNAME 记录是一张转寄单,上面写着“请去问 5 号楼,他家知道我在哪”;TXT 记录则是挂在门口的便条,写着“这房子确实是我的”“寄邮件请走这个渠道”之类的声明。
三种最常打交道的记录
A 记录(Address):把域名映射到一个 IPv4 地址;AAAA 记录同理,映射到 IPv6。它是解析的终点,查到 A 记录,解析就结束了。
CNAME 记录(Canonical Name):声明“这个域名只是另一个域名的别名”,解析器拿到后不会停下,而会拿着目标域名继续查,直到查到 A/AAAA 记录为止。CDN、SaaS 托管站点常让你配 CNAME,就是为了让厂商以后更换 IP 时你不用改任何东西。
TXT 记录(Text):放一段任意文本,不参与寻址,纯粹是“声明”。域名归属验证、邮件发信策略(SPF/DKIM/DMARC)都靠它。
| 记录 | 回答的问题 | 值的样子 | 典型用途 |
|---|---|---|---|
| A / AAAA | 这个域名对应哪个 IP | 一个 IP 地址 | 主域名指向自己的服务器 |
| CNAME | 这个域名是谁的别名 | 另一个域名 | 接 CDN、接托管平台、子域 |
| TXT | 域名主人想声明什么 | 一段文本 | 所有权验证、邮件策略 |
和相邻概念的区别
CNAME 和 HTTP 301 跳转经常被混为一谈:301 是应用层的浏览器跳转,用户能看到 URL 变了;CNAME 是 DNS 层的别名,发生在建立连接之前,用户完全无感。TXT 则和寻址毫无关系,它只是给“需要验证的人”看的。
配错一条,为什么全站打不开
因为解析是所有访问的唯一入口。入口错了,后面做的一切都没有意义:
- A 记录指向一个不是你服务器的 IP,用户就会被送到别处,通常表现为连接超时或证书报错。
- CNAME 指向的目标域名自己没有 A 记录(比如对方已经下线),别名记录链就断了,解析返回空结果,全站不可达。
- 同一个域名上既配了 CNAME 又配了 A 记录,属于违反标准(CNAME 不能与其它记录共存),不同解析器的处理不一致,结果不可预期。
- 把根域名(如 example.com 本身)直接设成 CNAME,会与该名字上必须存在的 NS、MX、SOA 记录冲突,往往连带邮件一起出问题。部分 DNS 服务商提供别名或扁平化方案绕开这个限制,具体以各家官方文档为准。
- 还有一种隐蔽的失败:HTTPS 证书自动续期依赖 TXT 验证记录,TXT 被误删导致续期失败,某天证书过期,全站 HTTPS 直接打不开。
再加一条运维常识:改解析前,先用工具确认目标域名本身能正常解析;变更期间把 TTL 调短,出问题时才能快速回滚。域名解析没有“部分生效”的优雅降级——它要么对,要么全世界都找不到你。
