跳到主要内容

7. 响应重排序 (Response Reordering)

RFC 1035 对 TCP 响应是否可以被重排序这一问题表述不明确 -- 唯一相关文本位于第 4.2.1 节, 且该文本涉及 UDP:

Queries or their responses may be reordered by the network, or by processing in name servers, so resolvers should not depend on them being returned in order.

为避免今后产生疑义, 这里澄清此要求. 无论使用何种传输协议, 权威服务器和递归解析器都 RECOMMENDED 支持并行准备响应并乱序发送响应. 无论使用何种传输协议, 存根解析器和递归解析器都 MUST 能够处理以不同于请求发送顺序到达的响应.

为达到与 UDP 相当的性能, 递归解析器 SHOULD 并行处理 TCP 查询, 并在各个响应可用后立即返回, 可能乱序返回.

由于流水线化响应可能乱序到达, 客户端 MUST 使用 Message ID 将响应与同一 TCP 连接上的未完成查询进行匹配. 如果响应包含 question section, 客户端 MUST 匹配 QNAME, QCLASS, 和 QTYPE 字段. 客户端未能正确地将响应与未完成查询匹配, 可能对互操作性造成严重后果.