网络基础12 分钟阅读更新于 2026-07-29

DNS 是什么:域名为什么要解析成 IP

围绕DNS 章节,讲清楚 DNS 的作用、域名层级、解析流程、缓存位置,以及递归查询和迭代查询的区别。

相关工具

DNS 解决的是“好记”和“能通信”的矛盾

人喜欢记域名,机器通信要用 IP。你能记住 `www.baidu.com`,但不太可能每天记一串数字 IP;操作系统发送网络包时,又不能只拿着域名出门,它需要知道目标服务器的 IP 地址。DNS 做的事,就是把域名转换成 IP。

文中对 DNS 的定义很直接:DNS 是 Domain Name System,用来把域名转换成 IP 地址的分布式系统。这里有两个词要抓住,一个是“转换”,一个是“分布式”。转换好理解,域名查 IP;分布式更重要,因为全世界的域名数量太多,访问量太大,不可能靠一台服务器扛住。

所以 DNS 不是浏览器里一个小功能,而是一套层级化的查询系统。浏览器输入 URL 后,真正建立连接之前,要先通过 DNS 找到目标服务器 IP。没有这个 IP,后面的 TCP、HTTP、HTTPS 都无从开始。

DNS 解析链路图,包含浏览器缓存、Hosts、本地 DNS、根 DNS、顶级域 DNS、权威 DNS 和返回 IP
DNS 解析链路

DNS 查询会先看本地缓存,再逐级找到能给出最终 IP 的权威 DNS。

为什么 DNS 不能设计成一台中心服务器

如果把所有域名解析都交给一台中心 DNS 服务器,理论上很简单,现实里根本撑不住。文中列了几个问题:单点故障、通信容量、远距离访问和维护成本。

单点故障最容易理解。中心服务器一旦崩溃,整个网络的域名解析都会受影响。通信容量也不现实,全网 DNS 查询量可能是百万、千万甚至更高,一个中心节点很难处理。距离也会带来延迟,比如所有人都去访问远在另一个大陆的 DNS 服务器,请求要经过更多链路,响应自然变慢。

维护也麻烦。域名和 IP 的映射每天都在变化,如果全靠一个中心库更新,成本和风险都会很高。分布式 DNS 的好处,是把责任拆开:不同层级、不同区域、不同域名由不同服务器负责,查询时再按层级找到目标。

域名是有层级的,越靠右层级越高

DNS 的层级关系藏在域名的点号里。以 `www.server.com` 为例,最右边的点可以理解为根域,`com` 是顶级域,`server` 是二级域,`www` 通常是具体主机名。文中提到,在域名中越靠右的位置,层级越高。

这个层级关系决定了 DNS 查询为什么能一步步往下找。根 DNS 不负责告诉你 `www.server.com` 的最终 IP,但它能告诉你应该去问哪个 `.com` 顶级域 DNS。顶级域 DNS 也不一定保存最终 IP,但它能告诉你负责 `server.com` 的权威 DNS 在哪里。权威 DNS 才真正保存特定域名和 IP 的映射关系。

把这个顺序记住,DNS 就不再是一团黑盒:先找最高层,再找下一层,最后找到真正负责这个域名的服务器。

域名层级关系图,以 www.server.com 展示主机名、二级域、顶级域和根域
域名的层级关系

点号不是装饰,它把域名拆成了可逐级查询的层次。

一次 DNS 解析通常从缓存开始

DNS 查询不会一上来就去问根 DNS。为了减少延迟和重复查询,浏览器、操作系统、Hosts 文件、本地 DNS 都可能保存解析结果。实际访问时,通常先查浏览器缓存;没有命中,再看本机 Hosts 文件;还没有,再把查询交给本地 DNS。

Hosts 文件可以手动写域名和 IP 的映射。本地环境里有时会用它把某个域名临时指向测试服务器。它的优先级通常比较靠前,所以如果 Hosts 配错了,浏览器访问域名时可能根本不会走正常 DNS 查询。

本地 DNS 一般由网络服务商、公司网络或公共 DNS 服务提供。它也会缓存结果。如果本地 DNS 已经有某个域名的解析记录,就可以直接返回 IP;没有缓存时,才继续向更上层 DNS 服务器查询。

本地 DNS 找不到时,会逐级往上问

