DNS分別在什么情況下使用UDP和TCP
服務(wù)器dns DNS同時占用UDP和TCP端口53是公認的,這種單個應(yīng)用協(xié)議同時使用兩種傳輸協(xié)議的情況在TCP/IP棧也算是個另類。但很少有人知道DNS分別在什么情況下使用這兩種協(xié)議。
如果用wireshark、sniffer或古老些的tcpdump抓包分析,會發(fā)現(xiàn)幾乎所有的情況都是在使用UDP,使用TCP的情況非常罕見,神秘兮兮。其實當解析器發(fā)出一個request后,返回的response中的tc刪節(jié)標志比特位被置1時,說明反饋報文因為超長而有刪節(jié)。這是因為UDP的報文***長度為512字節(jié)。解析器發(fā)現(xiàn)后,將使用TCP重發(fā)request,TCP允許報文長度超過512字節(jié)。既然TCP能將data stream分成多個segment,它就能用更多的segment來傳送任意長度的數(shù)據(jù)。
另外一種情況是,當一個域的輔助域名服務(wù)器啟動時,將從該域的主域名服務(wù)器primary DNS server執(zhí)行區(qū)域傳送。除此之外,輔域名服務(wù)器也會定時(一般時3小時)向PDS進行查詢以便了解SOA的數(shù)據(jù)是否有變動。如有變動,也會執(zhí)行一次區(qū)域傳送。區(qū)域傳送將使用TCP而不是UDP,因為傳送的數(shù)據(jù)量比一個request或response多得多。
DNS主要還是使用UDP,解析器還是服務(wù)端都必須自己處理重傳和超時。DNS往往需要跨越廣域網(wǎng)或互聯(lián)網(wǎng),分組丟失率和往返時間的不確定性要更大些,這對于DNS客戶端來說是個考驗,好的重傳和超時檢測就顯得更重要了。