您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>電腦硬件>服務器>

dns解析過程詳解_dns解析原理 - 全文

2018年01月15日 14:55 網(wǎng)絡整理 作者: 用戶評論(0

通常 Internet 主機域名的一般結(jié)構為:主機名。三級域名。二級域名。頂級域名。 Internet 的頂級域名由 Internet網(wǎng)絡協(xié)會域名注冊查詢負責網(wǎng)絡地址分配的委員會進行登記和管理,它還為 Internet的每一臺主機分配唯一的 IP 地址。全世界現(xiàn)有三個大的網(wǎng)絡信息中心: 位于美國的 Inter-NIC,負責美國及其他地區(qū); 位于荷蘭的RIPE-NIC,負責歐洲地區(qū);位于日本的APNIC ,負責亞太地區(qū)。

解析器,或另一臺DNS服務器遞歸代表的情況下,域名解析器,協(xié)商使用遞歸服務,使用查詢頭位。解析通常需要遍歷多個名稱服務器,找到所需要的信息。然而,一些解析器的功能更簡單地只用一個名稱服務器進行通信。這些簡單的解析器依賴于一個遞歸名稱服務器(稱為“存根解析器”),為他們尋找信息的執(zhí)行工作。

DNS解析過程詳解

一. 根域

就是所謂的“?!?,其實我們的網(wǎng)址www.baidu.com在配置當中應該是www.baidu.com.(最后有一點),一般我們在瀏覽器里輸入時會省略后面的點,而這也已經(jīng)成為了習慣。

根域服務器我們知道有13臺,但是這是錯誤的觀點。

根域服務器只是具有13個IP地址,但機器數(shù)量卻不是13臺,因為這些IP地址借助了任播的技術,所以我們可以在全球設立這些IP的鏡像站點,你訪問到的這個IP并不是唯一的那臺主機。

具體的鏡像分布可以參考維基百科。這些主機的內(nèi)容都是一樣的

二. 域的劃分

根域下來就是頂級域或者叫一級域,

有兩種劃分方式,一種互聯(lián)網(wǎng)剛興起時的按照行業(yè)性質(zhì)劃分的com.,net.等,一種是按國家劃分的如cn.,jp.,等。

具體多少你可以自己去查,我們這里不關心。

每個域都會有域名服務器,也叫權威域名服務器。

Baidu.com就是一個頂級域名,而www.baidu.com卻不是頂級域名,他是在baidu.com 這個域里的一叫做www的主機。

一級域之后還有二級域,三級域,只要我買了一個頂級域,并且我搭建了自己BIND服務器(或者其他軟件搭建的)注冊到互聯(lián)網(wǎng)中,那么我就可以隨意在前面多加幾個域了(當然長度是有限制的)。

比如a.www.baidu.com,在這個網(wǎng)址中,www.baidu.com變成了一個二級域而不是一臺主機,主機名是a。

三. 域名服務器

能提供域名解析的服務器,上面的記錄類型可以是A(address)記錄,NS記錄(name server),MX(mail),CNAME等。

(詳解參見博客:域名解析中A記錄、CNAME、MX記錄、NS記錄的區(qū)別和聯(lián)系)

A記錄是什么意思呢,就是記錄一個IP地址和一個主機名字,比如我這個域名服務器所在的域test.baidu.com,我們知道這是一個二級的域名,然后我在里面有一條A記錄,記錄了主機為a的IP,查到了就返回給你了。

如果我現(xiàn)在要想baidu.com這個域名服務器查詢a.test.baidu.com,那么這個頂級域名服務器就會發(fā)現(xiàn)你請求的這個網(wǎng)址在test.baidu.com這個域中,我這里記錄了這個二級域的域名服務器test.baidu.com的NS的IP。我返回給你這個地址你再去查主機為a的主機把。

這些域內(nèi)的域名服務器都稱為權威服務器,直接提供DNS查詢服務。(這些服務器可不會做遞歸哦)

四.解析過程

那么我們的DNS是怎么解析一個域名的呢?

1.現(xiàn)在我有一臺計算機,通過ISP接入了互聯(lián)網(wǎng),那么ISP就會給我分配一個DNS服務器,這個DNS服務器不是權威服務器,而是相當于一個代理的dns解析服務器,他會幫你迭代權威服務器返回的應答,然后把最終查到IP返回給你。

2.現(xiàn)在的我計算機要向這臺ISPDNS發(fā)起請求查詢www.baidu.com這個域名了,(經(jīng)網(wǎng)友提醒:這里其實準確來說不是ISPDNS,而應該是用戶自己電腦網(wǎng)絡設置里的DNS,并不一定是ISPDNS。比如也有可能你手工設置了8.8.8.8)

3.ISPDNS拿到請求后,先檢查一下自己的緩存中有沒有這個地址,有的話就直接返回。這個時候拿到的ip地址,會被標記為非權威服務器的應答。

4.如果緩存中沒有的話,ISPDNS會從配置文件里面讀取13個根域名服務器的地址(這些地址是不變的,直接在BIND的配置文件中),

5.然后像其中一臺發(fā)起請求。

6.根服務器拿到這個請求后,知道他是com.這個頂級域名下的,所以就會返回com域中的NS記錄,一般來說是13臺主機名和IP。

7.然后ISPDNS向其中一臺再次發(fā)起請求,com域的服務器發(fā)現(xiàn)你這請求是baidu.com這個域的,我一查發(fā)現(xiàn)了這個域的NS,那我就返回給你,你再去查。

(目前百度有4臺baidu.com的頂級域名服務器)。

8.ISPDNS不厭其煩的再次向baidu.com這個域的權威服務器發(fā)起請求,baidu.com收到之后,查了下有www的這臺主機,就把這個IP返回給你了,

9.然后ISPDNS拿到了之后,將其返回給了客戶端,并且把這個保存在高速緩存中。

下面我們來用 nslookup 這個工具詳細來說一下解析步驟:

dns解析過程詳解_dns解析原理

從上圖我們可以看到:

第一行Server是:DNS服務器的主機名--210.32.32.1

第二行Address是: 它的IP地址--210.32.32.1#53

下面的Name是:解析的URL-- www.jsjzx.com

Address是:解析出來的IP--112.121.162.168

但是也有像百度這樣的DNS比較復雜的解析:

dns解析過程詳解_dns解析原理

你會發(fā)現(xiàn)百度有一個cname = www.a.shifen.com 的別名。

這是怎么一個過程呢?

我們用dig工具來跟蹤一下把(linux系統(tǒng)自帶有)

Dig工具會在本地計算機做迭代,然后記錄查詢的過程。

dns解析過程詳解_dns解析原理

第一步是向我這臺機器的ISPDNS獲取到根域服務區(qū)的13個IP和主機名[b-j].root-servers.net.。

dns解析過程詳解_dns解析原理

第二步是向其中的一臺根域服務器(Servername就是末行小括號里面的)發(fā)送www.baidu.com的查詢請求,他返回了com.頂級域的服務器IP(未顯示)和名稱,

dns解析過程詳解_dns解析原理

第三步,便向com.域的一臺服務器192.33.4.12請求,www.baidu.com,他返回了baidu.com域的服務器IP(未顯示)和名稱,百度有四臺頂級域的服務器

【此處可以用dig @192.33.4.12 www.baidu.com查看返回的百度頂級域名服務器IP地址】。

dns解析過程詳解_dns解析原理

第四步呢,向百度的頂級域服務器(202.108.22.220)請求www.baidu.com,他發(fā)現(xiàn)這個www有個別名,而不是一臺主機,別名是www.a.shifen.com。

dns解析過程詳解_dns解析原理

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

按照一般的邏輯,當dns請求到別名的時候,查詢會終止,而是重新發(fā)起查詢別名的請求,所以此處應該返回的是www.a.shifen.com而已。

但是為什么返回a.shifen.com的這個域的NS呢?

我們可以嘗試下面的這個命令:dig +trace shifen.com 看看有什么結(jié)果。。。。。。。。

dns解析過程詳解_dns解析原理

你會發(fā)現(xiàn)第三步時shifen.com這個頂級域的域名服務器和baidu.com這個域的域名服務器是同一臺主機(即:dns.baidu.com)!

當我拿到www.baidu.com的別名www.a.shifen.com的時候,我本來需要重新到com域查找shifen.com域的NS,但是因為這兩個域在同一臺NS上,所以直接向本機發(fā)起了,

shifen.com域發(fā)現(xiàn)請求的www.a.shifen.com是屬于a.shifen.com這個域的,

于是就把a.shifen.com的這個NS和IP返回,讓我到a.shifen.com這個域的域名服務器上查詢www.a.shifen.com。

于是我便從ns X .a.shifen.com中一臺拿到了一條A記錄,最終的最終也便是www.baidu.com的IP地址了?!敬颂幰部梢杂胐ig +trace www.a.shifen.com】跟蹤一下

用一個圖來說明一下(圖中第三步的全世界只有13臺是錯誤的)

dns解析過程詳解_dns解析原理

以下內(nèi)容為在虛擬機中搭建local dns服務器得到的實驗數(shù)據(jù),糾正上述結(jié)論

在上面的分析中,我們用dig工具進行了追蹤,但是dig沒有繼續(xù)追蹤當我們從baidu.com拿到cname和ns2.a.shifen.com的IP之后的事情。

我們就所以然的下結(jié)論認為local dns會向ns2.a.shifen.com請求www.a.shifenc.om。

其實這個想法是錯誤,在自己的本地搭建一個local dns,抓取整個解析過程中是所有包,看看就明白拉。

實際的結(jié)果是雖然dns.baidu.com返回了a.shifen.com域的服務器地址和IP,

但是local dns并不是直接向上述返回的IP請求www.a.shifen.com,而是再一次去請求com域,得到shifen.com域的服務器(也就是baidu.com的那四臺),

然后又請求www.a.shifen.com,返回a.shifen.com的域的服務器,最后才是去請求www.a.shifen.com,

雖然上面已經(jīng)返回了IP,但是實驗的結(jié)果就是再走一遍shifen.com域的查詢。

dns解析過程詳解_dns解析原理

上圖就是localdns在解析www.baidu.com的抓包全過程。藍色那條就是在收到cname和響應的a.shifen.com的域名服務器IP地址之后,繼續(xù)向com域請求shifen.com。

dns解析過程詳解_dns解析原理

這個圖充分說明了返回cname的同時也返回了ns2.a.shifen.com的IP。

因此總結(jié)一下便是

①本機向local dns請求www.baidu.com

②local dns向根域請求www.baidu.com,根域返回com.域的服務器IP

③向com.域請求www.baidu.com,com.域返回baidu.com域的服務器IP

④向baidu.com請求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的服務器IP

⑤向root域請求www.a.shifen.com

⑥向com.域請求www.a.shife.com

⑦向shifen.com請求

⑧向a.shifen.com域請求

⑨拿到www.a.shifen.com的IP

⑩localdns返回本機www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP

dns解析原理

一、域名系統(tǒng)

1、域名系統(tǒng)概述

域名系統(tǒng)DNS(Domain Name System)是因特網(wǎng)使用的命名系統(tǒng),用來把便于人們使用的機器名字轉(zhuǎn)換成為IP地址。域名系統(tǒng)其實就是名字系統(tǒng)。為什么不叫“名字”而叫“域名”呢?這是因為在這種因特網(wǎng)的命名系統(tǒng)中使用了許多的“域(domain)”,因此就出現(xiàn)了“域名”這個名詞。“域名系統(tǒng)”明確地指明這種系統(tǒng)是應用在因特網(wǎng)中。

我們都知道,IP地址是由32位的二進制數(shù)字組成的。用戶與因特網(wǎng)上某臺主機通信時,顯然不愿意使用很難記憶的長達32位的二進制主機地址。即使是點分十進制IP地址也并不太容易記憶。相反,大家愿意使用比較容易記憶的主機名字。但是,機器在處理IP數(shù)據(jù)報時,并不是使用域名而是使用IP地址。這是因為IP地址長度固定,而域名的長度不固定,機器處理起來比較困難。

因為因特網(wǎng)規(guī)模很大,所以整個因特網(wǎng)只使用一個域名服務器是不可行的。因此,早在1983年因特網(wǎng)開始采用層次樹狀結(jié)構的命名方法,并使用分布式的域名系統(tǒng)DNS。并采用客戶服務器方式。DNS使大多數(shù)名字都在本地解析(resolve),僅有少量解析需要在因特網(wǎng)上通信,因此DNS系統(tǒng)的效率很高。由于DNS是分布式系統(tǒng),即使單個計算機除了故障,也不會妨礙整個DNS系統(tǒng)的正常運行。

域名到IP地址的解析是由分布在因特網(wǎng)上的許多域名服務器程序共同完成的。域名服務器程序在專設的結(jié)點上運行,而人們也常把運行域名服務器程序的機器稱為域名服務器。

域名到IP地址的解析過程的要點如下:當某一個應用需要把主機名解析為IP地址時,該應用進程就調(diào)用解析程序,并稱為DNS的一個客戶,把待解析的域名放在DNS請求報文中,以UDP用戶數(shù)據(jù)報方式發(fā)給本地域名服務器。本地域名服務器在查找域名后,把對應的IP地址放在回答報文中返回。應用程序獲得目的主機的IP地址后即可進行通信。

若本地域名服務器不能回答該請求,則此域名服務器就暫時稱為DNS的另一個客戶,并向其他域名服務器發(fā)出查詢請求。這種過程直至找到能夠回答該請求的域名服務器為止。此過程在后面作進一步討論。

2、因特網(wǎng)的域名結(jié)構

由于因特網(wǎng)的用戶數(shù)量較多,所以因特網(wǎng)在命名時采用的是層次樹狀結(jié)構的命名方法。任何一個連接在因特網(wǎng)上的主機或路由器,都有一個唯一的層次結(jié)構的名字,即域名(domain name)。這里,“域”(domain)是名字空間中一個可被管理的劃分。

從語法上講,每一個域名都是有標號(label)序列組成,而各標號之間用點(小數(shù)點)隔開。

如下例子所示:

dns解析過程詳解_dns解析原理

這是中央電視臺用于手法電子郵件的計算機的域名,它由三個標號組成,其中標號com是頂級域名,標號cctv是二級域名,標號mail是三級域名。

DNS規(guī)定,域名中的標號都有英文和數(shù)字組成,每一個標號不超過63個字符(為了記憶方便,一般不會超過12個字符),也不區(qū)分大小寫字母。標號中除連字符(-)外不能使用其他的標點符號。級別最低的域名寫在最左邊,而級別最高的字符寫在最右邊。由多個標號組成的完整域名總共不超過255個字符。DNS既不規(guī)定一個域名需要包含多少個下級域名,也不規(guī)定每一級域名代表什么意思。各級域名由其上一級的域名管理機構管理,而最高的頂級域名則由ICANN進行管理。用這種方法可使每一個域名在整個互聯(lián)網(wǎng)范圍內(nèi)是唯一的,并且也容易設計出一種查找域名的機制。

域名只是邏輯概念,并不代表計算機所在的物理地點。據(jù)2006年12月統(tǒng)計,現(xiàn)在頂級域名TLD(Top Level Domain)已有265個,分為三大類:

(1)國家頂級域名nTLD:采用ISO3166的規(guī)定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記為ccTLD(cc表示國家代碼contry-code)。

(2)通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業(yè)),net(網(wǎng)絡服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。

(3)基礎結(jié)構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用于反向域名解析,因此稱為反向域名。

dns解析過程詳解_dns解析原理

3、域名服務器

如果采用上述的樹狀結(jié)構,每一個節(jié)點都采用一個域名服務器,這樣會使得域名服務器的數(shù)量太多,使域名服務器系統(tǒng)的運行效率降低。所以在DNS中,采用劃分區(qū)的方法來解決。

一個服務器所負責管轄(或有權限)的范圍叫做區(qū)(zone)。各單位根據(jù)具體情況來劃分自己管轄范圍的區(qū)。但在一個區(qū)中的所有節(jié)點必須是能夠連通的。每一個區(qū)設置相應的權限域名服務器,用來保存該區(qū)中的所有主機到域名IP地址的映射??傊?,DNS服務器的管轄范圍不是以“域”為單位,而是以“區(qū)”為單位。區(qū)是DNS服務器實際管轄的范圍。區(qū) 《= 域。

下圖是區(qū)的不同劃分方法的舉例。假定abc公司有下屬部門x和y,部門x下面有分三個分布們u,v,w,而y下面還有下屬部門t。圖a表示abc公司只設一個區(qū)abc.com。這是,區(qū)abc.com和域abc.com指的是同一件事。但圖b表示abc公司劃分為兩個區(qū):abc.com和y.abc.com。這兩個區(qū)都隸屬于域abc.com,都各設置了相應的權限域名服務器。不難看出,區(qū)是域的子集。

dns解析過程詳解_dns解析原理

下圖是以上圖b中abc公司劃分的兩個區(qū)為例,給出了DNS域名服務器樹狀結(jié)構圖。這種DNS域名服務器樹狀結(jié)構圖可以更準確地反映出DNS的分布式結(jié)構。圖中的每一個域名服務器都能夠部分域名到IP地址的解析。當某個DNS服務器不能進行域名到IP地址的轉(zhuǎn)換時,它就會設法找因特網(wǎng)上別的域名服務器進行解析。

從下圖可以看出,因特網(wǎng)上的DNS服務器也是按照層次安排的。每一個域名服務器只對域名體系中的一部分進行管轄。根據(jù)域名服務器所起的作用,可以把域名服務器劃分為下面四種不同的類型。

根域名服務器:最高層次的域名服務器,也是最重要的域名服務器。所有的根域名服務器都知道所有的頂級域名服務器的域名和IP地址。不管是哪一個本地域名服務器,若要對因特網(wǎng)上任何一個域名進行解析,只要自己無法解析,就首先求助根域名服務器。所以根域名服務器是最重要的域名服務器。假定所有的根域名服務器都癱瘓了,那么整個DNS系統(tǒng)就無法工作。需要注意的是,在很多情況下,根域名服務器并不直接把待查詢的域名直接解析出IP地址,而是告訴本地域名服務器下一步應當找哪一個頂級域名服務器進行查詢。

頂級域名服務器:負責管理在該頂級域名服務器注冊的二級域名。

權限域名服務器:負責一個“區(qū)”的域名服務器。

本地域名服務器:本地服務器不屬于下圖的域名服務器的層次結(jié)構,但是它對域名系統(tǒng)非常重要。當一個主機發(fā)出DNS查詢請求時,這個查詢請求報文就發(fā)送給本地域名服務器。

dns解析過程詳解_dns解析原理

4、域名的解析過程

注意:

一、主機向本地域名服務器的查詢一般都是采用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那么本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續(xù)發(fā)出查詢請求報文(即替主機繼續(xù)查詢),而不是讓主機自己進行下一步查詢。因此,遞歸查詢返回的查詢結(jié)果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。

二、本地域名服務器向根域名服務器的查詢的迭代查詢。迭代查詢的特點:當根域名服務器收到本地域名服務器發(fā)出的迭代查詢請求報文時,要么給出所要查詢的IP地址,要么告訴本地服務器:“你下一步應當向哪一個域名服務器進行查詢”。然后讓本地服務器進行后續(xù)的查詢。根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器,讓本地域名服務器再向頂級域名服務器查詢。頂級域名服務器在收到本地域名服務器的查詢請求后,要么給出所要查詢的IP地址,要么告訴本地服務器下一步應當向哪一個權限域名服務器進行查詢。最后,知道了所要解析的IP地址或報錯,然后把這個結(jié)果返回給發(fā)起查詢的主機。

下圖給出了這兩種查詢的差別

dns解析過程詳解_dns解析原理

下面舉一個例子演示整個查詢過程:

假定域名為m.xyz.com的主機想知道另一個主機y.abc.com的IP地址。例如,主機m.xyz.com打算發(fā)送郵件給y.abc.com。這時就必須知道主機y.abc.com的IP地址。下面是上圖a的幾個查詢步驟:

1、主機m.abc.com先向本地服務器dns.xyz.com進行遞歸查詢。

2、本地服務器采用迭代查詢。它先向一個根域名服務器查詢。

3、根域名服務器告訴本地服務器,下一次應查詢的頂級域名服務器dns.com的IP地址。

4、本地域名服務器向頂級域名服務器dns.com進行查詢。

5、頂級域名服務器dns.com告訴本地域名服務器,下一步應查詢的權限服務器dns.abc.com的IP地址。

6、本地域名服務器向權限域名服務器dns.abc.com進行查詢。

7、權限域名服務器dns.abc.com告訴本地域名服務器,所查詢的主機的IP地址。

8、本地域名服務器最后把查詢結(jié)果告訴m.xyz.com。

整個查詢過程共用到了8個UDP報文。

為了提高DNS查詢效率,并減輕服務器的負荷和減少因特網(wǎng)上的DNS查詢報文數(shù)量,在域名服務器中廣泛使用了高速緩存,用來存放最近查詢過的域名以及從何處獲得域名映射信息的記錄。

例如,在上面的查詢過程中,如果在m.xyz.com的主機上不久前已經(jīng)有用戶查詢過y.abc.com的IP地址,那么本地域名服務器就不必向根域名服務器重新查詢y.abc.com的IP地址,而是直接把告訴緩存中存放的上次查詢結(jié)果(即y.abc.com的IP地址)告訴用戶。

由于名字到地址的綁定并不經(jīng)常改變,為保持告訴緩存中的內(nèi)容正確,域名服務器應為每項內(nèi)容設置計時器并處理超過合理時間的項(例如每個項目兩天)。當域名服務器已從緩存中刪去某項信息后又被請求查詢該項信息,就必須重新到授權管理該項的域名服務器綁定信息。當權限服務器回答一個查詢請求時,在響應中都指明綁定有效存在的時間值。增加此時間值可減少網(wǎng)絡開銷,而減少此時間值可提高域名解析的正確性。

不僅在本地域名服務器中需要高速緩存,在主機中也需要。許多主機在啟動時從本地服務器下載名字和地址的全部數(shù)據(jù)庫,維護存放自己最近使用的域名的高速緩存,并且只在從緩存中找不到名字時才使用域名服務器。維護本地域名服務器數(shù)據(jù)庫的主機應當定期地檢查域名服務器以獲取新的映射信息,而且主機必須從緩存中刪除無效的項。由于域名改動并不頻繁,大多數(shù)網(wǎng)點不需花精力就能維護數(shù)據(jù)庫的一致性。

上一頁12全文

非常好我支持^.^

(17) 100%

不好我反對

(0) 0%

( 發(fā)表人:龔婷 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?