DNS漫游指南:從網(wǎng)址到IP的奇妙之旅
當(dāng)用戶在瀏覽器中輸入特定網(wǎng)站時(shí)發(fā)生的整個(gè)端到端過程可以參考下圖:
圖片
問題: 什么是 DNS?
答案 → DNS 指的是域名系統(tǒng)(Domain Name System)。DNS 是互聯(lián)網(wǎng)的目錄,將人類可讀的域名,例如 google.com,轉(zhuǎn)換為機(jī)器可讀的 IP 地址。
問題: 高層次解釋 DNS 查詢的過程是什么?
答案 → 這個(gè)過程是一個(gè)復(fù)雜而優(yōu)雅的過程。DNS 信息被大量緩存在各個(gè)地方:
- 首先, 瀏覽器從自己的緩存中短時(shí)間查找這些信息。
- 接下來, 如果在緩存中找不到 DNS 映射,則向計(jì)算機(jī)操作系統(tǒng)進(jìn)行查詢,操作系統(tǒng)也會(huì)短時(shí)間緩存此信息。
- 接著, 如果在操作系統(tǒng)的緩存中仍然找不到 DNS 映射,則瀏覽器向互聯(lián)網(wǎng)發(fā)出查詢,查詢到 DNS 解析器。這將引發(fā)一系列請(qǐng)求,直到找到 DNS 映射為止。這一步涉及 DNS 基礎(chǔ)設(shè)施中的許多服務(wù)器。
- 最終,瀏覽器獲得了服務(wù)器的 IP 地址。
問題: 解釋一下 DNS 服務(wù)器?
答案 → DNS 層次結(jié)構(gòu)中有不同類型的 DNS 服務(wù)器,每個(gè)服務(wù)器都有不同的用途。
當(dāng)瀏覽器進(jìn)行 DNS 查詢時(shí),實(shí)際上是在詢問 DNS 解析器。
這個(gè) DNS 解析器可以來自我們的 ISP,也可以來自像 CloudFlare 的 1.1.1.1 或 Google 的 8.8.8.8 這樣的流行 DNS 提供商。
如果 DNS 解析器在其緩存中沒有答案,它會(huì)找到正確的權(quán)威名稱服務(wù)器并向其發(fā)出請(qǐng)求。
問題: 什么是“權(quán)威名稱服務(wù)器”?
答案 → “權(quán)威名稱服務(wù)器”是保存答案的服務(wù)器。當(dāng)我們更新域名的 DNS 記錄時(shí),我們實(shí)際上是在更新其權(quán)威名稱服務(wù)器。
問題: DNS 解析器如何找到權(quán)威名稱服務(wù)器?
答案 → 權(quán)威名稱服務(wù)器有三個(gè)主要級(jí)別:
- 根名稱服務(wù)器。
- 頂級(jí)域名服務(wù)器。
- 域的權(quán)威名稱服務(wù)器。
問題: 解釋一下根名稱服務(wù)器?
答案 → 請(qǐng)找到有關(guān)根名稱服務(wù)器的詳細(xì)信息:
根名稱服務(wù)器存儲(chǔ)頂級(jí)域名服務(wù)器的 IP 地址。
有 13 個(gè)邏輯根名稱服務(wù)器,每個(gè)根名稱服務(wù)器都分配了一個(gè)唯一的 IP 地址。
每個(gè)前述 IP 地址后面實(shí)際上有很多物理服務(wù)器。
通過 Anycast 的神奇之處,我們被路由到最接近我們的任何一個(gè)服務(wù)器。
問題: 解釋一下頂級(jí)域名服務(wù)器?
答案 → 請(qǐng)找到有關(guān)頂級(jí)域名服務(wù)器的詳細(xì)信息:
- 頂級(jí)域名服務(wù)器存儲(chǔ)了其下所有域的權(quán)威名稱服務(wù)器的 IP 地址。
- 有許多類型的頂級(jí)域名。例如,我們熟悉的有“.com”、“.org”、“.edu”。還有國(guó)家代碼頂級(jí)域名如“.de”和“.uk”。還有許多其他類型。
- 域的權(quán)威名稱服務(wù)器提供 DNS 查詢的權(quán)威答案。
問題: 解釋一下權(quán)威名稱服務(wù)器?
答案 → 當(dāng)我們注冊(cè)一個(gè)域時(shí),默認(rèn)情況下注冊(cè)商運(yùn)行權(quán)威名稱服務(wù)器,但我們可以將其更改為其他服務(wù)器。
請(qǐng)注意,像 AWS 和 CloudFlare 這樣的云服務(wù)提供商運(yùn)行強(qiáng)大的權(quán)威名稱服務(wù)器。
問題: 介紹一下典型 DNS 查詢的流程?
答案 → 此過程涉及以下步驟:-
第一步: 用戶在瀏覽器中輸入 google.com。
- 瀏覽器首先檢查自己的緩存以找到相應(yīng)的 IP 地址。
- 如果緩存中沒有答案,則進(jìn)行操作系統(tǒng)調(diào)用以獲取答案。操作系統(tǒng)調(diào)用很可能有自己的緩存。
第二步: 如果在操作系統(tǒng)緩存中找不到答案,它會(huì)向 DNS 解析器發(fā)出請(qǐng)求。DNS 解析器首先檢查自己的緩存。
第三步: 如果在 DNS 解析器緩存中找不到答案,或者說答案已過期,則它會(huì)請(qǐng)求根名稱服務(wù)器。
第四步: 根名稱服務(wù)器首先返回“.com”頂級(jí)域名服務(wù)器的列表。
請(qǐng)注意,由于“.com”是一個(gè)常見的頂級(jí)域名,解析器很可能已經(jīng)緩存了那些“.com”頂級(jí)域名服務(wù)器的 IP 地址。
第五步: 然后,DNS 解析器到達(dá)“.com”頂級(jí)域名服務(wù)器。
第六步: “.com”頂級(jí)域名服務(wù)器返回“google.com”的權(quán)威名稱服務(wù)器。
第七步: 然后,DNS 解析器到達(dá)“google.com”的權(quán)威名稱服務(wù)器。
第八步: “google.com”的權(quán)威名稱服務(wù)器然后返回“google.com”的 IP 地址。
第九步: 然后,DNS 解析器將 IP 地址返回給操作系統(tǒng)。操作系統(tǒng)然后將其返回給瀏覽器。
問題: 在 DNS 級(jí)別進(jìn)行更改通常需要很長(zhǎng)時(shí)間才能反映這些更改?
答案 → 這有兩個(gè)原因:
(1) DNS 傳播很慢,因?yàn)槊總€(gè) DNS 記錄都有 TTL。而且一些默認(rèn) TTL 很長(zhǎng)。
(2) 并非每個(gè) DNS 解析器都是良好的“公民”,也就是說,有些 DNS 解析器可能不遵守 TTL。
問題: 有哪些方法可以減輕這種風(fēng)險(xiǎn)?
答案 → 有兩種主要方法:
方法 #1.) 將要更改的記錄的 TTL 縮短到非常短的時(shí)間(比如 60 秒),并在實(shí)際更新發(fā)生之前提前更改。
這樣做可以讓所有 DNS 服務(wù)器有足夠的時(shí)間接收新的縮短 TTL,從而根據(jù)新的縮短 TTL 實(shí)際記錄更新可以生效。
方法 #2.) 在舊 IP 地址上保留服務(wù)器運(yùn)行一段時(shí)間。只有當(dāng)流量下降到可接受的水平時(shí),才關(guān)閉服務(wù)器。