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

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

dns解析過(guò)程詳解_dns解析原理

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

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

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

DNS解析過(guò)程詳解

一. 根域

就是所謂的“?!保鋵?shí)我們的網(wǎng)址www.baidu.com在配置當(dāng)中應(yīng)該是www.baidu.com.(最后有一點(diǎn)),一般我們?cè)跒g覽器里輸入時(shí)會(huì)省略后面的點(diǎn),而這也已經(jīng)成為了習(xí)慣。

根域服務(wù)器我們知道有13臺(tái),但是這是錯(cuò)誤的觀點(diǎn)。

根域服務(wù)器只是具有13個(gè)IP地址,但機(jī)器數(shù)量卻不是13臺(tái),因?yàn)檫@些IP地址借助了任播的技術(shù),所以我們可以在全球設(shè)立這些IP的鏡像站點(diǎn),你訪問(wèn)到的這個(gè)IP并不是唯一的那臺(tái)主機(jī)。

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

二. 域的劃分

根域下來(lái)就是頂級(jí)域或者叫一級(jí)域,

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

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

每個(gè)域都會(huì)有域名服務(wù)器,也叫權(quán)威域名服務(wù)器。

Baidu.com就是一個(gè)頂級(jí)域名,而www.baidu.com卻不是頂級(jí)域名,他是在baidu.com 這個(gè)域里的一叫做www的主機(jī)。

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

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

三. 域名服務(wù)器

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

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

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

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

這些域內(nèi)的域名服務(wù)器都稱(chēng)為權(quán)威服務(wù)器,直接提供DNS查詢(xún)服務(wù)。(這些服務(wù)器可不會(huì)做遞歸哦)

四.解析過(guò)程

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

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

2.現(xiàn)在的我計(jì)算機(jī)要向這臺(tái)ISPDNS發(fā)起請(qǐng)求查詢(xún)www.baidu.com這個(gè)域名了,(經(jīng)網(wǎng)友提醒:這里其實(shí)準(zhǔn)確來(lái)說(shuō)不是ISPDNS,而應(yīng)該是用戶(hù)自己電腦網(wǎng)絡(luò)設(shè)置里的DNS,并不一定是ISPDNS。比如也有可能你手工設(shè)置了8.8.8.8)

3.ISPDNS拿到請(qǐng)求后,先檢查一下自己的緩存中有沒(méi)有這個(gè)地址,有的話就直接返回。這個(gè)時(shí)候拿到的ip地址,會(huì)被標(biāo)記為非權(quán)威服務(wù)器的應(yīng)答。

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

5.然后像其中一臺(tái)發(fā)起請(qǐng)求。

6.根服務(wù)器拿到這個(gè)請(qǐng)求后,知道他是com.這個(gè)頂級(jí)域名下的,所以就會(huì)返回com域中的NS記錄,一般來(lái)說(shuō)是13臺(tái)主機(jī)名和IP。

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

(目前百度有4臺(tái)baidu.com的頂級(jí)域名服務(wù)器)。

8.ISPDNS不厭其煩的再次向baidu.com這個(gè)域的權(quán)威服務(wù)器發(fā)起請(qǐng)求,baidu.com收到之后,查了下有www的這臺(tái)主機(jī),就把這個(gè)IP返回給你了,

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

下面我們來(lái)用 nslookup 這個(gè)工具詳細(xì)來(lái)說(shuō)一下解析步驟:

dns解析過(guò)程詳解_dns解析原理

從上圖我們可以看到:

第一行Server是:DNS服務(wù)器的主機(jī)名--210.32.32.1

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

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

Address是:解析出來(lái)的IP--112.121.162.168

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

dns解析過(guò)程詳解_dns解析原理

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

這是怎么一個(gè)過(guò)程呢?

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

Dig工具會(huì)在本地計(jì)算機(jī)做迭代,然后記錄查詢(xún)的過(guò)程。

dns解析過(guò)程詳解_dns解析原理

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

dns解析過(guò)程詳解_dns解析原理

