DNS解析的過程是什麼,求詳細的?

DNS服務的遠離,解析過程等


DNS原理及其解析過程

為什麼需要DNS解析域名為IP地址?

網路通訊大部分是基於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的獲取流程:
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 domain name system 主要作用就是將主機域名轉換為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資料庫中的名稱形成一個分層樹狀結構稱為域命名空間。域名包含單個標籤分隔點,例如:

im.qq.com

完全限定的域名 (FQDN) 唯一地標識在 DNS 分層樹中的主機的位置,通過指定的路徑中點分隔從根引用的主機的名稱列表。 下圖顯示與主機稱為 im 內

qq.com

DNS 樹的示例。 主機的 FQDN 是

im.qq.com

DNS 域的名稱層次結構

DNS域名稱空間的組織方式
按其功能命名空間中用來描述 DNS 域名稱的五個類別的介紹詳見下表中,以及與每個名稱類型的示例。

例如:

www.uestc.edu.cn

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伺服器地址(http://qq.com)給本地DNS伺服器。當本地DNS伺服器收到這個地址後,就會找http://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命令查詢一下http://www.sohu.com/,馬上可以看到本地DNS伺服器直接查全球13台根域中的某幾台,然後一步步解析,通過遞代的方式,直到找到www .sohu .com對應的IP為220.181.118.87。
本地DNS伺服器得到搜狐的IP後,它把這個IP返回給192.168.145.12客戶機,完成解析。

2、DNS伺服器設置轉發

因搜狐域名在第一步的驗證中使用過,有緩存,為了不受上步實驗干擾,我們在客戶機上192.168.145.12上nslookup 百度一下,你就知道。從圖上看,本地DNS把請求轉發至192.168.133.10伺服器,133.10伺服器把得到的IP返回給本地DNS,然後本地DNS再把IP告訴DNS客戶機,完成解析。

其中部分內容參考了下面的博客

http://369369.blog.51cto.com/
http://369369.blog.51cto.com/319630/812889


 1) 瀏覽器緩存

  當用戶通過瀏覽器訪問某域名時,瀏覽器首先會在自己的緩存中查找是否有該域名對應的IP地址(若曾經訪問過該域名且沒有清空緩存便存在);

  2) 系統緩存

  當瀏覽器緩存中無域名對應IP則會自動檢查用戶計算機系統Hosts文件DNS緩存是否有該域名對應IP;

  3) 路由器緩存

  當瀏覽器及系統緩存中均無域名對應IP則進入路由器緩存中檢查,以上三步均為客服端的DNS緩存;

  4) ISP(互聯網服務提供商)DNS緩存

  當在用戶客服端查找不到域名對應IP地址,則將進入ISP DNS緩存中進行查詢。比如你用的是電信的網路,則會進入電信的DNS緩存伺服器中進行查找;

  5) 根域名伺服器

  當以上均未完成,則進入根伺服器進行查詢。全球僅有13台根域名伺服器,1個主根域名伺服器,其餘12為輔根域名伺服器。根域名收到請求後會查看區域文件記錄,若無則將其管轄範圍內頂級域名(如.com)伺服器IP告訴本地DNS伺服器;

  6) 頂級域名伺服器

  頂級域名伺服器收到請求後查看區域文件記錄,若無則將其管轄範圍內主域名伺服器的IP地址告訴本地DNS伺服器;

  7) 主域名伺服器

  主域名伺服器接受到請求後查詢自己的緩存,如果沒有則進入下一級域名伺服器進行查找,並重複該步驟直至找到正確紀錄;

  8)保存結果至緩存

  本地域名伺服器把返回的結果保存到緩存,以備下一次使用,同時將該結果反饋給客戶端,客戶端通過這個IP地址與web伺服器建立鏈接。

(來自網路,原作者暫不詳)


學生黨來回答下:
dns是通常是完成域名到ip的映射,關於迭代查找順序可以在linux下參考:
dig -t A http://www.xxx.com +trace
除此:大致講講細節

1).發起dns請求的主機先查找本地內存中dns緩存沒有則會查找host文件,再沒有則會發起dns請求,請求的對象為指定的local dns(ldns),即在網路連接或者/etc/resolv.conf中指定的dns伺服器。
2).LDNS收到請求後,首先驗證查詢許可權,後查找內存(包含自己查詢的緩存和本地讀取到內存中的區域文件或者說資料庫),有則回復給客戶端,沒有則一般根據dns服務的設置,假設設置可以向根伺服器迭代查找記錄。LDNS向外開始迭代查找ADNS,即授權域名伺服器
3)找到ADNS後,ADNS根據匹配規則返回的記錄。此處略過智能dns/不考慮edns-client-subnet /許可權驗證等,沒有相關記錄則會返回一個NXDOMAIN
4)LDNS緩存查找到的記錄後返回給客戶端對應的記錄,方便下次別的客戶端過來查詢。
5)客戶端完成dns查找,並遞交給上層應用和緩存響應的記錄

學生黨上課擼字,目前就想到這麼多


找了一晚上相關資料...我最服就是這個

DNS解析過程詳解-windakcity-ChinaUnix博客

起碼基本原理和實驗過程都說清楚了


什麼是 DNS 這篇文章介紹了什麼是 DNS 以及 DNS 系統中的一些常見術語。

DNS 如何工作 則詳細闡述了 DNS 系統是如何工作的。


建議可以參考下這篇文章:
移動互聯網時代,如何優化你的網路 —— 域名解析篇
另外裡面還介紹了DNS域名劫持等相關概念和解決方案。


推薦閱讀:

《tcp/ip詳解》三卷本該怎麼看?
為什麼整個127.*網段都被拿來當做環回地址了?
為什麼HTTP標準中 webService 主動會關閉tcp連接?
TCP/IP哪些層加密了哪些沒有加密?
UNP第三版中大篇幅的介紹了SCTP,請問SCTP應用的發展趨勢怎麼樣?有沒有多投入學習的必要?

TAG:計算機網路 | DNS | 域名解析 | 網路編程 | TCPIP |