1. 程式人生 > >DNS分別在什麽情況下使用UDP和TCP

DNS分別在什麽情況下使用UDP和TCP

分享 pos 發現 主域名 全部 prim data font tex

DNS同一時候占用UDP和TCPport53是公認的,這樣的單個應用協議同一時候使用兩種傳輸協議的情況在TCP/IP棧也算是個另類。但非常少有人知道DNS分別在什麽情況下使用這兩種協議。

假設用wireshark、sniffer或古老些的tcpdump抓包分析,會發現差點兒全部的情況都是在使用UDP,使用TCP的情況很罕見,神奇兮兮。事實上當解析器發出一個request後。返回的response中的tc刪節標誌比特位被置1時。說明反饋報文由於超長而有刪節。這是由於UDP的報文最大長度為512字節。解析器發現後。將使用TCP重發request,TCP同意報文長度超過512字節。既然TCP能將da

ta stream分成多個segment,它就能用很多其它的segment來傳送隨意長度的數據。

第二種情況是。當一個域的輔助域名server啟動時。將從該域的主域名serverprimary DNS server運行區域傳送。除此之外。輔域名server也會定時(一般時3小時)向PDS進行查詢以便了解SOA的數據是否有變動。

如有變動。也會運行一次區域傳送。

區域傳送將使用TCP而不是UDP,由於傳送的數據量比一個request或response多得多。

DNS主要還是使用UDP,解析器還是服務端都必須自己處理重傳和超時。

DNS往往須要跨越廣域網或互聯網。分組丟失率和往返時間的不確定性要更大些,這對於DNSclient來說是個考驗,好的重傳和超時檢測就顯得更重要了。

技術分享

DNS分別在什麽情況下使用UDP和TCP