第二步是向其中的一臺(tái)根域服務(wù)器(Servername就是末行小括號(hào)里面的)發(fā)送www.baidu.com的查詢(xún)請(qǐng)求,他返回了com.頂級(jí)域的服務(wù)器IP(未顯示)和名稱(chēng),

dns解析過(guò)程詳解_dns解析原理

第三步,便向com.域的一臺(tái)服務(wù)器192.33.4.12請(qǐng)求,www.baidu.com,他返回了baidu.com域的服務(wù)器IP(未顯示)和名稱(chēng),百度有四臺(tái)頂級(jí)域的服務(wù)器

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

dns解析過(guò)程詳解_dns解析原理

第四步呢,向百度的頂級(jí)域服務(wù)器(202.108.22.220)請(qǐng)求www.baidu.com,他發(fā)現(xiàn)這個(gè)www有個(gè)別名,而不是一臺(tái)主機(jī),別名是www.a.shifen.com。

dns解析過(guò)程詳解_dns解析原理

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

按照一般的邏輯,當(dāng)dns請(qǐng)求到別名的時(shí)候,查詢(xún)會(huì)終止,而是重新發(fā)起查詢(xún)別名的請(qǐng)求,所以此處應(yīng)該返回的是www.a.shifen.com而已。

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

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

dns解析過(guò)程詳解_dns解析原理

你會(huì)發(fā)現(xiàn)第三步時(shí)shifen.com這個(gè)頂級(jí)域的域名服務(wù)器和baidu.com這個(gè)域的域名服務(wù)器是同一臺(tái)主機(jī)(即:dns.baidu.com)!

當(dāng)我拿到www.baidu.com的別名www.a.shifen.com的時(shí)候,我本來(lái)需要重新到com域查找shifen.com域的NS,但是因?yàn)檫@兩個(gè)域在同一臺(tái)NS上,所以直接向本機(jī)發(fā)起了,

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

于是就把a(bǔ).shifen.com的這個(gè)NS和IP返回,讓我到a.shifen.com這個(gè)域的域名服務(wù)器上查詢(xún)www.a.shifen.com。

于是我便從ns X .a.shifen.com中一臺(tái)拿到了一條A記錄,最終的最終也便是www.baidu.com的IP地址了。【此處也可以用dig +trace www.a.shifen.com】跟蹤一下

用一個(gè)圖來(lái)說(shuō)明一下(圖中第三步的全世界只有13臺(tái)是錯(cuò)誤的)

dns解析過(guò)程詳解_dns解析原理

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

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

我們就所以然的下結(jié)論認(rèn)為local dns會(huì)向ns2.a.shifen.com請(qǐng)求www.a.shifenc.om。

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

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

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

然后又請(qǐng)求www.a.shifen.com,返回a.shifen.com的域的服務(wù)器,最后才是去請(qǐng)求www.a.shifen.com,

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

dns解析過(guò)程詳解_dns解析原理

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

dns解析過(guò)程詳解_dns解析原理

這個(gè)圖充分說(shuō)明了返回cname的同時(shí)也返回了ns2.a.shifen.com的IP。

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

①本機(jī)向local dns請(qǐng)求www.baidu.com

②local dns向根域請(qǐng)求www.baidu.com,根域返回com.域的服務(wù)器IP

③向com.域請(qǐng)求www.baidu.com,com.域返回baidu.com域的服務(wù)器IP

④向baidu.com請(qǐng)求www.baidu.com,返回cname www.a.shifen.com和a.shifen.com域的服務(wù)器IP

⑤向root域請(qǐng)求www.a.shifen.com

⑥向com.域請(qǐng)求www.a.shife.com

⑦向shifen.com請(qǐng)求

⑧向a.shifen.com域請(qǐng)求

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

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

    本文導(dǎo)航

    • 第 1 頁(yè):dns解析過(guò)程詳解_dns解析原理
    • 第 2 頁(yè):dns解析原理

非常好我支持^.^

(17) 100%

不好我反對(duì)

(0) 0%

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

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?