DNS原理及其解析過程
精彩剖析
本文出自 “系統網絡運維” 部落格,請務必保留此出處http://369369.blog.51cto.com/319630/812889
網絡通訊大部分是基于TCP/IP的,而TCP/IP是基于IP位址的,是以計算機在網絡上進行通訊時隻能識别如“202.96.134.133”之類的IP位址,而不能認識域名。我們無法記住10個以上IP位址的網站,是以我們通路網站時,更多的是在浏覽器位址欄中輸入域名,就能看到所需要的頁面,這是因為有一個叫“DNS伺服器”的計算機自動把我們的域名“翻譯”成了相應的IP位址,然後調出IP位址所對應的網頁。
什麼是DNS?
DNS( Domain Name System)是“域名系統”的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,它用于TCP/IP網絡,它所提供的服務是用來将主機名和域名轉換為IP位址的工作。DNS就是這樣的一位“翻譯官”,它的基本工作原理可用下圖來表示。

DNS域名稱
域名系統作為一個層次結構和分布式資料庫 ,包含各種類型的資料,包括主機名和域名。 DNS資料庫中的名稱形成一個分層樹狀結構稱為域命名空間 。域名包含單個标簽分隔點,例如:im.qq.com。
完全限定的域名 (FQDN) 唯一地辨別在 DNS 分層樹中的主機的位置,通過指定的路徑中點分隔從根引用的主機的名稱清單。 下圖顯示與主機稱為 im 内 qq.com DNS 樹的示例。 主機的 FQDN 是 im.qq.com。
DNS 域的名稱層次結構
DNS域名稱空間的組織方式
按其功能命名空間中用來描述 DNS 域名稱的五個類别的介紹詳見下表中,以及與每個名稱類型的示例。
DNS 和 Internet 域
網際網路域名系統由名稱注冊機構負責維護配置設定由組織和國家/地區的頂級域在 Internet 上進行管理。 這些域名按照國際标準 3166。 一些很多現有縮寫,保留以供組織中,以及兩個字母和三個字母的國家/地區使用的縮寫使用下表所示。一些常見的DNS域名稱如下圖:
資源記錄
DNS 資料庫中包含的資源記錄 (RR)。 每個 RR 辨別資料庫中的特定資源。我們在建立DNS伺服器時,經常會用到SOA,NS,A之類的記錄,在維護DNS伺服器時,會用到MX,CNAME記錄。
常見的RR見下圖:
Dns服務的工作過程
當 DNS 客戶機需要查詢程式中使用的名稱時,它會查詢本地DNS 伺服器來解析該名稱。客戶機發送的每條查詢消息都包括3條資訊,以指定伺服器應回答的問題。
● 指定的 DNS 域名,表示為完全合格的域名 (FQDN) 。
● 指定的查詢類型,它可根據類型指定資源記錄,或作為查詢操作的專門類型。
● DNS域名的指定類别。
對于DNS 伺服器,它始終應指定為 Internet 類别。例如,指定的名稱可以是計算機的完全合格的域名,如im.qq.com,并且指定的查詢類型用于通過該名稱搜尋位址資源記錄。
DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存資訊就地應答查詢。DNS 伺服器可使用其自身的資源記錄資訊緩存來應答查詢,也可代表請求客戶機來查詢或聯系其他 DNS 伺服器,以完全解析該名稱,并随後将應答傳回至客戶機。這個過程稱為遞歸。
另外,客戶機自己也可嘗試聯系其他的 DNS 伺服器來解析名稱。如果客戶機這麼做,它會使用基于伺服器應答的獨立和附加的查詢,該過程稱作疊代,即DNS伺服器之間的互動查詢就是疊代查詢。
DNS 查詢的過程如下圖所示。
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伺服器位址(qq.com)給本地DNS伺服器。當本地DNS伺服器收到這個位址後,就會找qq.com域伺服器,重複上面的動作,進行查詢,直至找到www.qq.com主機。
6、如果用的是轉發模式,此DNS伺服器就會把請求轉發至上一級DNS伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS伺服器用是是轉發,還是根提示,最後都是把結果傳回給本地DNS伺服器,由此DNS伺服器再傳回給客戶機。
從用戶端到本地DNS伺服器是屬于遞歸查詢,而DNS伺服器之間就是的互動查詢就是疊代查詢。
附錄:
本地DNS配置轉發與未配置轉發資料包分析
建立一DNS,具體怎麼建我這裡就不再描述了,見我的上一篇博文《在Win2003中安裝bind【部署智能DNS】》
1、DNS伺服器不設轉發
在192.168.145.228伺服器上安裝上wireshark軟體,并打開它,設定資料包為UDP過濾,在192.168.145.12客戶機上用nslookup指令查詢一下www.sohu.com,馬上可以看到本地DNS伺服器直接查全球13台根域中的某幾台,然後一步步解析,通過遞代的方式,直到找到www.sohu.com對應的IP為220.181.118.87。
本地DNS伺服器得到www.sohu.com的IP後,它把這個IP傳回給192.168.145.12客戶機,完成解析。
2、DNS伺服器設定轉發
因www.sohu.com域名在第一步的驗證中使用過,有緩存,為了不受上步實驗幹擾,我們在客戶機上192.168.145.12上nslookup www.baidu.com。從圖上看,本地DNS把請求轉發至192.168.133.10伺服器,133.10伺服器把得到的IP傳回給本地DNS,然後本地DNS再把IP告訴DNS客戶機,完成解析。