DNS 默认使用UDP协议(端口53)进行通信,但在以下场景中会切换到TCP协议(端口53):
1. 响应数据过大(超过512字节)
- UDP限制:DNS的UDP协议默认限制单个数据包大小为512字节。如果响应数据(如包含多条记录的查询结果)超过此限制,服务器会强制使用TCP。
- 机制:
- 当UDP响应被截断(Truncated)时,客户端会重新发起TCP请求。
- 例如:查询包含大量记录的域(如大型企业的子域名列表)。
[root@master ~]# dig cccccccccc.yunqi1215.asia txt @clare.dnspod.net ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> cccccccccc.yunqi1215.asia txt @clare.dnspod.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41590 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;cccccccccc.yunqi1215.asia. IN TXT ;; ANSWER SECTION: cccccccccc.yunqi1215.asia. 600 IN TXT "222222222222222222277777777777777777777777777777777777777777777777777777777777777777777777777777777777777777766666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666sssssssssssssssssssssssssssssssssssssss" "ssssssssssssssssssssssssssssssssllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" "nnnnnnnnnnfdpgkfbgfonbmgfpbmefpbp,pwr" ;; AUTHORITY SECTION: yunqi1215.asia. 86400 IN NS clare.dnspod.net. yunqi1215.asia. 86400 IN NS sagitta.dnspod.net. ;; Query time: 30 msec ;; SERVER: 112.80.181.45#53(112.80.181.45) ;; WHEN: 一 3月 25 14:32:44 CST 2024 ;; MSG SIZE rcvd: 678
2. 区域传输(Zone Transfer)
- 全量传输(AXFR)和增量传输(IXFR):主从DNS服务器之间的区域传输必须使用TCP。
- 原因:
- 区域文件通常较大(可能包含数千条记录),需要可靠传输。
- TCP的流控、重传机制保证数据完整性。
3. 高可靠性场景
- TCP的重传机制:在不可靠网络环境中,若UDP请求多次失败(如丢包),客户端可能改用TCP重试。
- 应用场景:关键业务域名解析(如金融、政务系统)要求高可靠性。