网络:DNS
DNS原理及其解析過程
為什么需要DNS解析域名為IP地址?
網(wǎng)絡(luò)通訊大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以計算機在網(wǎng)絡(luò)上進行通訊時只能識別如“202.96.134.133”之類的IP地址,而不能認識域名。我們無法記住10個以上IP地址的網(wǎng)站,所以我們訪問網(wǎng)站時,更多的是在瀏覽器地址欄中輸入域名,就能看到所需要的頁面,這是因為有一個叫“DNS服務(wù)器”的計算機自動把我們的域名“翻譯”成了相應(yīng)的IP地址,然后調(diào)出IP地址所對應(yīng)的網(wǎng)頁。
?
具體什么是DNS?
DNS( Domain Name System)是“域名系統(tǒng)”的英文縮寫,是一種組織成域?qū)哟谓Y(jié)構(gòu)的計算機和網(wǎng)絡(luò)服務(wù)命名系統(tǒng),它用于TCP/IP網(wǎng)絡(luò),它所提供的服務(wù)是用來將主機名和域名轉(zhuǎn)換為IP地址的工作。DNS就是這樣的一位“翻譯官”,它的基本工作原理可用下圖來表示。
?
DNS 的過程?
關(guān)于DNS的獲取流程:
DNS是應(yīng)用層協(xié)議,事實上他是為其他應(yīng)用層協(xié)議工作的,包括不限于HTTP和SMTP以及FTP,用于將用戶提供的主機名解析為ip地址。
具體過程如下:
①用戶主機上運行著DNS的客戶端,就是我們的PC機或者手機客戶端運行著DNS客戶端了(所以說我們的手機和電腦都是在后臺運行著DNS客戶端的)
②瀏覽器將接收到的url中抽取出域名字段,就是訪問的主機名,比如
?
http://www.baidu.com/, 并將這個主機名傳送給DNS應(yīng)用的客戶端
③DNS客戶機端向DNS服務(wù)器端發(fā)送一份查詢報文,報文中包含著要訪問的主機名字段(中間包括一些列緩存查詢以及分布式DNS集群的工作)
④該DNS客戶機最終會收到一份回答報文,其中包含有該主機名對應(yīng)的IP地址
⑤一旦該瀏覽器收到來自DNS的IP地址,就可以向該IP地址定位的HTTP服務(wù)器發(fā)起TCP連接
DNS服務(wù)的體系架構(gòu)是怎樣的?
DNS domain name system 主要作用就是將主機域名轉(zhuǎn)換為ip地址
假設(shè)運行在用戶主機上的某些應(yīng)用程序(如Webl瀏覽器或者郵件閱讀器)需要將主機名轉(zhuǎn)換為IP地址。這些應(yīng)用程序?qū)⒄{(diào)用DNS的客戶機端,并指明需要被轉(zhuǎn)換的主機名。(在很多基于UNIX的機器上,應(yīng)用程序為了執(zhí)行這種轉(zhuǎn)換需要調(diào)用函數(shù)gethostbyname())。用戶主機的DNS客戶端接收到后,向網(wǎng)絡(luò)中發(fā)送一個DNS查詢報文。所有DNS請求和回答報文使用的UDP數(shù)據(jù)報經(jīng)過端口53發(fā)送(至于為什么使用UDP,請參看為什么域名根服務(wù)器只能有13臺呢? - 郭無心的回答)經(jīng)過若干ms到若干s的延時后,用戶主機上的DNS客戶端接收到一個提供所希望映射的DNS回答報文。這個查詢結(jié)果則被傳遞到調(diào)用DNS的應(yīng)用程序。因此,從用戶主機上調(diào)用應(yīng)用程序的角度看,DNS是一個提供簡單、直接的轉(zhuǎn)換服務(wù)的黑盒子。但事實上,實現(xiàn)這個服務(wù)的黑盒子非常復雜,它由分布于全球的大量DNS服務(wù)器以及定義了DNS服務(wù)器與查詢主機通信方式的應(yīng)用層協(xié)議組成。
?
DNS為什么不采用單點的集中式的設(shè)計方式,而是使用分布式集群的工作方式?
DNS的一種簡單的設(shè)計模式就是在因特網(wǎng)上只使用一個DNS服務(wù)器,該服務(wù)器包含所有的映射,在這種集中式的設(shè)計中,客戶機直接將所有查詢請求發(fā)往單一的DNS服務(wù)器,同時該DNS服務(wù)器直接對所有查詢客戶機做出響應(yīng),盡管這種設(shè)計方式非常誘人,但他不適用當前的互聯(lián)網(wǎng),因為當今的因特網(wǎng)有著數(shù)量巨大并且在持續(xù)增長的主機,這種集中式設(shè)計會有單點故障(嗝屁一個,全球著急),通信容量(上億臺主機發(fā)送的查詢DNS報文請求,包括但不限于所有的HTTP請求,電子郵件報文服務(wù)器,TCP長連接服務(wù)),遠距離的時間延遲(澳大利亞到紐約的舉例),維護開銷大(因為所有的主機名-ip映射都要在一個服務(wù)站點更新)等問題
DNS服務(wù)器一般分三種,根DNS服務(wù)器,頂級DNS服務(wù)器,權(quán)威DNS服務(wù)器。
使用分布式的層次數(shù)據(jù)庫模式以及緩存方法來解決單點集中式的問題。
?
DNS域名稱
域名系統(tǒng)作為一個層次結(jié)構(gòu)和分布式數(shù)據(jù)庫,包含各種類型的數(shù)據(jù),包括主機名和域名。DNS數(shù)據(jù)庫中的名稱形成一個分層樹狀結(jié)構(gòu)稱為域命名空間。域名包含單個標簽分隔點,例如:
完全限定的域名 (FQDN) 唯一地標識在 DNS 分層樹中的主機的位置,通過指定的路徑中點分隔從根引用的主機的名稱列表。 下圖顯示與主機稱為 im 內(nèi)
qq.comDNS 樹的示例。 主機的 FQDN 是
im.qq.comDNS 域的名稱層次結(jié)構(gòu)
?
DNS域名稱空間的組織方式
按其功能命名空間中用來描述 DNS 域名稱的五個類別的介紹詳見下表中,以及與每個名稱類型的示例。
例如:
www.uestc.edu.cnDNS 和 Internet 域
互聯(lián)網(wǎng)域名系統(tǒng)由名稱注冊機構(gòu)負責維護分配由組織和國家/地區(qū)的頂級域在 Internet 上進行管理。 這些域名按照國際標準 3166。 一些很多現(xiàn)有縮寫,保留以供組織中,以及兩個字母和三個字母的國家/地區(qū)使用的縮寫使用下表所示。一些常見的DNS域名稱如下圖:
?
資源記錄
DNS 數(shù)據(jù)庫中包含的資源記錄 (RR)。 每個 RR 標識數(shù)據(jù)庫中的特定資源。我們在建立DNS服務(wù)器時,經(jīng)常會用到SOA,NS,A之類的記錄,在維護DNS服務(wù)器時,會用到MX,CNAME記錄。?
常見的RR見下圖:
?
Dns服務(wù)的工作過程
當 DNS 客戶機需要查詢程序中使用的名稱時,它會查詢本地DNS 服務(wù)器來解析該名稱。客戶機發(fā)送的每條查詢消息都包括3條信息,以指定服務(wù)器應(yīng)回答的問題。
● 指定的 DNS 域名,表示為完全合格的域名 (FQDN) 。
● 指定的查詢類型,它可根據(jù)類型指定資源記錄,或作為查詢操作的專門類型。
● DNS域名的指定類別。
對于DNS 服務(wù)器,它始終應(yīng)指定為 Internet 類別。例如,指定的名稱可以是計算機的完全合格的域名,如
,并且指定的查詢類型用于通過該名稱搜索地址資源記錄。
DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存信息就地應(yīng)答查詢。DNS 服務(wù)器可使用其自身的資源記錄信息緩存來應(yīng)答查詢,也可代表請求客戶機來查詢或聯(lián)系其他 DNS 服務(wù)器,以完全解析該名稱,并隨后將應(yīng)答返回至客戶機。這個過程稱為遞歸。
另外,客戶機自己也可嘗試聯(lián)系其他的 DNS 服務(wù)器來解析名稱。如果客戶機這么做,它會使用基于服務(wù)器應(yīng)答的獨立和附加的查詢,該過程稱作迭代,即DNS服務(wù)器之間的交互查詢就是迭代查詢。
DNS 查詢的過程如下圖所示。
?
1、在瀏覽器中輸入www . qq .com 域名,先查瀏覽器的緩存看是否有映射,如果有,就先調(diào)用這個IP地址映射,完成域名解析。
? 沒有的話操作系統(tǒng)會檢查自己本地的hosts文件是否有這個網(wǎng)址映射關(guān)系,如果有,就先調(diào)用這個IP地址映射,完成域名解?析。
2、如果hosts里沒有這個域名的映射,則查找本地DNS解析器緩存(路由過程中還會在路由器的緩存中查找)是否有這個網(wǎng)址映射關(guān)系,如果有,直接返回,完成域名解析。
3、如果hosts與本地DNS解析器緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系,首先會找TCP/ip參數(shù)中設(shè)置的首選DNS服務(wù)器,在此我們叫它本地DNS服務(wù)器(運行商的基站),此服務(wù)器收到查詢時,如果要查詢的域名,包含在本地配置區(qū)域資源中,則返回解析結(jié)果給客戶機,完成域名解析,此解析具有權(quán)威性。
4、如果要查詢的域名,不由本地DNS服務(wù)器區(qū)域解析,但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系,則調(diào)用這個IP地址映射,完成域名解析,此解析不具有權(quán)威性。
5、(根提示模式)如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務(wù)器的設(shè)置(是否設(shè)置轉(zhuǎn)發(fā)器)進行查詢,如果未用轉(zhuǎn)發(fā)模式,本地DNS就把請求發(fā)至13臺根DNS,根DNS服務(wù)器收到請求后會判斷這個域名(.com)是誰來授權(quán)管理,并會返回一個負責該頂級域名服務(wù)器的一個IP。本地DNS服務(wù)器收到IP信息后,將會聯(lián)系負責.com域的這臺服務(wù)器。這臺負責.com域的服務(wù)器收到請求后,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務(wù)器地址(http://qq.com)給本地DNS服務(wù)器。當本地DNS服務(wù)器收到這個地址后,就會找http://qq.com域服務(wù)器,重復上面的動作,進行查詢,直至找到www . qq .com主機。
6、(轉(zhuǎn)發(fā)模式)如果用的是轉(zhuǎn)發(fā)模式,此DNS服務(wù)器就會把請求轉(zhuǎn)發(fā)至上一級DNS服務(wù)器,由上一級服務(wù)器進行解析,上一級服務(wù)器如果不能解析,或找根DNS或把轉(zhuǎn)請求轉(zhuǎn)至上上級,以此循環(huán)。不管是本地DNS服務(wù)器用是是轉(zhuǎn)發(fā),還是根提示,最后都是把結(jié)果返回給本地DNS服務(wù)器,由此DNS服務(wù)器再返回給客戶機。?
在此過程中,DNS充當正向代理的角色
從客戶端到本地DNS服務(wù)器是屬于遞歸查詢,而DNS服務(wù)器之間就是的交互查詢就是迭代查詢。
附錄:
本地DNS配置轉(zhuǎn)發(fā)與未配置轉(zhuǎn)發(fā)數(shù)據(jù)包分析
新建一DNS,具體怎么建我這里就不再描述了,見我的上一篇博文《在Win2003中安裝bind【部署智能DNS】》
1、DNS服務(wù)器不設(shè)轉(zhuǎn)發(fā)
在192.168.145.228服務(wù)器上安裝上wireshark軟件,并打開它,設(shè)置數(shù)據(jù)包為UDP過濾,在192.168.145.12客戶機上用nslookup命令查詢一下http://www.sohu.com/,馬上可以看到本地DNS服務(wù)器直接查全球13臺根域中的某幾臺,然后一步步解析,通過遞代的方式,直到找到www .sohu .com對應(yīng)的IP為220.181.118.87。
本地DNS服務(wù)器得到搜狐的IP后,它把這個IP返回給192.168.145.12客戶機,完成解析。
?
2、DNS服務(wù)器設(shè)置轉(zhuǎn)發(fā)
因搜狐域名在第一步的驗證中使用過,有緩存,為了不受上步實驗干擾,我們在客戶機上192.168.145.12上nslookup?百度一下,你就知道。從圖上看,本地DNS把請求轉(zhuǎn)發(fā)至192.168.133.10服務(wù)器,133.10服務(wù)器把得到的IP返回給本地DNS,然后本地DNS再把IP告訴DNS客戶機,完成解析。
解析順序
1)?瀏覽器緩存
當用戶通過瀏覽器訪問某域名時,瀏覽器首先會在自己的緩存中查找是否有該域名對應(yīng)的IP地址(若曾經(jīng)訪問過該域名且沒有清空緩存便存在);
2)?系統(tǒng)緩存
當瀏覽器緩存中無域名對應(yīng)IP則會自動檢查用戶計算機系統(tǒng)Hosts文件DNS緩存是否有該域名對應(yīng)IP;
3)?路由器緩存
當瀏覽器及系統(tǒng)緩存中均無域名對應(yīng)IP則進入路由器緩存中檢查,以上三步均為客服端的DNS緩存;
4)?ISP(互聯(lián)網(wǎng)服務(wù)提供商)DNS緩存
當在用戶客服端查找不到域名對應(yīng)IP地址,則將進入ISP DNS緩存中進行查詢。比如你用的是電信的網(wǎng)絡(luò),則會進入電信的DNS緩存服務(wù)器中進行查找;
5)?根域名服務(wù)器
當以上均未完成,則進入根服務(wù)器進行查詢。全球僅有13臺根域名服務(wù)器,1個主根域名服務(wù)器,其余12為輔根域名服務(wù)器。根域名收到請求后會查看區(qū)域文件記錄,若無則將其管轄范圍內(nèi)頂級域名(如.com)服務(wù)器IP告訴本地DNS服務(wù)器;
6)?頂級域名服務(wù)器
頂級域名服務(wù)器收到請求后查看區(qū)域文件記錄,若無則將其管轄范圍內(nèi)主域名服務(wù)器的IP地址告訴本地DNS服務(wù)器;
7)?主域名服務(wù)器
主域名服務(wù)器接受到請求后查詢自己的緩存,如果沒有則進入下一級域名服務(wù)器進行查找,并重復該步驟直至找到正確紀錄;
8)保存結(jié)果至緩存
本地域名服務(wù)器把返回的結(jié)果保存到緩存,以備下一次使用,同時將該結(jié)果反饋給客戶端,客戶端通過這個IP地址與web服務(wù)器建立鏈接。
總結(jié)
- 上一篇: redis: string类型设置过期时
- 下一篇: 海量数据处理:两个大文件中的相同记录