我想知道当 DNS 中的域名具有多个具有不同生存时间 (TTL) 的 MX 记录时会发生什么?
例如,如果这些是 MX 记录,该怎么办example.com
?
- TTL = 3 天,优先级 = 1,结果 = mx1-slow.example.com
- TTL = 60 秒,优先级 = 1,结果 = mx1-fast.example.com
- TTL = 1 天,优先级 = 2,结果 = mx2.example.com
- TTL = 1 小时,优先级 = 3,结果 = mx3-hour.example.com
- TTL = 60 秒,优先级 = 3,结果 = mx3-fast.example.com
- TTL = 2 天,优先级 = 3,结果 = mx3-slow.example.com
如果邮件传输代理正在向此域发送消息(其中某些 MX 服务器可能正在工作,而某些可能不工作),并且结果缓存了 2 分钟?2 小时?1.5 天?2.5 天,会发生什么情况?它是否需要按照所有 MX 记录中最小的 TTL(在本例中为 60 秒)进行查找,如果已经过了这么长时间,则重新查找所有 MX 记录,忽略剩余 MX 记录上较长的 TTL?或者缓存实际上是否以某种方式考虑了所有不同的 TTL?如果考虑了所有 TTL,您能否提供一些示例场景来说明其如何工作?
答案1
您描述的场景不是有效的记录集。
单个 RRset(特定名称、类别、类型组合的记录集)不允许其各个记录具有不同的 TTL。但是,如果在与权威服务器通信时遇到此类(无效)记录集,则应使用最小的 TTL,在其他情况下,应完全忽略该记录集。
从DNS 规范说明(自 1997 年起):
5.2. RRSet 中 RR 的 TTL
资源记录也有生存时间 (TTL)。RRSet 中的 RR 可能具有不同的 TTL。目前尚未发现有其他更好的方法可以实现这一点。但是,这可能会导致缓存服务器发出部分回复(未标记为“截断”),其中 RRSet 中部分(但不是全部)RR 的 TTL 已过期。因此,RRSet 中使用不同的 TTL 已被弃用,RRSet 中所有 RR 的 TTL 必须相同。
如果客户端收到包含来自具有不同 TTL 的 RRSet 的 RR 的响应,则应将其视为错误。如果相关 RRSet 来自此数据的非权威来源,则客户端应忽略该 RRSet,如果需要这些值,则尝试从权威来源获取它们。配置为将所有查询发送到一个或多个特定服务器的客户端应将这些服务器视为权威服务器。如果权威来源发送了这种格式错误的 RRSet,则客户端应将 RR 视为所有目的,就好像 RRSet 中的所有 TTL 都已设置为 RRSet 中最低 TTL 的值。在任何情况下,服务器都不能发送 TTL 不相等的 RRSet。