【DNS系列】使用TCP传输

时间:2025-03-13 22:08:13

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重试。
  • 应用场景:关键业务域名解析(如金融、政务系统)要求高可靠性。