认识 DNS:域名解析的幕后英雄
你有没有想过,当你打开浏览器输入www.baidu.com,网页是怎么神奇地出现的?这背后,有一个你每天都在用却从未注意的超级英雄——DNS(Domain Name System)域名系统
你有没有想过,当你打开浏览器输入 www.baidu.com
,网页是怎么神奇地出现的?
这背后,有一个你每天都在用却从未注意的超级英雄 ——DNS(Domain Name System)域名系统
今天我们就用最通俗的方式,把这个“幕后英雄”讲明白!
一、什么是 DNS?
DNS 全称是:Domain Name System,中文叫做“域名系统”。
它的作用就是:
把我们能看懂的域名(比如 www.baidu.com
),翻译成计算机能认识的 IP 地址(比如 220.181.38.148
)。
因为计算机只能通过 IP 地址通信,而人类更喜欢记名字。DNS 就是“翻译官”,帮你把域名翻译成 IP。
🧭 二、DNS 是怎么工作的?
假设你访问百度,背后会发生这样的流程:
- 你输入网址:
www.baidu.com
- 浏览器先查缓存里有没有这个域名的 IP
- 如果没有,就问本地 DNS 服务器(通常是你家的路由器或运营商)
- 本地 DNS 服务器也不知道?那它会一级一级问:
- 根域名服务器
.
- 顶级域名服务器
.com
- 权威域名服务器
baidu.com
- 最终获取到 IP,比如:
220.181.38.148
- 浏览器拿着 IP 去找百度服务器,请求网页
- 页面加载成功!
完整的流程图,我放在了第七节里边了,你会更直观的看到
这叫做:DNS 解析过程,也叫做“域名解析”。
三、为什么我们需要 DNS?
你能想象这样记网址吗?
http://142.251.43.174/
http://157.240.8.35/
http://104.193.88.123/
😵💫 太痛苦了!
所以有了 DNS:
- 我们记名字(百度、淘宝、抖音)
- 计算机认 IP(220.181.x.x)
- DNS 在中间翻译,两边都开心!
四、常见 DNS 问题 & 小技巧
Q1:为什么有时候打开网页很慢?
可能是 DNS 响应慢或解析失败,可以尝试换一个更快的 DNS(比如 114.114.114.114 或 8.8.8.8)
Q2:能不能换 DNS?
可以!你可以在电脑 / 手机的网络设置中手动指定 DNS 服务器,提高访问速度。
常用公共 DNS:
名称 | IP 地址 | 特点 |
---|---|---|
阿里 DNS | 223.5.5.5 / 223.6.6.6 | 国内快、稳定 |
百度 DNS | 180.76.76.76 | 国内优化 |
114 DNS | 114.114.114.114 | 很多人在用 |
Google DNS | 8.8.8.8 / 8.8.4.4 | 国外访问快 |
Cloudflare DNS | 1.1.1.1 | 重隐私、速度快 |
推介使用114.114.114.114的,如果你开梯子的话可以配置谷歌的8.8.8.8和8.8.4.4(这个懂得都懂)
五、延伸知识:DNS 劫持 & 安全
-
有些不良运营商或黑客会“劫持”DNS,强行跳转网页,比如你访问百度,它让你打开广告网站。
-
建议使用加密 DNS(DoH 或 DoT)服务,比如 Cloudflare 提供的 DNS over HTTPS,保护隐私。
六、自己动手查一下 DNS 吧!
在终端(cmd 或 Linux)输入以下命令:
dig www.baidu.com
#输出
Name: www.baidu.com
Address: 220.181.38.148
这张图的信息一个一个解释一下
1. 头部信息
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
- 表示你使用的是 dig 工具,版本是 9.10.6。
- +cmd 是默认选项,表示显示命令行参数说明。
- Got answer 表示已经收到 DNS 查询的响应。
2. DNS协议头信息
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63857
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
- opcode: QUERY 表示这是一个查询请求。
- status: NOERROR 表示查询成功,没有错误。
- id: 63857 是本次查询的唯一标识符,用于匹配请求和响应。
- flags:
- qr:Query Response,表示这是响应包。
- rd:Recursion Desired,表示客户端希望 DNS 服务器递归查询。
- ra:Recursion Available,表示服务器支持递归查询。
- ANSWER: 3:表示返回了 3 条记录(后面会看到)。
- AUTHORITY: 0:表示没有权威 DNS 服务器信息。
- ADDITIONAL: 1:有一个附加记录(通常是 EDNS 扩展信息)。
3. 扩展信息
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
- 这是 EDNS0 扩展协议的信息,允许更大的 UDP 包(这里是 4096 字节),提升 DNS 性能。
- 不属于实际数据记录,只是辅助信息。
4. 问题部分
;; QUESTION SECTION:
;www.baidu.com. IN A
- 表示你问的问题是:“请告诉我 www.baidu.com 的 A 记录(IPv4 地址)”。
5. 回答部分
;; ANSWER SECTION:
www.baidu.com. 1049 IN CNAME www.a.shifen.com.
www.a.shifen.com. 31 IN A 110.242.69.21
www.a.shifen.com. 31 IN A 110.242.70.57
- www.baidu.com 的 CNAME(别名)指- 向了 www.a.shifen.com。
- 然后这个 www.a.shifen.com 解析为两个 IP 地址:
- 110.242.69.21
- 110.242.70.57
也就是说:
www.baidu.com → www.a.shifen.com → 110.242.69.21 或 110.242.70.57
6. 统计信息
;; Query time: 21 msec
;; SERVER: 223.6.6.6#53(223.6.6.6)
;; WHEN: Mon May 26 10:45:48 CST 2025
;; MSG SIZE rcvd: 104
- Query time: 整个 DNS 查询耗时 21 毫秒。
- SERVER: 使用的 DNS 服务器是 223.6.6.6(阿里云公共 DNS)。
- WHEN: 查询时间是 2025年5月26日 上午10:45:48。
- MSG SIZE: 收到的 DNS 响应数据包大小是 104 字节。
- 这通常是因为百度使用了 CDN 加速服务,通过 shifen.com 域名来分发全球节点
7. 总结一下就是
当你执行 dig www.baidu.com 时,DNS 返回的结果如下:
类型 | 名称 | TTL | 数据 |
---|---|---|---|
CNAME | www.baidu.com | 1049s | → www.a.shifen.com |
A | www.a.shifen.com | 31s | 110.242.69.21 |
A | www.a.shifen.com | 31s | 110.242.70.57 |
这个是我连上wifi以后,自动配置的DNS服务器,你也可以指定DNS服务器,或者多配置几个DNS服务器也可以
小知识:什么是 TTL?
- TTL(Time To Live)表示这条记录在缓存中可以保留的时间(单位是秒)。
- 比如 CNAME 记录的 TTL 是 1049 秒 ≈ 17 分钟,意味着你的本地 DNS 或浏览器在这段时间内不会再重新查询,而是直接使用缓存的结果。
是不是很酷!你正在亲自体验“域名解析”的全过程!
七、总结一张图
这个图的逻辑就是浏览器访问一个没有缓存过的域名,或者是已经过期了的解析缓存,切记
详细的解释一下就是
1️⃣ 用户发起请求
- 用户:在浏览器中输入
www.icescn.com
并发起访问请求。 - DNS客户端:首先检查本地缓存是否有该域名对应的IP地址。这里面会有两个DNS,一个是浏览器缓存,一个是本地缓存;
查看谷歌(chrome)浏览器DNS缓存
查看操作系统本地DNS缓存(macOS)
他们两解析出来的ip是一样的
因为浏览器默认是使用的操作系统的DNS
还有一个情况,大家千万不要把www.baidu.com
和baidu.com
混为一谈,在学习DNS的时候是不一样的;它们是两个完全不同的域名,DNS 系统会为每一个域名单独设置记录,互不影响
有的同学看到这里突然就想起来了,我们学习计算机网络的时候老师说过www(World Wide Web)
就是代表万维网,早期的时候很多网站都习惯使用www
来代表“这个是一个网页服务”,但这不是必须的,你可以替换或者就不加么,加上了那么www.baidu.com
就是baidu.com
的一个字域名。
建议大家去理解一下: 互联网、万维网、网络协议、网站具体指的是什么,如果有时间,留言多的话,后期我再出一篇,专门解释四个名词的文章。
2️⃣ 检查本地缓存
如果缓存中有记录,则直接返回结果给用户。
如果没有命中缓存,进入下一步。
3️⃣ 递归查询开始
- DNS代理服务器:用户的请求被转发到一个DNS代理服务器(通常是ISP提供的DNS服务器)。这个IPS就指的是网络运营商;
- DNS代理服务器:它会代表用户进行递归查询,直到找到目标域名的IP地址。
4️⃣ 迭代查询开始
- 查询根域名服务器
- 根域名服务器:DNS代理服务器首先向根域名服务器(.com 的上级服务器)询问 www.icescn.com 的IP地址。
- 根域名服务器不知道具体IP,但知道 .com 域名服务器的位置,于是告诉DNS代理服务器去问 .com 域名服务器。
- 查询 .com 域名服务器
- .com 域名服务器:DNS代理服务器接着向 .com 域名服务器询问 www.icescn.com 的IP地址。
- .com 域名服务器也不知道具体IP,但它知道 icescn.com 的权威域名服务器位置,于是告诉DNS代理服务器去问 icescn.com 的权威域名服务器。
- 查询 icescn.com 域名服务器
- icescn.com 域名服务器:DNS代理服务器最后向 icescn.com 的权威域名服务器询问 www.icescn.com 的IP地址。
- icescn.com 域名服务器有该域名的详细记录,返回 www.icescn.com 对应的IP地址 6.6.6.6。
5️⃣ 返回结果并缓存
- DNS代理服务器:收到IP地址后,将结果返回给用户,并将 www.icescn.com -> 6.6.6.6 的映射关系放入本地缓存中。
- 用户:最终得到 www.icescn.com 的IP地址,可以正常访问网站。
总结:递归查询 vs 迭代查询
类型 | 特点 |
---|---|
递归查询 | DNS代理服务器负责全程查询直至获取结果,用户只需等待最终结果,可能涉及多次迭代查询 |
迭代查询 | 各级域名服务器逐级查找,每次查询只返回下一级服务器的信息 |
八、建议
👉 不用把 DNS 的技术细节背下来,但你一定要知道它:
- 是什么?
- 干嘛的?
- 不通了会出什么问题?
- 怎么用公共 DNS 提高上网体验?
- 这比死记 IP 地址要实用太多了!
🧡 欢迎点赞 + 收藏 + 关注
更多推荐
所有评论(0)