DNS域名系统

DNS(Domain Name System)

DNS是一整套从域名映射到IP的系统

DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的⼀台主机的⼀个程序. 但是IP地址不方便记忆.

于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.


hosts 文件与 DNS 系统的演进梳理

  1. 早期方案:hosts 文件
  • 管理方式 :由互联网信息中心(SRI-NIC)统一维护一个全局 hosts 文件,记录主机名 ↔ IP 地址的映射。
  • 更新流程
    • 新设备接入或 IP 变更 → 必须到信息中心申请修改这个全局文件。
    • 所有联网计算机都要定期下载最新版 hosts 文件,才能正确解析主机名。
  • 痛点
    • 维护成本极高,网络规模扩大后完全不可行。
    • 更新延迟大,容易出现解析不一致。
  1. 进化方案:DNS 系统
    为了解决 hosts 文件的痛点,诞生了 DNS(Domain Name System,域名系统)
  • 核心思想:分布式数据库 + 分层查询,不再依赖单一全局文件。
  • 工作模式
    1. 各组织/机构维护自己的域名与 IP 映射数据库。
    2. 新设备接入时,只需在所属机构的数据库中注册信息。
    3. 用户输入域名时,系统自动向 DNS 服务器发起查询,由 DNS 服务器检索并返回对应的 IP 地址。
  • 优势
    • 分布式管理,扩展性极强,适配互联网爆炸式增长。
    • 自动查询,无需用户手动更新文件。
  1. 遗留与现状
  • 现代操作系统仍保留 hosts 文件 ,作为域名解析的本地优先入口
  • 解析顺序:
    1. 先查询本地 hosts 文件(优先级最高)。
    2. 若未找到,再向 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.comtaobao.com,由企业或个人管理,是我们日常最常接触的层级。
  • 三级/四级域名 :二级域名下的子域名,比如 www.baidu.comimage.baidu.comws.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
  1. 版本与全局配置(基础信息)
bash 复制代码
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> www.baidu.com
;; global options: +cmd
  • DiG 9.18.39:你使用的 dig 工具版本(Ubuntu 系统自带)。
  • +cmd:默认启用的参数,显示命令执行的基础信息(无特殊含义)。
  1. 响应头部(核心状态)
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 条解析记录。
  1. EDNS 扩展(网络配置)
bash 复制代码
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
  • EDNS:DNS 扩展协议,这里表示使用 EDNS0 版本,UDP 最大传输大小为 65494 字节(优化大报文传输)。
  1. 查询段(你要查什么)
bash 复制代码
;; QUESTION SECTION:
;www.baidu.com.                 IN      A
  • 你要查询的内容:
    • www.baidu.com.:目标域名(末尾的 . 是根域,通常省略)。
    • IN:查询类(Internet 互联网,固定值)。
    • A:查询类型(A 记录,即 IPv4 地址)。
  1. 应答段(核心解析结果)
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
  1. 统计信息(性能/网络)
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缓存

相关推荐
Brilliantwxx4 小时前
【Linux】自动化构建工具 make 与 Makefile
linux·运维·服务器·开发语言·自动化
caimouse4 小时前
Winsock 用户态库 (ws2_32.dll) 详细分析
网络
云边云科技_云网融合4 小时前
工业制造多厂区、供应链远程数据传输网络如何优化?
运维·服务器·网络
clear sky .4 小时前
[TCP]MCU上如何编辑TCP服务端程序,思路框架
服务器·网络·tcp/ip
方品4 小时前
【无标题】
服务器·人工智能·深度学习·nlp
FungLeo4 小时前
Flutter 带 TTL 的多级缓存设计:内存+磁盘+网络三层实战
网络·flutter·缓存·性能优化
奈斯先生Vector4 小时前
2026 AIGC API 网关韧性评测:为什么 HTTP 200 不等于有效交付
网络协议·http·aigc
云飞云共享云桌面5 小时前
非标装备厂降本方案|8‑10 人三维研发共用一台主机,兼容SolidWorks等多款 3D 绘图软件
运维·服务器·3d·自动化·负载均衡·制造
牛马也想出海5 小时前
使用Playwright被检测为机器人的原因及反检测方案
开发语言·网络·人工智能·机器人·php
暗暗别做白日梦5 小时前
CompletableFuture 并发统计
网络·数据库·oracle