DNS服务的下层协议用的是TCP or UDP?

DNS可以跑在TCP或UDP的53端口上,但一般都是在UDP上,那么什么时候DNS需要TCP呢?

DNS报文首部中的标志字段如下:[QR][opcode][AA][TC][RD][RA][(zone)][rcode]

当TC(Truncation)字段为1时,表示应答总长度超过512字节,因为DNS在UDP模式下报文长度被限制在512个字节以下,这时只能返回前512个字节,然后DNS 客户端会使用TCP重发原来的查询请求。因为TCP能将用户的数据流分为一些报文段,因此TCP就能用多个报文段去传超过512字节的数据流或是任意长度的数据流。
 
那么什么情况下DNS的回应报文会超过512bytes呢? 虽然不常见,但也有几种情况,比如当返回的一个域名对应几十条A记录时;或者Master DNS服务器需要做outgoing的zone transfer时。
 

你可能感兴趣的:(tcp,协议,dns,UDP,下层)