DNS(Domain Name System)
DNS是一整套从域名映射到IP的系统
DNS背景
TCP/IP中使用IP地址和端口号来确定网络上的⼀台主机的⼀个程序. 但是IP地址不方便记忆.
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.

hosts 文件与 DNS 系统的演进梳理
- 早期方案:hosts 文件
- 管理方式 :由互联网信息中心(SRI-NIC)统一维护一个全局
hosts文件,记录主机名 ↔ IP 地址的映射。 - 更新流程 :
- 新设备接入或 IP 变更 → 必须到信息中心申请修改这个全局文件。
- 所有联网计算机都要定期下载最新版 hosts 文件,才能正确解析主机名。
- 痛点 :
- 维护成本极高,网络规模扩大后完全不可行。
- 更新延迟大,容易出现解析不一致。
- 进化方案:DNS 系统
为了解决 hosts 文件的痛点,诞生了 DNS(Domain Name System,域名系统):
- 核心思想:分布式数据库 + 分层查询,不再依赖单一全局文件。
- 工作模式 :
- 各组织/机构维护自己的域名与 IP 映射数据库。
- 新设备接入时,只需在所属机构的数据库中注册信息。
- 用户输入域名时,系统自动向 DNS 服务器发起查询,由 DNS 服务器检索并返回对应的 IP 地址。
- 优势 :
- 分布式管理,扩展性极强,适配互联网爆炸式增长。
- 自动查询,无需用户手动更新文件。
- 遗留与现状
- 现代操作系统仍保留
hosts文件 ,作为域名解析的本地优先入口。 - 解析顺序:
- 先查询本地
hosts文件(优先级最高)。 - 若未找到,再向 DNS 服务器发起查询。
- 先查询本地
域名简介
主域名是用来识别主机名称和主机所属的组织机构的⼀种分层结构的名称.
域名使用 . 连接
• com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
• baidu: 二级域名, 公司名.
• www: 只是⼀种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.
域名解析过程


- 根服务器(Root) :域名树的最顶端,用
.表示(通常省略不写),负责指向顶级域服务器。 - 顶级域(TLD,Top-Level Domain) :
- 通用顶级域:
.com、.net、.org、.edu等 - 国家/地区顶级域:
.cn(中国)、.uk(英国)、.jp(日本)等
- 通用顶级域:
- 二级域名 :在顶级域下注册的域名,比如
baidu.com、taobao.com,由企业或个人管理,是我们日常最常接触的层级。 - 三级/四级域名 :二级域名下的子域名,比如
www.baidu.com、image.baidu.com、ws.pic.baidu.com,由域名所有者自行分配管理。
使用dig工具分析DNS过程
bash
syb@VM-8-5-ubuntu:~$ dig www.baidu.com
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13033
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1178 IN CNAME www.a.shifen.com.
www.a.shifen.com. 112 IN A 183.2.172.177
www.a.shifen.com. 112 IN A 183.2.172.17
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Mar 14 18:52:48 CST 2026
;; MSG SIZE rcvd: 101
- 版本与全局配置(基础信息)
bash
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> www.baidu.com
;; global options: +cmd
DiG 9.18.39:你使用的dig工具版本(Ubuntu 系统自带)。+cmd:默认启用的参数,显示命令执行的基础信息(无特殊含义)。
- 响应头部(核心状态)
bash
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13033
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
- 关键字段 :
status: NOERROR:✅ 查询成功(如果是NXDOMAIN表示域名不存在)。flags: qr rd ra:qr:这是响应包(不是请求包)。rd:启用了递归查询(本地 DNS 会帮你查到底)。ra:DNS 服务器支持递归查询。
QUERY: 1:你发起了 1 个查询请求。ANSWER: 3:DNS 服务器返回了 3 条解析记录。
- EDNS 扩展(网络配置)
bash
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
- EDNS:DNS 扩展协议,这里表示使用 EDNS0 版本,UDP 最大传输大小为 65494 字节(优化大报文传输)。
- 查询段(你要查什么)
bash
;; QUESTION SECTION:
;www.baidu.com. IN A
- 你要查询的内容:
www.baidu.com.:目标域名(末尾的.是根域,通常省略)。IN:查询类(Internet 互联网,固定值)。A:查询类型(A 记录,即 IPv4 地址)。
- 应答段(核心解析结果)
bash
;; ANSWER SECTION:
www.baidu.com. 1178 IN CNAME www.a.shifen.com.
www.a.shifen.com. 112 IN A 183.2.172.177
www.a.shifen.com. 112 IN A 183.2.172.17
这是最关键的部分,拆解每条记录:
| 域名 | TTL | 类型 | 解析结果 | 含义 |
|---|---|---|---|---|
www.baidu.com. |
1178秒 | CNAME | www.a.shifen.com. |
www.baidu.com 是别名,真实指向 www.a.shifen.com |
www.a.shifen.com. |
112秒 | A | 183.2.172.177 | 真实 IP 地址1 |
www.a.shifen.com. |
112秒 | A | 183.2.172.17 | 真实 IP 地址2 |
- TTL(生存时间):解析结果的缓存时长(比如 1178 秒后本地缓存失效,需重新查询)。
- CNAME 作用 :百度通过别名映射实现负载均衡/故障切换,修改
www.a.shifen.com的 IP 就能无缝切换,无需改动www.baidu.com。
- 统计信息(性能/网络)
bash
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Mar 14 18:52:48 CST 2026
;; MSG SIZE rcvd: 101
Query time: 0 msec:查询耗时 0 毫秒(本地 DNS 缓存命中,速度极快)。SERVER: 127.0.0.53#53:使用本地 DNS 服务器(Ubuntu 系统默认的 systemd-resolved)。MSG SIZE rcvd: 101:接收的响应报文大小 101 字节。
关于DNS缓存:在Windows系统中,可以使用 ipconfig /displaydns 命令来查看系统级别的DNS缓存