為什麼有的DNS使用的是UDP而不是TCP?

李坤然


回答這個問題,首先要解釋一下dns的作用。dns是域名服務的縮寫,用於將www.xxx.com此類網址或者域名翻譯成ip地址的互聯網基礎服務,當然反過來翻譯也可以。最主要的原因是互聯網的任何訪問都是基於ip地址的,但是ip地址不方便記憶,域名方便記憶,所以互聯網使用者記住域名就好了,翻譯的事情交給dns。這種網絡基礎協議使用非常之頻道,幾乎打開每個網頁都要使用一次,甚至是多次。所以協議設計必須簡單,高效。否則提供這種服務的服務器開銷會非常大,組網的成本也會變得非常大。使用udp最大的好處就是不需要進行三次握手,將tcp的最低5次交互獲取信息,變為2次交互獲取信息。此外dns報文設計的也極為簡單,幾乎沒什麼驗證或者加密的協議字段,而且完全使用明文,這都是為了減小其在提供服務時的網絡開銷。但是該協議使用到現在的弊病也非常明顯,就是因為在udp協議層和應用層沒有加密,dns解析報文非常容易被劫持,篡改。後續的dns協議將使用tcp協議,高層使用https。


山上的老白白


UDP和TCP

UDP和TCP是網絡通信的兩種基本協議,這兩種協議各有優缺點。TCP採用連接式的通信方式,可進行多數據包的傳輸,並保證多數據包的傳輸順序,防止丟包, TCP是一種信賴度較高的方式。但是,TCP傳輸延遲的問題比較明顯,而且一次則只能向一臺已建立連接的主機發送請求。TCP不適用於需要實時和多方通信的場合。UDP是非連接的傳送方式,除了傳送數據以外什麼都不做。UDP的傳輸速度較快,但容易丟包。UDP比較適合進行單一數據包的傳輸,一個數據包大小是512字節,它的傳輸速度非常快,同時,UDP還可以同時向網段內多臺主機發送數據包,這也使得UDP被很多需要實時和多方通信的應用所青睞。為了提高UDP數據傳輸的信賴度,在UDP的基礎上,人們還開發了RTP等實時傳輸協議。



DNS的前世今生

網絡通信依靠的是IP地址,但IP地址不太容易記憶。因此,人們給網絡上的主機起了一些比較容易記憶的名稱。最初,這些名稱被保存在名為hosts.txt的文本文件中,這種方法現在仍然被保留著,比如,Linux上該文件被保存在/etc/hosts下。為了共享這些信息,人們把hosts.txt保存在FTP服務器上,並通過匿名訪問實現統一管理。但是,這個文件迅速增大,同時,FTP服務器也不堪重負,於是,80年代初人們制定了DNS標準(RFC1034和RFC1035),對域名實施分佈式管理。



DNS使用的協議

域名服務器同時使用TCP和UDP。進行域名解析的時候使用UDP,此時用一個UDP包就夠了,延遲少響應快的優勢可以最大限度地發揮出來。客戶端或者輔助DNS需要同主DNS上的域名列表緩存進行同步時(一般3小時一次),則使用TCP協議,因為此時的數據已經遠超一個UDP包的大小了。



隨著IPv6的使用,域名解析的數據包已經超過了512字節,使用UDP進行域名解析就不那麼可靠了,面對這個新課題,人們正在研究擴展UDP協議的辦法。


日衝信息 黃


DNS是一種應用層協議。所有應用層協議都使用兩種傳輸層協議之一UDP和TCP。TCP是可靠的,UDP不可靠。DNS應該是可靠的,但它使用UDP,為什麼?

關於傳輸層上的TCP和UDP,有以下有趣的事實證明了上述情況。

1)UDP速度更快。TCP很慢,因為它需要3次握手。DNS服務器上的負載也是一個重要因素。DNS服務器(因為它們使用UDP)沒有保持連接。

2)DNS請求通常非常小,非常適合UDP段。

3)UDP不可靠,但可以在應用層添加可靠性。應用程序可以使用UDP,並且可以通過在應用程序層使用超時和重新發送來實現可靠性。


三僡然
關注

    三僡然


    “網絡極客”,全新視角、全新思路,帶你遨遊神奇的網絡世界。


    • 很好的一個技術問題,DNS同時支持TCP和UDP,使用的是53這個端口;

    • 那麼,很少有人知道DNS什麼時候使用TCP,什麼時候使用UDP協議。

    先來簡單認識一下TCP和UDP協議,在來看看究竟什麼時候使用吧。

    TCP/UDP協議

    TCP協議

    • TCP面向連接的可靠的傳輸協議,在數據傳輸之前需要建立三次握手;

    • 有點類似我們打的電話,通話之前需要先建立連接,雙方確認在線後在進行數據傳輸。

    UDP協議

    • UDP面向非連接的不可靠的傳輸協議,不必建立連接,直接發送數據;

    • 有點類似我們的微信,發送之間無需確定對方是否在線,只需發送信息即可。


    DNS中對TCP和UDP的使用

    通過抓包軟件,我們常看到的是UDP的數據包,那麼究竟什麼時候使用TCP協議呢?

    DNS的區域傳輸時使用TCP協議

    • 什麼是DNS的區域傳輸,DNS服務器分為主DNS服務器和輔DNS服務器;

    • 在副DNS服務器和主DNS服務器進行通信,加載DNS信息時叫做DNS的區域傳輸。

    DNS的區域傳輸使用的是TCP協議,能夠提供更加可靠的數據。

    DNS的域名解析時使用UDP協議

    • 用戶端向DNS服務器發起域名解釋,使用的是UDP協議;

    • UDP協議無需建立連接,能夠提供更快的數據訪問。


    關於DNS使用何種協議的更多問題?

    歡迎大家留言討論,喜歡的點點關注。




    網絡極客


    UDP是DNS的主要傳輸協議,事實上大部分基於報文的協議都是UDP的,TCP是流協議適合用來傳送大數據。


    分享到:


    相關文章: