爲何須要DNS解析域名爲IP地址?web
網絡通信大部分是基於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服務器。dom
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 查詢的過程以下圖所示。
一、在瀏覽器中輸入www . qq .com 域名,操做系統會先檢查本身本地的hosts文件是否有這個網址映射關係,若是有,就先調用這個IP地址映射,完成域名解析。
二、若是hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,若是有,直接返回,完成域名解析。
三、若是hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/ip參數中設置的首選DNS服務器,在此咱們叫它本地DNS服務器,此服務器收到查詢時,若是要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具備權威性。
四、若是要查詢的域名,不禁本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具備權威性。
五、若是本地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主機。
六、若是用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器若是不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不論是本地DNS服務器用是是轉發,仍是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。
從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間就是的交互查詢就是迭代查詢。
附錄:
本地DNS配置轉發與未配置轉發數據包分析
新建一DNS,具體怎麼建我這裏就再也不描述了,見個人上一篇博文《在Win2003中安裝bind【部署智能DNS】》
一、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客戶機,完成解析。
二、DNS服務器設置轉發
因搜狐域名在第一步的驗證中使用過,有緩存,爲了避免受上步實驗干擾,咱們在客戶機上192.168.145.12上nslookup 百度一下,你就知道。從圖上看,本地DNS把請求轉發至192.168.133.10服務器,133.10服務器把獲得的IP返回給本地DNS,而後本地DNS再把IP告訴DNS客戶機,完成解析。
解析順序
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服務器創建連接。
其中部份內容參考了下面的博客
http://369369.blog.51cto.com/
http://369369.blog.51cto.com/319630/812889