DNS 请求默认是使用 UDP 的,但是有时也能看到TCP 的请求,服务器上也会侦听 TCP 的 53 端口,这又是怎么一回事呢。
原因是响应内容太长了。
比如下边这个响应,可以看到它的Truncated标志位置1,代表消息被截断了:
一般服务器默认消息超过 512 Bytes 就会响应截断消息,这种情况下,也可以顺带响应被截断的部分数据,但也有服务器直接就不返回任何内容了,所以最好再次发起TCP重新请求下:
但是,如果你用dig命令探测可能探测不到这个过程
来看dig发出的请求:
dig请求会携带更多的消息,其中就有指定消息大小的部分,我们看UDP的响应:
如果你想用dig命令测试TCP请求,可以带+tcp参数(或+vc参数)
dig +tcp www.baidu.com
如果使用nslookup,强制tcp请求,可以加-vc参数
nslookup -vc www.baidu.com
注:相反的参数是notcp、novc