之前有人问:我见过什么时候DNS查询使用TCP而不是UDP? 它不回答我的问题。
我一直听到的是“ 如果答案太长,DNS将使用TCP ”。 这并不能解释它是如何发生的。
所以情况如下:DNS客户端要求使用UDPparsinglogging。 UDP的logging太长了:
我一直在寻找所有的互联网上的答案,但有很多噪音(见上文),我似乎无法编写适当的谷歌查询(也不能在RFC中find的信息) 。
客户端事先并不知道响应太大,所以会通过UDP查询服务器。
服务器将通过UDP进行响应,并将尽可能包含并设置截断的标头位(“TC” http://www.networksorcery.com/enp/protocol/dns.htm )。
客户端然后可以通过TCP重新发送请求,并获得完整的响应。
另见: https : //tools.ietf.org/html/rfc5966
如果缺lessEDNS0(DNS 0的扩展机制)(请参见下文),则任何需要发送超过512字节限制的UDP响应的DNS服务器的正常行为都是为了使服务器截断响应,使其适合于在该限制内,然后在响应头中设置TC标志。 当客户端收到这样的响应时,它将TC标志作为它应该重试TCP的指示。
和: https : //www.ietf.org/rfc/rfc2181.txt
正如评论中所提到的,DNS区域传输当然总是使用TCP。