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重試。
- ?應用場景:關鍵業務域名解析(如金融、政務系統)要求高可靠性。