提供主机名到 IP 地址的转换

  • 端口 53
  • 默认使用 UDP,可以显式指定 TCP

分层 DNS 服务器

能够防止单点故障,提升通信容量,提升可维护性

DNS 查询

DNS 查找通常会经过下面四步:

  • 询问 Resolver
  • 询问根服务器
  • 询问顶级域名服务器
  • 询问次级域名服务器

以用户访问 www.example.com 为例:

  1. 客户端向递归服务器发起请求: “www.example.com 的 IP 是什么?”
  2. 递归服务器查询根服务器: 根服务器返回 .com 的 TLD 服务器地址。
  3. 递归服务器查询 TLD 服务器: TLD 服务器返回 example.com 的权威服务器地址。
  4. 递归服务器查询权威服务器: 权威服务器返回 www.example.com 的 IP 地址。
  5. 递归服务器缓存结果,并将 IP 返回客户端。

或者使用迭代查询的方法:

解析记录

  • A
    • 将域名直接转换为 ipv4
  • AAAA
    • 将域名转换为 ipv6
  • CNAME
    • 将别名转换为其他别名
  • MX (Mail Exchange Record)
    • 指定接收该域名邮件的 ​邮件服务器地址
    • plaintext example.com MX 10 mail.example.com
  • NS (Name Server)
    • 指定管理该域名的 ​权威 DNS 服务器
  • TXT
    • 存储文本信息
    • 常用于验证域名所有权、配置 SPF/DKIM/DMARC(反垃圾邮件)
  • PTR (Pointer Record)
    • 反向解析,将 IP 地址映射回域名(用于邮箱服务器验证)

报文格式

1. 头部(Header)

​固定 12 字节​​,包含控制信息和各部分的记录数:

  • ​标识符(Transaction ID)​​(16 位):唯一标识查询与响应的匹配。
  • ​标志(Flags)​​(16 位):包含多个控制字段:
    • ​QR​​(1 位):0 表示查询,1 表示响应。
    • ​Opcode​​(4 位):操作类型(如标准查询、反向查询)。
    • ​AA​​(1 位):权威回答(仅响应中有效)。
    • ​TC​​(1 位):截断标志(响应过长时置 1,需改用 TCP)。
    • ​RD​​(1 位):客户端请求递归查询。
    • ​RA​​(1 位):服务器支持递归查询。
    • ​RCode​​(4 位):响应码(如 0 无错误,3 域名不存在)。
  • ​问题数(QDCOUNT)​​(16 位):问题部分的记录数(通常为 1)。
  • ​回答数(ANCOUNT)​​(16 位):回答部分的资源记录数。
  • ​授权数(NSCOUNT)​​(16 位):授权部分的记录数。
  • ​额外信息数(ARCOUNT)​​(16 位):额外信息部分的记录数。

2. 问题部分(Question)

​查询域名及相关信息​​,每个问题记录的格式:

  • ​查询域名(QNAME)​​:域名按标签分割(如 www.example.com 转换为 3www7example3com0),每个标签以长度前缀开头,末尾用 0 终止。
  • ​查询类型(QTYPE)​​(16 位):记录类型(如 A=1,AAAA=28,MX=15)。
  • ​查询类(QCLASS)​​(16 位):通常为 IN(Internet,值为 1)。

3. 回答(Answer)、授权(Authority)、额外信息(Additional)

这三个部分包含​​资源记录(Resource Record, RR)​​,格式相同:

  • ​域名(NAME)​​(可变长):与查询域名相同,可能使用​​压缩格式​​(用偏移指针指向之前出现的位置,如 0xC00C 表示从报文第 12 字节开始)。
  • ​类型(TYPE)​​(16 位):记录类型(同 QTYPE)。
  • ​类(CLASS)​​(16 位):通常为 IN
  • ​生存时间(TTL)​​(32 位):缓存有效期(秒)。
  • ​数据长度(RDLENGTH)​​(16 位):数据部分的字节数。
  • ​数据(RDATA)​​(可变长):根据类型不同而不同:
    • ​A 记录​​:IPv4 地址(4 字节)。
    • ​AAAA 记录​​:IPv6 地址(16 字节)。
    • ​CNAME 记录​​:别名域名(压缩格式)。
    • ​MX 记录​​:邮件服务器优先级 + 域名。
    • ​NS 记录​​:权威 DNS 服务器域名。

​DNS-over-HTTPS(DoH)

  • 协议:通过 ​HTTPS 封装 DNS 查询,使用 ​TCP 443 端口​(与 HTTPS 网站共用端口)。
  • 特点
    • 流量伪装成普通 HTTPS 流量,绕过防火墙或 ISP 的 DNS 审查。
    • 依赖 HTTP/2 或 HTTP/3 协议,支持多路复用和高效传输。
  • 示例
请求:GET /dns-query?dns=... HTTP/2
主机:dns.google

DNS-over-TLS(DoT)

  • 协议:通过 ​TLS 加密的 TCP 连接,使用 ​TCP 853 端口
  • 特点
    • 专用端口易被识别和封锁(如某些国家/网络限制)。
    • 加密性等同于 DoH,但流量特征更明显。