1. 程式人生 > >DNS使用TCP和UDP的埠號53

DNS使用TCP和UDP的埠號53

DNS在兩種情況下使用TCP
1.如果用wireshark、sniffer或古老些的tcpdump抓包分析,會發現幾乎所有的情況都是在使用UDP,使用TCP的情況非常罕見。其實當解析器發出一個request後,返回的response中的tc刪節標誌位元位被置1時,說明反饋報文因為超長而有刪節。這是因為UDP的報文最大長度為512位元組。解析器發現後,將使用TCP重發request,TCP允許報文長度超過512位元組。既然TCP能將data stream分成多個segment,它就能用更多的segment來傳送任意長度的資料。
UDP報文的最大長度為512位元組,而TCP則允許報文長度超過512位元組。當DNS查詢超過512位元組時,協議的TC標誌出現刪除標誌,這時則使用TCP傳送。

通常傳統的UDP報文一般不會大於512位元組。
2.另外一種情況是,DNS在進行區域傳輸的時候使用TCP協議,其它時候則使用UDP協議。
DNS的規範規定了2種類型的DNS伺服器,一個叫主DNS伺服器,一個叫輔助DNS伺服器。在一個區中主DNS伺服器從自己本機的資料檔案中讀取該區的DNS資料資訊,而輔助DNS伺服器則從區的主DNS伺服器中讀取該區的DNS資料資訊。當一個輔助DNS伺服器啟動時,它需要與主DNS伺服器通訊,並載入資料資訊,這就叫做區傳送(zone transfer)。
輔域名伺服器會定時(一般時3小時)向主域名伺服器進行查詢以便了解資料是否有變動。如有變動,則會執行一次區域傳送,進行資料同步。區域傳送將使用TCP而不是UDP,一是因為資料同步傳送的資料量比一個請求和應答的資料量要多得多;二是因為TCP是一種可靠的連線,保證了資料的準確性。

DNS更多情況下使用UDP
客戶端向DNS伺服器查詢域名,一般返回的內容都不超過512位元組,用UDP傳輸即可。不用經過TCP三次握手,這樣DNS伺服器負載更低,響應更快。雖然從理論上說,客戶端也可以指定向DNS伺服器查詢的時候使用TCP,但事實上,很多DNS伺服器進行配置的時候,僅支援UDP查詢包。