一、什么是DNS?
DNS(Domain Name System,域名系统) 是互联网的核心服务,负责将人类可读的域名(如 www.baidu.com)转换为机器可识别的 IP地址(如 14.119.104.254)。它像一本全球分布式“电话簿”,让用户无需记忆复杂数字即可访问网站。
关键特性:
-  
分层设计:域名结构分层次管理(如
.com→baidu→www)。 -  
分布式存储:全球数万台DNS服务器协同工作,无单点故障。
 -  
高效缓存:减少重复查询,提升解析速度。
 
二、为什么要有DNS?
没有DNS的世界会怎样?
-  
访问网站需输入IP地址:
用户需记忆14.119.104.254而非www.baidu.com。 -  
IP变更导致服务中断:
若服务器IP更换,所有用户必须手动更新。 -  
无法支持复杂服务:
单IP无法托管多个网站(如虚拟主机)。 
DNS的四大价值
| 痛点 | DNS解决方案 | 
|---|---|
| 记忆难度高 | 通过域名提供易记的别名 | 
| IP动态变化 | 域名与IP动态绑定,自动更新 | 
| 服务扩展性差 | 支持负载均衡、CDN调度等高级功能 | 
| 网络流量集中 | 分布式架构缓解单点压力 | 
三、域名的构成
1. 域名结构(从右到左)
以 www.baidu.com 为例:
-  
根域(Root Domain):隐式的
.(通常省略,如com.)。 -  
顶级域(TLD):
.com(商业机构)、.org(非盈利组织)、.cn(国家代码)。 -  
二级域(SLD):
baidu(注册的网站名称)。 -  
子域(Subdomain):
www(常见的子域,表示Web服务)。 

2. 域名树状图
根域(.) └── 顶级域(com)└── 二级域(baidu)├── 子域(www)└── 子域(mail)
四、DNS服务器的分类
| 类型 | 作用 | 示例 | 
|---|---|---|
| 根DNS服务器 | 提供顶级域服务器的IP地址 | 全球13组根服务器(a.root-servers.net) | 
| 顶级域DNS服务器 | 管理特定顶级域(如 .com)的权威服务器 | gtld-servers.net | 
| 权威DNS服务器 | 存储具体域名的IP映射记录 | ns1.baidu.com(百度官方DNS) | 
| 递归DNS服务器 | 代表用户完成完整查询过程的缓存服务器 | 8.8.8.8(Google Public DNS) | 
五、DNS客户端
1. 客户端的作用
-  
发起查询:向递归DNS服务器发送域名解析请求。
 -  
缓存管理:临时存储解析结果(通过TTL控制缓存时间)。
 
2. 客户端配置
Windows
# 查看当前DNS服务器 ipconfig /all
Linux
# 修改DNS配置(/etc/resolv.conf) nameserver 114.114.114.114
六、DNS中继(Forwarder)
1. 什么是DNS中继?
企业或ISP部署的本地DNS服务器,将外部查询请求转发至上游服务器,实现:
-  
缓存加速:减少外网查询延迟。
 -  
内容过滤:屏蔽恶意域名。
 -  
流量管控:限制员工访问特定网站。
 
2. 中继 vs. 递归服务器
| 对比项 | DNS中继 | 递归DNS服务器 | 
|---|---|---|
| 查询方式 | 转发请求至上游服务器 | 自行完成全链路查询 | 
| 典型场景 | 企业内网、学校机房 | 公共DNS服务(如Cloudflare) | 
| 缓存策略 | 依赖上游响应 | 自主缓存所有层级结果 | 
七、域名解析过程
1. 递归查询(客户端视角)
mermaid
sequenceDiagramparticipant 用户participant 递归DNSparticipant 根DNSparticipant 顶级域DNSparticipant 权威DNS用户->>递归DNS: 查询 www.baidu.com递归DNS->>根DNS: 询问 .com 的顶级域服务器根DNS-->>递归DNS: 返回 .com 服务器IP递归DNS->>顶级域DNS: 询问 baidu.com 的权威服务器顶级域DNS-->>递归DNS: 返回 baidu.com 的权威服务器IP递归DNS->>权威DNS: 查询 www.baidu.com 的IP权威DNS-->>递归DNS: 返回 14.119.104.254递归DNS-->>用户: 返回最终IP
2. 迭代查询(服务器视角)
-  
本地DNS询问根服务器 → 获取
.com服务器地址。 -  
询问
.com服务器 → 获取baidu.com权威服务器地址。 -  
询问
baidu.com服务器 → 获取www子域的IP。