DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
为什么既使用TCP又使用UDP?
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
区域传送时使用TCP,主要有一下两点考虑:
- 辅助域名服务器会定时(一般是3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
- TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
如何使用 TCP
默认使用UDP,我们也可以添加 options use-vc
使用TCP,也可以根据需求是否开启轮训 rotate
https://man7.org/linux/man-pages/man5/resolv.conf.5.html
cat /etc/resolv.conf
options use-vc
options rotate
nameserver 114.114.114.114
nameserver 114.114.115.115
use-vc (since glibc 2.14) Sets RES_USEVC in _res.options. This option forces the use of TCP for DNS resolutions. rotate Sets RES_ROTATE in _res.options, which causes round- robin selection of name servers from among those listed. This has the effect of spreading the query load among all listed servers, rather than having all clients try the first listed server first every time.
dig www.aikaiyuan.com +tcp
queries: info: client @0xxxxxxxxxxxxx 1.1.1.1#51829 (www.aikaiyuan.com): view wangtong: query: www.aikaiyuan.com IN A + (1.1.1.1)
queries: info: client @0xxxxxxxxxxxxx 1.1.1.1#39739 (www.aikaiyuan.com): view wangtong: query: www.aikaiyuan.com IN A +T (1.1.1.1)
dns日志会添加一个 T
标志 https://kb.isc.org/docs/aa-00434
转载请注明:爱开源 » DNS什么时候使用TCP?什么时候使用UDP?