Sta*_*tic 40 domain-name-system rfc
在有人问之前:我已经看到DNS 查询何时使用 TCP 而不是 UDP?它没有回答我的问题。
我一直听到的是“如果答案太长,DNS 将使用 TCP ”。这并不能解释它是如何发生的。
所以情况是这样的:DNS 客户端要求使用 UDP 解析记录。UDP 的记录太长:
我一直在互联网上寻找答案,但有很多噪音(见上文),我似乎无法为此编写正确的 Google 查询(就此而言,我也无法在 RFC 中找到信息) .
fak*_*ker 50
客户端事先不知道响应会太大,所以会通过UDP查询服务器。
服务器将通过 UDP 响应,并将尽可能多地包含并设置截断的标头位(“TC” http://www.networksorcery.com/enp/protocol/dns.htm)。
然后客户端可以通过 TCP 重新发送请求并获得完整的响应。
另见:https : //tools.ietf.org/html/rfc5966
在没有 EDNS0(DNS 0 的扩展机制)(见下文)的情况下,任何需要发送超过 512 字节限制的 UDP 响应的 DNS 服务器的正常行为是服务器截断响应以使其适合在该限制内,然后在响应标头中设置 TC 标志。当客户端收到这样的响应时,它会将 TC 标志作为它应该通过 TCP 重试的指示。
和:https : //www.ietf.org/rfc/rfc2181.txt
正如评论中提到的,当然 DNS 区域传输始终使用 TCP。