DNS 解析原理:当你在浏览器输入网址后发生了什么?

DNS 解析原理:当你在浏览器输入网址后发生了什么?

你在浏览器输入 www.example.com 并按下回车,到页面加载出来,中间发生了无数次 DNS 查询。这个过程只需要几百毫秒,但涉及的步骤远比想象中复杂。这篇文章从根服务器开始,把 DNS 的层级结构、递归查询、缓存机制拆开讲清楚。

一、DNS 是什么?

DNS(Domain Name System,域名系统)是互联网的电话簿。它的核心功能是将人类可读的域名(如 www.example.com )转换为机器可读的 IP 地址(如 93.184.216.34)。

没有 DNS,你需要记住每个网站的 IP 地址------就像要记住所有人的电话号码一样不现实。

二、DNS 的层级结构

DNS 是一个分层的分布式数据库,从根开始逐级向下:

text 复制代码
. (根域)
├── .com (顶级域)
│ └── example.com (二级域/权威域)
│ └── www.example.com (主机记录)
├── .org
├── .cn
│ └── .com.cn
└── ...

2.1 根服务器(Root Servers)

全球有 13 组根服务器(由 A 到 M 标识),由不同机构运营。它们不存储具体的域名记录,但知道所有顶级域(TLD)服务器的地址。

2.2 顶级域服务器(TLD Servers)

每个顶级域(如 .com.org.cn)都有自己的权威服务器。它们知道该 TLD 下每个二级域名的权威 DNS 服务器地址。

2.3 权威 DNS 服务器

每个域名所有者指定的 DNS 服务器,存储该域名的实际记录(A 记录、CNAME 等)。最终决定域名的解析结果。

2.4 本地递归 DNS(Local Recursive DNS)

由网络运营商或公共 DNS(如 114.114.114.114)提供,负责替用户完成从根到权威的完整查询过程,并缓存结果。

三、完整的 DNS 查询过程

当你在浏览器访问 www.example.com 时,以下步骤发生:

  1. 本地缓存检查:先检查浏览器缓存、操作系统 hosts 文件、本地 DNS 缓存。如果命中,直接返回 IP,查询结束。

  2. 查询本地递归 DNS :如果没有命中,系统向配置的本地 DNS 服务器(如运营商的 DNS 或 8.8.8.8)发起查询。

  3. 根服务器查询 :本地 DNS 向根服务器询问 .com 在哪,根服务器返回 .com 的顶级域服务器列表。

  4. 顶级域服务器查询 :本地 DNS 向 .com TLD 服务器询问 example.com 的权威 DNS 服务器地址。

  5. 权威 DNS 查询 :本地 DNS 向 example.com 的权威 DNS 服务器询问 www.example.com 的具体 IP。

  6. 返回结果并缓存:权威 DNS 返回 A 记录(IPv4 地址)或 AAAA 记录(IPv6 地址),本地 DNS 缓存该结果,返回给浏览器。

四、DNS 记录类型

记录类型 用途 示例
A IPv4 地址 193.0.0.1
AAAA IPv6 地址 2001:db8::1
CNAME 别名(指向另一个域名) www.example.com → example.com
MX 邮件交换记录(邮件服务器地址) mail.example.com
NS 权威 DNS 服务器地址 ns1.example.com
TXT 文本记录(常用于验证、SPF) v=spf1 include:_spf.example.com
SOA 区域授权记录 存储区域管理信息

五、DNS 缓存机制

DNS 缓存是提高解析速度的关键。所有 DNS 服务器和客户端都会缓存解析结果,缓存时间由域名的 TTL 控制。

TTL(Time to Live):以秒为单位,告诉 DNS 服务器可以缓存该记录多长时间。在 TTL 过期前,服务器不会再次发起权威查询。

5.1 查询 TTL 的方法

bash 复制代码
# dig 查询
dig www.example.com +ttlid

# nslookup 查询
nslookup -type=any www.example.com

六、常见的 DNS 问题

6.1 DNS 解析失败

现象:浏览器报"无法找到服务器"或 DNS_PROBE_FINISHED_NXDOMAIN。

可能原因:

  • 域名不存在或已过期
  • 本地 DNS 服务器不可用
  • hosts 文件配置错误
  • 网络未连接或 DNS 服务器被污染

基础排查:

bash 复制代码
# 查看当前使用的 DNS
cat /etc/resolv.conf

# 用 114.114.114.114 直接解析测试
nslookup example.com 114.114.114.114

# 清空本地 DNS 缓存
sudo systemd-resolve --flush-caches

6.2 解析结果不正确

现象:域名解析到的 IP 地址不是预期的服务器。

可能原因:

  • 本地 DNS 缓存了旧记录(TTL 未过期)
  • DNS 劫持或污染
  • hosts 文件手动覆盖了记录
  • 权威 DNS 配置变更未生效

解决方式:手动刷新本地缓存、使用 ipconfig /flushdns(Windows)或 sudo dscacheutil -flushcache(macOS),或临时更换公共 DNS 测试。

6.3 DNS 污染与劫持

某些地区或运营商可能会对特定域名的解析结果进行篡改。使用公共 DNS(如 114.114.114.114、8.8.8.8)或支持 DNSSEC 的解析器可以缓解部分问题。

七、常用 DNS 工具

7.1 dig(Linux/macOS)

bash 复制代码
# 基础查询
dig example.com

# 查询 A 和 AAAA
dig example.com A AAAA

# 追踪完整解析路径
dig example.com +trace

# 指定 DNS 服务器
dig @8.8.8.8 example.com

7.2 nslookup

bash 复制代码
# 基础查询
nslookup example.com

# 查询 MX 记录
nslookup -type=MX example.com

# 指定 DNS 服务器
nslookup example.com 114.114.114.114

7.3 ping

bash 复制代码
# ping 会先解析域名再发送 ICMP
ping example.com

八、总结

DNS 是互联网运行的基础设施之一。理解它的分层结构和解析流程,可以更好地排查访问异常、配置域名和优化网络。

对于配置了多个子域名或需要频繁查看解析记录的场景,可以使用一些在线 DNS 查询工具(如通过网页进行 dig 查询)辅助验证。

本文仅作技术分享,相关命令在不同操作系统下可能略有差异。

相关推荐
磐时信息技术1 小时前
GB 44495/44496正式施行:智能网联汽车信息安全与软件升级进入强制合规阶段
网络安全·信息安全·汽车·gb44495·gb44496
念何架构之路1 小时前
moby-http-api-server
网络·网络协议·http
namexingyun2 小时前
Scaling Law bug实战启示:从“虚胖“到“精瘦“的算力效率革命
开发语言·网络·人工智能·bug·ai编程
云栖梦泽在2 小时前
原生 IP、机房 IP、住宅 IP、广播 IP 有何不同?从网络身份到 ASN 识别的技术科普
网络·网络协议·tcp/ip·性能优化
AI创界者2 小时前
【实战演练】基于 Kali Linux 的自动化漏洞扫描与安全加固指南
网络·安全·web安全
从零开始的代码生活_3 小时前
Linux epoll 多路转接详解
linux·运维·网络·后端·tcp/ip·计算机网络·php
小鹿软件办公3 小时前
通过调整编码参数使用 VLC 媒体播放器无损压缩视频方法
运维·网络·音视频
Zhan8611243 小时前
西班牙股票行情数据API的WebSocket接入:IBEX35指数实时推送与数据清洗
python·websocket·网络协议
yqcoder5 小时前
什么是 Math 对象
网络·网络协议·udp
Piko61414 小时前
H3C IRF2 堆叠实战:打造高可靠核心交换网络
运维·网络·笔记