域名与 DNS(上):敲下一个网址,谁把它翻译成了 IP
讲清域名的层级结构、注册局/注册商/权威解析的角色分工,以及一次 DNS 解析如何从根服务器一路问到权威服务器,顺带把 A、CNAME、MX、TXT 等记录类型一次讲清
- 理解人记域名、机器认 IP 的矛盾,以及 DNS 在其中扮演的角色
- 分清域名层级(根/TLD/二级/子域)与注册局、注册商、解析商三类机构
- 能完整描述递归与迭代结合的解析全过程,以及缓存在哪几层
- 掌握 A/AAAA/CNAME/MX/TXT/NS/TTL 等记录类型各自的用途
域名不是地址,是 IP 的好记别名
互联网上的机器只认 IP,但让用户记住 134.175.44.210 这样的数字既痛苦又脆弱——服务器一换 IP,所有用户就得改。于是有了域名系统 DNS(Domain Name System):用 pygood.com 这样有意义的名字,背后通过一张全球分布式数据库解析到真实 IP。DNS 是一个运行在 UDP 53 端口(区域传送等大响应走 TCP)的层级化系统,理解它,你才看得懂「域名解析、域名生效、子域名、邮箱配置、证书验证」这些部署里天天遇到的事。
域名是分层的:从右往左读
域名用点分层级,从右往左级别越来越具体。最右是根(书写时常省略的末尾点),然后是顶级域、二级域、再到各级子域:
www . pygood . com .
↑ ↑ ↑ ↑
子域 二级域 顶级域 根
(主机) (你注册的) TLD (省略)
api.pygood.com -> 接口子域
www.pygood.com -> 网站子域
h5.pygood.com -> H5 版子域
mail/... -> 邮箱子域(通常配 MX,不直接配 A)你花钱「注册」的是二级域(pygood.com),之后可以在它下面自由创建任意子域,不需要再花钱。顶级域分几类:.com/.net/.org 这类通用顶级域(gTLD),.cn/.us 这类国家/地区顶级域(ccTLD),以及 .tech/.app 这类新通用域。面向中国大陆正式提供服务、要做 ICP 备案的域名,通常要求是工信部批复的顶级域、且域名注册人通过实名认证(合规细节 Stage14 已展开,这里只讲技术)。
三个容易混的机构:注册局、注册商、解析商
你在注册商处买下域名,可以选择用注册商自带的解析,也可以把 NS 记录指到别家解析商(如云解析、CDN 厂商)。NS 记录决定了「全世界该去问谁拿你域名的权威记录」,换解析商本质就是改 NS、再在新解析商后台重建记录。
一次解析的完整旅程:递归与迭代是怎么配合的
当设备第一次访问 www.pygood.com,本地没有缓存,它向配置的递归解析器(运营商或公共 DNS)发起请求;递归解析器再沿着「根 → 顶级域 → 权威」这条链一路问下去,这一段是迭代查询:
设备: 「www.pygood.com 是多少?」 -> 递归解析器(如 223.5.5.5)
递归解析器依次迭代询问:
① 问根服务器: .com 找谁? -> 根返回 .com 顶级域服务器地址
② 问 .com 服务器: pygood.com 找谁? -> 返回 pygood.com 的权威 NS
③ 问权威 NS: www.pygood.com 是多少? -> 返回 A 记录 IP
递归解析器拿到最终 IP,缓存起来,再回给设备;设备也缓存
之后在 TTL 有效期内再访问,直接命中缓存、不再走这一趟所以「递归」是指设备把活儿整个甩给递归解析器(它替你跑完全程),「迭代」是指递归解析器自己一层层去问、每次拿到下一层的线索。缓存分布在多个层级:浏览器缓存、操作系统缓存(hosts 文件优先级最高、可手动覆盖)、递归解析器缓存。理解这条链,你就明白为什么「改了解析有人立刻生效、有人要等」——不同人用的递归解析器缓存过期时间不同。
hosts 文件:本机最高优先级的「私有 DNS」(选学)
在走真正的 DNS 之前,操作系统会先查本地 hosts 文件(Windows 在 C:\Windows\System32\drivers\etc\hosts,Linux/macOS 在 /etc/hosts),里面写死的「域名→IP」映射会优先生效。它常用于:新服务器还没切正式解析时,先让本机用域名连到新机器做测试;或屏蔽某域名(指到 127.0.0.1)。
部署迁移时这是一把利器:可以在不改公网解析、不影响任何用户的前提下,只让你自己的电脑把 pygood.com 指到新服务器,完整验证后再改全局解析。但也要警惕——本机 hosts 被改会导致「只有你这台电脑打不开/打开到错误站点」,是排障时容易忽略的一环。
记录类型:DNS 不只是域名转 IP
权威解析里每条记录都是「某名字 → 某类型 → 某值 + TTL」。部署常用类型:
常用 DNS 记录类型A :域名 -> IPv4 地址(最常用,pygood.com -> 134.175.44.210)AAAA :域名 -> IPv6 地址CNAME :域名 -> 另一个域名(别名,常把子域指到 CDN/对象存储给的域名)MX :邮件服务器,指向负责收信的域名(带优先级数字)TXT :任意文本,用于域名所有权验证、SPF/DKIM 反垃圾、证书校验NS :本域由哪台权威服务器解析SOA :区域起始授权,记录主 NS、管理员邮箱、序列号与刷新策略CAA :限制哪些 CA 有权给本域签发证书(防误签)TTL :不是记录类型而是缓存秒数,告诉各级缓存这条记录能存多久
CNAME 是别名、会把名字整个「接管」,所以一个名字一旦配了 CNAME,通常就不能再配 MX/TXT 等其他记录(根域尤其如此,很多平台用 CNAME 拉平/ANAME 技术绕开);CNAME 会多一次解析跳转,性能敏感的根域/主站更常直接用 A 记录,CDN 加速的子域才多用 CNAME。配邮箱和网站验证时这两点最容易踩。
用户刚在解析后台把 www 的 A 记录从旧 IP 改成新 IP,但部分用户仍访问到旧服务器,最主要原因是?
本节小结
DNS 把好记的域名解析成 IP,域名从右到左是根/TLD/你注册的二级域/可自由创建的子域。注册局运营顶级域、注册商面向你卖域名、权威 NS 持有最终记录、递归解析器替设备逐层询问。解析时设备把请求递归交给解析器,解析器沿根→TLD→权威迭代查询,结果按 TTL 缓存在浏览器/系统/递归层,hosts 文件本机优先级最高。记录类型:A/AAAA 转 IP、CNAME 取别名(不能与同名 MX/TXT 共存、多一跳)、MX 管收信、TXT 做验证与反垃圾、NS 定权威、CAA 限 CA、TTL 定缓存时长。
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
从浏览器到你的应用,一次请求依次经过 DNS 解析、TCP 三次握手、TLS 握手、反向代理、上游应用,再到数据库或缓存,沿原路返回。每一跳都可能是延迟或故障点,所以排错要分层推进:先确认域名解析和端口连通,再看证书是否有效,最后看应用日志与依赖,而不是出问题就先重启。能把链路一层层说清,定位线上故障会快一个数量级。