当本地 DNS 没有缓存结果,它会先问根 DNS。根 DNS 不给最终 IP,而是告诉它应该去问哪个顶级域 DNS。比如域名以 `.com` 结尾,就去问 `.com` 顶级域 DNS。

顶级域 DNS 接着告诉本地 DNS:负责这个具体域名的权威 DNS 是谁。最后,本地 DNS 再去问权威 DNS。权威 DNS 查到域名对应的 IP 后,把结果返回给本地 DNS。本地 DNS 再把 IP 返回给浏览器,并把结果缓存起来,方便下次更快响应。

浏览器拿到 IP 后,才可以继续和目标服务器建立连接。上一篇讲“输入 URL 后发生什么”时,DNS 正好位于 URL 解析和 TCP 连接之间:它不负责传网页内容,只负责告诉你目标服务器在哪里。

递归查询和迭代查询不要混着背

DNS 里经常会问递归查询和迭代查询。文中的区分很清楚:递归查询中,DNS 客户端只发送一次查询请求,然后等待完整结果;迭代查询中,查询方每次只拿到下一站地址,再自己继续问下一级服务器。

普通用户更容易接触递归查询。比如浏览器把查询交给本地 DNS,它只等一个最终 IP,不关心本地 DNS 中间问了谁。对浏览器来说,这就是“你帮我查到底”。

DNS 服务器之间更常见迭代查询。本地 DNS 问根 DNS,根 DNS 说“去问 `.com`”;本地 DNS 再问 `.com` 顶级域 DNS,顶级域说“去问这个权威 DNS”;本地 DNS 最后问权威 DNS,拿到最终 IP。每一步只拿下一站,而不是一次拿完整答案。

DNS 递归查询和迭代查询对比图,展示客户端、本地 DNS、根 DNS、顶级域 DNS 和权威 DNS
递归查询和迭代查询

递归查询像托人查到底,迭代查询像一步一步拿下一站地址。

DNS 出问题时,现象常常不像 DNS

DNS 问题不一定表现为“DNS 错误”。用户看到的可能是网页打不开、接口连不上、访问到了旧服务器、某个地区能访问另一个地区不能访问,或者刚切换域名解析后结果忽快忽慢。原因可能是缓存还没过期,也可能是不同网络使用的本地 DNS 不一样。

排查时可以按顺序看:域名是否拼错,浏览器缓存是否影响结果,Hosts 文件有没有写错,本地 DNS 返回的 IP 是否符合预期,权威 DNS 记录是否已经更新,TTL 是否导致旧记录还在缓存里。不要一上来就改服务器代码,DNS 还没解析到正确 IP 时,服务器根本收不到请求。

如果你在调接口,也可以把域名换成解析出的 IP 做对比,但要注意 HTTPS 证书通常绑定域名,直接访问 IP 可能会出现证书校验问题。这个现象不是服务器一定坏了,而是访问方式绕开了域名。

这篇先记住四句话

第一,DNS 的核心作用是把域名解析成 IP,域名方便人记,IP 方便机器通信。第二,DNS 是分布式系统,不是单台中心服务器,因为单点故障、访问量、距离和维护都会成为问题。

第三,域名有层级,越靠右层级越高;根 DNS、顶级域 DNS、权威 DNS 分工不同。第四,DNS 查询会充分利用缓存,递归查询面向“等最终答案”,迭代查询面向“拿下一站地址”。

把这四句话放回完整请求链路里,DNS 的位置就清楚了:浏览器已经知道要访问哪个域名,但还不知道目标 IP;DNS 给出 IP 后,TCP 和 HTTP 才能继续往下走。

常见问题

DNS 返回的是服务器的真实 IP 吗?

不一定。很多网站会接入 CDN 或负载均衡,DNS 返回的可能是离用户更近的节点 IP,或者某个调度入口。

修改 DNS 记录后为什么不是立刻生效?

因为浏览器、操作系统、本地 DNS 和中间 DNS 都可能缓存旧结果。TTL 越长,旧记录保留时间通常越久。

Hosts 文件和 DNS 是什么关系?

Hosts 文件是本机的静态域名映射,通常会在正式 DNS 查询前检查。它适合临时测试,但配错后会让域名指向错误 IP。

计算机网络

继续阅读

返回专题