DNS這位“翻譯官”是如何轉換域名和IP地址的?

DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用於TCP/IP網絡,它所提供的服務是用來將主機名和域名轉換為IP地址的工作。你可以把它想象成一本巨大的電話簿。

一、什麼是DNS?

DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用於TCP/IP網絡,它所提供的服務是用來將主機名和域名轉換為IP地址的工作。你可以把它想象成一本巨大的電話簿。

舉例來說,如果你要訪問域名math.stackexchange.com,首先要通過DNS查出它的IP地址是151.101.129.69。

DNS就是這樣的一位“翻譯官”,它的基本工作原理可用下圖來表示:

DNS這位“翻譯官”是如何轉換域名和IP地址的?

二、DNS域名空間結構

域名系統作為一個層次結構和分佈式數據庫,包含各種類型的數據,包括主機名和域名。DNS數據庫中的名稱形成一個分層樹狀結構稱為域命名空間。

DNS這位“翻譯官”是如何轉換域名和IP地址的?

根域:DNS域名使用中規定由尾部句點'.'來指定名稱位於根或者更高層次的域層次結構。

頂級域:用來指示某個國家、地區或者組織。採用三個字符,如com -> 商業公司,edu -> 教育機構,net -> 網絡公司,gov -> 非軍事政府機構等等。

二級域:個人或者組織在Internet使用的註冊名稱。採用兩個字符,如:cn -> 代表中國,jp -> 日本,uk -> 英國,hk -> 香港等等。

主機:主機名處於域名空間結構中的最底層,主機名和域名結合構成FQDN,主機名是FQDN最左端的部分。

三、DNS的獲取流程

DNS是應用層協議,事實上他是為其他應用層協議工作的,包括不限於HTTP和SMTP以及FTP,用於將用戶提供的主機名解析為IP地址。

具體過程如下:

①用戶主機上運行著DNS的客戶端,就是我們的PC機或者手機客戶端運行著DNS客戶端了。

②瀏覽器將接收到的url中抽取出域名字段,就是訪問的主機名,比如http://www.baidu.com/,並將這個主機名傳送給DNS應用的客戶端。

③DNS客戶機端向DNS服務器端發送一份查詢報文,報文中包含著要訪問的主機名字段(中間包括一些列緩存查詢以及分佈式DNS集群的工作)。

④該DNS客戶機最終會收到一份回答報文,其中包含有該主機名對應的IP地址。

⑤一旦該瀏覽器收到來自DNS的IP地址,就可以向該IP地址定位的HTTP服務器發起TCP連接。

四、DNS服務的體系架構

DNS服務的作用:把域名解析為IP地址,將IP地址解析為域名。

假設運行在用戶主機上的某些應用程序(如Webl瀏覽器或者郵件閱讀器)需要將主機名轉換為IP地址。這些應用程序將調用DNS的客戶機端,並指明需要被轉換的主機名。(在很多基於UNIX的機器上,應用程序為了執行這種轉換需要調用函數gethostbyname())。用戶主機的DNS客戶端接收到後,向網絡中發送一個DNS查詢報文。所有DNS請求和回答報文使用的UDP數據報經過端口53發送(至於為什麼使用UDP,請參看為什麼域名根服務器只能有13臺呢? - 郭無心的回答)經過若干ms到若干s的延時後,用戶主機上的DNS客戶端接收到一個提供所希望映射的DNS回答報文。這個查詢結果則被傳遞到調用DNS的應用程序。因此,從用戶主機上調用應用程序的角度看,DNS是一個提供簡單、直接的轉換服務的黑盒子。但事實上,實現這個服務的黑盒子非常複雜,它由分佈於全球的大量DNS服務器以及定義了DNS服務器與查詢主機通信方式的應用層協議組成。

五、DNS為什麼不採用單點的集中式的設計方式,而是使用分佈式集群的工作方式?

DNS的一種簡單的設計模式就是在因特網上只使用一個DNS服務器,該服務器包含所有的映射,在這種集中式的設計中,客戶機直接將所有查詢請求發往單一的DNS服務器,同時該DNS服務器直接對所有查詢客戶機做出響應。儘管這種設計方式非常誘人,但它不適用當前的互聯網。因為當今的因特網有著數量巨大並且在持續增長的主機,這種集中式設計會有單點故障,通信容量(上億臺主機發送的查詢DNS報文請求,包括但不限於所有的HTTP請求,電子郵件報文服務器,TCP長連接服務),遠距離的時間延遲(澳大利亞到紐約的舉例),維護開銷大(因為所有的主機名-IP映射都要在一個服務站點更新)等問題。

DNS服務器一般分三種,根DNS服務器,頂級DNS服務器,權威DNS服務器。

六、DNS服務的工作過程

當 DNS 客戶機需要查詢程序中使用的名稱時,它會查詢本地DNS 服務器來解析該名稱。客戶機發送的每條查詢消息都包括3條信息,以指定服務器應回答的問題。

指定的 DNS 域名,表示為完全合格的域名 (FQDN) 。
指定的查詢類型,它可根據類型指定資源記錄,或作為查詢操作的專門類型。
DNS域名的指定類別。
對於DNS 服務器,它始終應指定為 Internet 類別。例如,指定的名稱可以是計算機的完全合格的域名,如im.qq.com,並且指定的查詢類型用於通過該名稱搜索地址資源記錄。

DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存信息就地應答查詢。DNS 服務器可使用其自身的資源記錄信息緩存來應答查詢,也可代表請求客戶機來查詢或聯繫其他 DNS 服務器,以完全解析該名稱,並隨後將應答返回至客戶機。這個過程稱為遞歸。

另外,客戶機自己也可嘗試聯繫其他的 DNS 服務器來解析名稱。如果客戶機這麼做,它會使用基於服務器應答的獨立和附加的查詢,該過程稱作迭代,即DNS服務器之間的交互查詢就是迭代查詢。

DNS的查詢過程如下所示:

DNS這位“翻譯官”是如何轉換域名和IP地址的?

1、在瀏覽器中輸入www . qq .com 域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成域名解析。

2、如果hosts裡沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,如果有,直接返回,完成域名解析。

3、如果hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/ip參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。

4、如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。

5、如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(http://qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找http://qq.com域服務器,重複上面的動作,進行查詢,直至找到www . qq .com主機。

6、如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS服務器用是是轉發,還是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。

從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間就是的交互查詢就是迭代查詢。


分享到:


相關文章: