DNS

通常基于 UDP 协议(端口 53),用于解决域名和 IP 地址的映射问题。当响应数据过大或进行区域传送时会改用 TCP。

#status / growing #type / concept #protocol / dns #tech / network

[!info] related notes

DNS

DNS(Domain Name System,域名管理系统):将人类可读的域名(如 www.example.com)翻译为机器可寻址的 IP 地址(如 93.184.216.34)的分布式数据库系统,通常基于 UDP 协议(端口 53),当响应数据超过 512 字节或进行区域传送时改用 TCP。

DNS 解析过程

一次完整的 DNS 查询经历以下层级,采用递归 + 迭代混合模式:

用户浏览器 → OS 缓存 → 本地递归解析器(ISP/8.8.8.8)
  → 根域名服务器(.)
    → TLD 域名服务器(.com)
      → 权威域名服务器(example.com)
        → 返回最终 IP
阶段查询方式说明
客户端 → 递归解析器递归客户端要求解析器”帮我查到底”
递归解析器 → 根/TLD/权威迭代解析器逐级问,每级只返回”去问下一级”

DNS 记录类型

记录类型作用示例
A域名 → IPv4 地址example.com → 93.184.216.34
AAAA域名 → IPv6 地址example.com → 2606:2800:220:1:...
CNAME域名别名(指向另一个域名)www.example.com → example.com
MX邮件交换服务器example.com → mail.example.com (优先级 10)
NS该域名由哪些 DNS 服务器解析example.com → ns1.example.com
TXT文本信息(SPF/DKIM/验证等)"v=spf1 include:_spf.google.com ~all"
SRV服务发现(协议+端口)_sip._tcp.example.com → sipserver:5060
SOA起始授权记录(区域管理信息)主 DNS、刷新间隔、过期时间等
PTRIP → 域名(反向解析)34.216.184.93.in-addr.arpa → example.com

DNS 缓存层级

DNS 响应带有 TTL(Time To Live),各级缓存按 TTL 过期:

浏览器缓存(几秒~几分钟)
  → OS 缓存(/etc/resolv.conf 或系统 DNS 缓存)
    → 递归解析器缓存(ISP DNS,几分钟~几小时)
      → 各级权威服务器不缓存,直接返回权威数据

修改 DNS 记录后,全球生效时间取决于各级缓存的 TTL 过期时间,通常 5 分钟 ~ 48 小时。

DNS over HTTPS / DNS over TLS

传统 DNS 查询以明文 UDP/TCP 传输,存在窃听篡改风险:

方案协议端口特点
DoT (DNS over TLS)TLS over TCP853专用端口,容易被封锁
DoH (DNS over HTTPS)HTTPS443与普通 HTTPS 流量混在一起,难以区分封锁

两者都对 DNS 查询内容加密,防止中间人窃听或劫持。

常用调试命令

# 查询 A 记录
nslookup example.com
dig example.com A

# 追踪完整解析路径
dig +trace example.com

# 指定 DNS 服务器查询
dig @8.8.8.8 example.com

# 查看 TTL
dig example.com | grep -A1 "ANSWER SECTION"

# Windows 下
nslookup -type=MX example.com

边界与常见误解

  • DNS 不只做域名→IP:还支持反向解析(PTR)、邮件路由(MX)、服务发现(SRV)等
  • DNS 本身不负责负载均衡:但可以通过轮询 A 记录实现简单的 DNS 负载均衡
  • 修改 DNS 记录不是即时生效的:受各级缓存 TTL 影响,需要等待缓存过期
  • DNS 不保证安全性:传统 DNS 无加密无签名,需要 DoH/DoT 或 DNSSEC 来增强安全
  • 一次查询可能不需要访问所有层级:缓存命中时直接返回,无需递归查询

相关笔记

创建于 2026/3/12 更新于 2026/5/27