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 查询)辅助验证。

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

相关推荐
云老大-阿里云国际站代理商14 小时前
腾讯云国际站代理商:CVM 跨地域网络抖动排查,深度分析 TCP 重传与 MTU 问题
网络·tcp/ip·腾讯云
砚凝霜15 小时前
软考网络工程师|第 9 章 网络诊断命令 + 故障工具 + 故障排查完整笔记
网络·笔记
数据知道15 小时前
XXE 漏洞深度实战:XML 外部实体攻击与 OOB 带外
xml·网络·安全·网络安全
深圳海导科技15 小时前
海导科技navynav|GNSS测绘电台:在“复杂遮挡环境”的稳定方案
网络·科技
huainingning15 小时前
US226交换机首台web配置后第二台web无法登录问题解决方法
网络
Raas10015 小时前
MAIGateway,魔芋企业级AI网关的安全基建化设计
大数据·人工智能·网关·网络安全·api网关·mai gateway·魔芋
Alkaid207715 小时前
为什么查 IP 有两个结果?这个问题问倒过多少人
网络协议·tcp/ip
九硕智慧建筑一体化厂家16 小时前
打破系统孤岛!IBMS 一体化平台,构建智慧楼宇全域管控体系
运维·网络·人工智能·笔记·智慧城市
笨鸟先飞,勤能补拙16 小时前
AI Agent应用领域深度解析:从概念到落地的全维度审视
大数据·人工智能·python·物联网·安全·网络安全·github
ly768916 小时前
计算机网络:从分层模型到 TCP/IP、HTTP 与网络排查
网络·tcp/ip·计算机网络