← RFC Reference

RFC 1035 – 域名:实现与规范

Internet Standard DNS & Mail Routing Published March 2026
ELI5: 当你寄一封信时,你需要知道哪个邮局处理收件人的地址。DNS是为电子邮件回答这个问题的电话簿。你查找域名,DNS会告诉你哪些邮件服务器接受它的邮件(MX记录)、它们的IP地址是什么(A/AAAA记录)以及适用什么政策(TXT记录用于SPF、DKIM、DMARC)。没有DNS,就无法传递电子邮件。

为什么存在此RFC

RFC 1035发布于1987年,与RFC 1034一起发布,定义了域名系统的实现细节。虽然DNS是一种通用基础设施,但它对电子邮件绝对至关重要。每次电子邮件传递都始于DNS查询——发送服务器必须发现哪些服务器接受收件人域的邮件。

RFC 1035定义了使这成为可能的记录类型、查询格式和响应结构。对于电子邮件,四种记录类型最重要:MX(邮件交换路由)、A(IPv4地址)、AAAA(IPv6地址,在RFC 3596中定义)和TXT(用于SPF、DKIM密钥、DMARC策略等的文本记录)。

没有RFC 1035,就没有标准方式将域名映射到处理其邮件的服务器。现代电子邮件中的每个身份验证和路由机制都依赖于它。

它如何工作

当发送MTA需要向user@example.com传递消息时,它遵循特定的DNS查询序列:

  1. 查询MX记录获取example.com。响应包含一个或多个邮件交换器,每个都有优先级值(低=优先)。
  2. 按优先级排序。如果多个MX记录共享相同的优先级,发送者在它们之间随机化以实现负载均衡。
  3. 将MX主机名解析为IP地址,使用A(IPv4)或AAAA(IPv6)查询。
  4. 连接到邮件服务器在解析的IP地址的端口25上,并开始SMTP会话。
  5. 如果首选MX无法访问,尝试下一个最低优先级,依此类推。
  6. 如果不存在MX记录,回退到域本身的A/AAAA记录(根据RFC 5321)。

关键技术细节

MX记录——邮件路由

MX记录是电子邮件路由的基础。它将域映射到其邮件服务器的主机名,优先级值决定了尝试的顺序:

example.com. IN MX 10 mx1.example.com. example.com. IN MX 20 mx2.example.com. example.com. IN MX 30 mx-backup.example.com.

MX目标必须是主机名,永远不是IP地址。发送MTA然后通过A/AAAA查询将该主机名解析为IP。指向CNAME的MX记录在技术上被规范禁止,尽管某些解析器容忍它。

A和AAAA记录——IP解析

一旦已知MX主机名,A记录提供IPv4地址,AAAA记录提供IPv6地址:

mx1.example.com. IN A 198.51.100.25 mx1.example.com. IN AAAA 2001:db8::25

如果MX主机名解析为A和AAAA记录,发送MTA根据自己的配置和连接性选择。大多数现代MTA在可用时优先选择IPv6,回退到IPv4。

TXT记录——电子邮件身份验证

TXT记录最初是一种将文本数据附加到域名的通用机制。电子邮件身份验证已广泛采用它们:

# SPF——哪些服务器可以为此域发送邮件 example.com. IN TXT "v=spf1 include:mailertogo.com ~all" # DKIM公钥——用于验证消息签名 selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGf..." # DMARC策略——如何处理身份验证失败的邮件 _dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"

TXT记录限制为每个字符串255个字节,但单个记录可以包含多个连接的字符串。超过255个字节的SPF记录必须以这种方式拆分。

空MX——RFC 7505

不接受电子邮件的域可以发布空MX记录——优先级为0、指向"."(根)的MX。这告诉发送服务器不要尝试传递,避免延迟和退回:

no-reply.example.com. IN MX 0 .

TTL和缓存

每个DNS记录都有TTL(生存时间),控制解析器缓存结果的时间长度。对于MX记录,典型TTL范围从300到3600秒。较低的TTL允许更快的故障转移,但会增加DNS查询量。在迁移期间,提前降低TTL,以便缓存记录在更改生效前过期。

DNS查询示例

向user@example.com传递的完整DNS查询序列:

# 第1步:查询MX记录 $ dig example.com MX +short 10 mx1.example.com. 20 mx2.example.com. # 第2步:解析首选MX主机名 $ dig mx1.example.com A +short 198.51.100.25 $ dig mx1.example.com AAAA +short 2001:db8::25 # 第3步:检查发送域的SPF $ dig example.com TXT +short "v=spf1 include:mailertogo.com ~all" # 第4步:检查DMARC策略 $ dig _dmarc.example.com TXT +short "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"

常见错误

可递送性影响

Related RFCs