计算机网络——应用层 DNS 协议分析
概述
- 域名(Domain Name)是互联网上用于标识和定位网站、服务器或网络服务的字符串名称,相当于网站的“门牌地址”。它为用户提供了一种更直观、易记的方式来访问网站,避免了记忆复杂的 IP 地址。
- DNS(Domain Name System,域名系统)是一个分布式数据库系统,用于将人类可读的域名转换为机器可识别的 IP 地址 。它类似于互联网的“电话簿”,确保用户通过域名访问目标服务器,而无需直接输入 IP 地址。
域名分级
域名采用 层次结构,从右向左逐级划分,结构如下:
- 根域:域名层级的顶端,表示为
.
(通常省略)。 - 顶级域名:如
.com
、.org
、.cn
、.edu
,分为通用顶级域(如.com
)、国家/地区顶级域(如.cn
)等。 - 一级域名:直接在顶级域名下的部分,如
baidu
(在baidu.com
中)。 - 二级域名:如
www
、news
、tieba
(在www.baidu.com
中)。 - 更低级域名:如
blog.news.example.com
中的blog
。
域名注册
域名需通过注册商购买并配置。以下是常见的注册平台:
[!note] 国内注册的域名需在工信部完成 ICP 备案,备案流程可能耗时数周。 国外注册的域名无需备案,但可能因网络限制影响国内访问速度。
域名解析过程
开发者视角
- 购买域名:通过注册商购买域名(如
xiaqy.top
)。 - 购买服务器:获取具有公网 IP 的服务器,部署网站或服务。
- 配置 DNS 解析:在域名管理平台设置 DNS 记录,将域名映射到服务器的 IP 地址。
客户端视角
当用户在浏览器输入域名(如 blog.xiaqy.top
)时,操作系统和浏览器会自动发起 DNS 解析流程:
- 检查本地 DNS 缓存(浏览器或操作系统缓存)。
- 若无缓存,查询本地 DNS 服务器(通常由 ISP 或公共 DNS 如
223.5.5.5
提供)。 - 本地 DNS 服务器通过 递归查询 或 迭代查询,向根 DNS、顶级域 DNS、权威 DNS 逐级查询,最终返回 IP 地址。
DNS 递归查询与迭代查询
- 递归查询 是本地计算机与 DNS 服务器之间的查询与响应,客户端将解析任务完全交给 DNS 服务器(如本地 DNS),由该服务器负责最终返回结果(成功或失败)。
- 迭代查询 是 DNS 服务器之间的查询与响应,DNS 服务器仅返回“下一步该问谁”的线索(如根 DNS→TLD→ 权威 DNS),查询方需逐步追问直到获得答案。
- 下图以查询
blog.xiaqy.top
域名为例:
- 递归查询与迭代查询的 区别:
特性 | 递归查询 | 迭代查询 |
---|---|---|
定义 | 客户端向本地 DNS 服务器发出查询,服务器负责完成所有查询步骤 | 客户端或服务器逐级向 DNS 服务器查询,每次返回下一步地址 |
查询主体 | 本地 DNS 服务器或指定的 DNS 服务器 | 客户端或本地 DNS 服务器 |
效率 | 对客户端更快,服务器负担较重 | 对服务器负担较轻,客户端需多次查询 |
使用场景 | 客户端通常使用递归查询 | 本地 DNS 服务器与上级 DNS 服务器间使用 |
域名解析类型
DNS 支持多种记录类型,用于不同场景的解析:
- A 记录:将域名映射到 IPv4 地址。
- AAAA 记录:将域名映射到 IPv6 地址。
- CNAME 记录:定义域名的别名,常用于 CDN。
- NS 记录:指定域名的权威 DNS 服务器。
- MX 记录:指定邮件服务器地址,用于邮件服务。
- TXT 记录:存储文本信息,常用于验证域名所有权或 SPF 记录。
协议分析与抓包
Windows DNS 操作
Windows 系统默认开启 DNS 缓存,可通过以下命令管理:
#查看DNS缓存
ipconfig /displaydns
#清除DNS缓存
ipconfig /flushdns
#查询域名解析
nslookup [domain_name]
[!tip] 清除 DNS 缓存可解决因缓存导致的解析错误问题,例如访问旧 IP 地址。
Wireshark 抓包
使用 Wireshark 分析 DNS 流量时,可设置过滤器 dns
查看 DNS 查询和响应,随后本地进行查询域名解析。DNS 报文结构主要包括:
- 查询部分:包含查询的域名和记录类型(如 A、AAAA)。
- 应答部分:包含解析结果(如 IP 地址)。