DNS域名系統(tǒng)如何工作?這篇文章幫你講透!
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
什么是DNS?其實,當(dāng)用戶在瀏覽器輸入“example.com”進(jìn)行訪問時,瀏覽器會自動向 DNS服務(wù)器發(fā)送請求,DNS解析器將域名轉(zhuǎn)換為IP地址,然后將 IP返回給瀏覽器,瀏覽器再訪問該 IP,因此,整個過程中用戶無需知道網(wǎng)站的 IP地址,卻可輕松訪問網(wǎng)站。如下圖: 在上述描述中,有一個核心點(diǎn)是 DNS,那么,DNS是什么呢?
網(wǎng)上有很多公用的 DNS服務(wù)器,比如 Google的“8.8.8.8”,Cloudflare 公司的“1.1.1.1”等。 DNS工作原理要了解 DNS的工作原理,需要從 DNS服務(wù)器和 DNS查詢過程兩個主要點(diǎn)來進(jìn)行講解。 DNS服務(wù)器在整個 DNS工作過程中,會經(jīng)歷 4種 DNS服務(wù)器,整個請求過程如下圖: 1.DNS解析器DNS解析器是一種服務(wù)器,負(fù)責(zé)整個域名轉(zhuǎn)IP的過程,當(dāng)收到客戶端 DNS查詢請求時,DNS解析器會根據(jù)"DNS查詢類型"來查詢對應(yīng)的 IP地址。因此,遞歸 DNS解析器是域名轉(zhuǎn)IP的 2.根域名服務(wù)器根域名服務(wù)器是將人類可讀的域名轉(zhuǎn)換為 IP地址的第一步,它管理著根域名,根域名用一個點(diǎn)(.)表示,因此,可以把根域名服務(wù)器理解成一個 全球共有 13組根域名服務(wù)器,它們以英文字母“A到M”依序命名,網(wǎng)域名稱格式為“A~M.root-servers.net”,具體信息如下表: 3.頂級域名服務(wù)器頂級域名服務(wù)器(top-level domain,簡寫 TLD),托管著一些頂級域名(比如 .com,.io, .net),它是域名轉(zhuǎn)IP的第二步,可以把頂級域名服務(wù)器理解成一個 4.權(quán)威性域名服務(wù)器權(quán)威性域名服務(wù)器(Authoritative nameserver),它是真實存儲具體域名的服務(wù)器,比如(example.com,redis.io)等,它是域名轉(zhuǎn)IP的最后一步,如果權(quán)威性域名服務(wù)器能查詢記錄,則返回 IP地址,否則做以下處理:
因此,可以把權(quán)威性域名理解成一個 需要注意:在某些情況下,主域名的權(quán)威名稱服務(wù)器可能并不直接存儲子域名的記錄,而是委托給另一個專門管理子域名的名稱服務(wù)器。 比如,CNAME記錄,子域名的記錄指向另一個域名,因此,CNAME記錄需要額外的查詢步驟,以找到實際的 IP地址或進(jìn)一步的 DNS記錄。 DNS是一個分布式系統(tǒng),內(nèi)部的域名服務(wù)器以及其保存的域名是一個樹狀結(jié)構(gòu),如下圖: DNS查找過程DNS 查找主要有以下 8個步驟:
上述 8個 DNS查找步驟可以返回“yuanjava.com”的 IP地址后,最后,瀏覽器使用該 IP地址向服務(wù)器發(fā)出 HTTP請求,獲取對應(yīng)的數(shù)據(jù)顯示在網(wǎng)頁中。 整個過程如下圖: DNS 查詢類型在上述 DNS工作原理講解時,我們提到了 DNS查詢類型,那么 DNS查詢類型有哪些呢? 通常來說,DNS查詢類型有 3種: 遞歸查詢在遞歸查詢中,DNS客戶端要求 DNS服務(wù)器(通常是遞歸解析器)返回請求的資源記錄或錯誤消息。如果遞歸解析器找不到記錄,就會返回一個錯誤。 迭代查詢在迭代查詢中,DNS客戶端允許 DNS服務(wù)器返回它能提供的最佳答案。如果查詢的 DNS服務(wù)器沒有匹配的記錄,它會返回一個指向更低層域名空間的 DNS服務(wù)器的引用,客戶端再向引用地址發(fā)出查詢。這個過程會繼續(xù),直到找到結(jié)果或出現(xiàn)錯誤或超時。 非遞歸查詢非遞歸查詢通常發(fā)生在 DNS解析器客戶端查詢 DNS服務(wù)器時,DNS服務(wù)器時能直接查到記錄,要么因為它是該記錄的權(quán)威服務(wù)器,要么因為該記錄存在于它的緩存中。通常,DNS服務(wù)器會緩存 DNS記錄以減少帶寬消耗和上游服務(wù)器的負(fù)載。 DNS解析器通過組合上述 3種查詢方式,可以優(yōu)化 DNS解析過程和縮短傳輸距離。在理想情況下,可以使用緩存的記錄數(shù)據(jù),從而使 DNS 域名服務(wù)器能夠返回非遞歸查詢。 DNS查詢實例演示為了更好的演示域名的整個 DNS查詢過程,本文通過對我的技術(shù)博客
在進(jìn)入正式的解析之前,我們先來了解下 dig指令。 dig
dig的基本語法
使用示例 dig yuanjava.com A # 返回 yuanjava.com的 IPv4地址記錄 dig yuanjava.com AAAA # 返回 yuanjava.com的IPv6地址記錄 dig yuanjava.com MX # 返回 yuanjava.com的郵件交換記錄 dig @8.8.8.8 yuanjava.com #指定 Google公共的 8.8.8.8 DNS服務(wù)器查詢 yuanjava.com dig @1.1.1.1 yuanjava.com #指定 cloudflare公共的 1.1.1.1 DNS服務(wù)器查詢 yuanjava.com 2.結(jié)果返回
講解完 dig指令后,我們正式進(jìn)入 DNS解析的實戰(zhàn)演習(xí): 使用指定的DNS服務(wù)器首先,使用 13臺根域名服務(wù)器的任意一臺進(jìn)行解析,這里以"198.41.0.4"為例,指令如下:
指令執(zhí)行如下圖:
因為根域名服務(wù)器給不了"yuanjava.com"的 IP地址,所以執(zhí)行結(jié)果中沒有 ANSWER SECTION,但是返回了.com對應(yīng)的頂級域名服務(wù)器的 IPv4和 IPv6,選擇第一臺頂級域名服務(wù)器的IPv4,繼續(xù)解析,指令如下:
指令執(zhí)行如下圖: 頂級域名服務(wù)器也給不了"yuanjava.com"的 IP地址,但返回了權(quán)威服務(wù)器的 IP地址,選擇第一臺權(quán)威域名服務(wù)器的 IP,繼續(xù)解析,指令如下:
指令執(zhí)行如下圖: 最后,權(quán)威域名服務(wù)器查到了域名對應(yīng)的 IP,到此,DNS域名解析的整個過程我們就通過手動的方法進(jìn)行了演示。 使用公開的DNS服務(wù)器使用公開的 DNS服務(wù)器,會屏蔽內(nèi)部域名服務(wù)器查詢過程,最終給出 IP地址,分別執(zhí)行下面 2個指令:
指令執(zhí)行結(jié)果截圖如下(截圖中沒有 Additional部分): 使用運(yùn)營商的DNS服務(wù)器除了上述兩種方式,我們還可以使用運(yùn)營商自動配置的 DNS服務(wù)器,比如下面為家庭 wifi網(wǎng)絡(luò)的示例截圖: DNS緩存因為一個域名對應(yīng)的 IP地址變動的頻率很低,所以,可以將域名和 IP的映射關(guān)系緩存起來并且設(shè)置一定的失效時間,從而提高數(shù)據(jù)請求的性能和可靠性。那么,DNS緩存有哪些呢? 瀏覽器的DNS緩存現(xiàn)代 Web瀏覽器的設(shè)計,默認(rèn)會將 DNS記錄緩存一段時間,當(dāng)發(fā)出對 DNS記錄的請求時,能從瀏覽器緩存拿到記錄,大大加速了 DNS解析過程。 在 Chrome瀏覽器中,可以通過 操作系統(tǒng)的DNS緩存除了瀏覽器會設(shè)置 DNS緩存外,在每一層的域名服務(wù)器也會設(shè)計對應(yīng)的 DNS緩存,緩存查詢的過程如下:
總結(jié)本文通過在瀏覽器里面輸入一個域名為例,詳細(xì)地分析了 DNS的工作原理,另外,為了更好地理解 DNS域名解析過程,我們通過 3種方式來手動演示整個過程。 最后,歸納一下,通過本文你可以學(xué)到什么:
參考資料Building a Recursive DNS Resolver
該文章在 2024/5/29 10:12:47 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |