我正在尝试从头开始实现我自己的 DNS 服务器。但是,我很难理解RFC 1035如何建议执行截断。
第 6.2 节说:
当响应太长以至于需要截断时,截断应该从响应的末尾开始,并在数据报中向前推进。因此,如果权威部分有任何数据,则保证答案部分是唯一的。
我真的无法理解这意味着什么。我认为“前进”意味着远离标题。但这与权限部分有什么关系?它说“响应结束”,我认为这意味着答案部分的结束?如果整个答案部分不适合消息怎么办?
有人可以更好地解释这个算法吗?
仅当需要 RRSet 作为响应的一部分但不能全部包含在内时,才应在响应中设置 TC 位。不应仅仅因为可能包含一些额外信息而设置 TC 位,但没有足够的空间。这包括附加部分处理的结果。在这种情况下,不适合响应的整个 RRSet 应该被忽略,并且按原样发送响应,同时清除 TC 位。如果回复的接收者需要省略的数据,它可以为该数据构造一个查询并单独发送。
在设置了 TC 的情况下,不完全适合的部分 RRSet 可能会留在响应中。当 DNS 客户端收到带有 TC 设置的回复时,它应该忽略该响应,并使用允许更大回复的机制(例如 TCP 连接)再次查询。