天天看點

DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

介紹域名

網域名稱(英語:Domain Name,簡稱:Domain),簡稱域名、網域。

域名是網際網路上某一台計算機或計算機組的名稱。

域名可以說是一個 IP 位址的代稱,目的是為了便于記憶。例如,wikipedia.org 是一個域名。人們可以直接通路 wikipedia.org 來代替 IP 位址,然後 DNS 系統就會将域名轉化成便于機器識别的 IP 位址。這樣,人們隻需要記憶 wikipedia.org 這一串帶有特殊含義的字元,而不需要記憶沒有含義的數字。

域名的結構

域名由多個部分組成,每個部分由 “.” 點分隔。最右邊的一個部分是頂級域名,從右側到左側隔一個點依次下降一層。每個部分可以包含 1 到 63 個位元組。域名的總長度則不能超過 253 個位元組。域名裡的英文字母不區分大小寫。

DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

整個網際網路中的域名空間結構就像一棵倒置的樹,如上圖所示。

  • 這棵域名樹的根稱為根 DNS 伺服器,在 Internet 上總共有 13 個根 DNS 伺服器(每個根 DNS 伺服器都是一個叢集),大部分位于北美。
  • 根往下的第一級節點稱為頂級域(Top Level Domain,TLD),目前共有 7 個這樣的頂級域名,分别是:1.com 商業組織;2.edu 教育機構;3.gov 政府部門;4.mil 軍事部門;5.net 網絡基礎設施;6.org 非營利性組織;7.int 國際組織。每個頂級域由對應的頂級域(TLD)伺服器負責管理,除了以上 7 個頂級域名,還有各個國家的頂級域名(如 cn、uk、ca 和 fr 等)也在這一級别進行管理。
  • 每個頂級域再向下展開分支,每個分支域都是一個子域。比如 CDNbook.com 是頂級域 com 的子域。CDNbook.com 也可以再包含子域,比如 a.CDNbook.com、b.CDNbook.com。**一個域就是域名空間中的一棵子樹。域的名字也就是這棵子樹的根節點的域名。**例如在下圖中,CDN.com 域的頂端節點就是 CDN.com。
DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

在每個域中,會有一台或多台伺服器用來儲存這個域名空間的所有資訊,并且響應關于該域名空間的所有請求。這種伺服器就叫做這個域的權威域名伺服器(也常稱為授權域名伺服器),它擁有這個域所有的域名資訊。

每個域都可以分為多個子域,而每個權威域名伺服器可以給一個或多個區域進行解析。但即使各個區域被授權給同一個權威域名伺服器,它們之間仍然是彼此獨立的。例如,CDNbook.com 被劃分為三個子域:a.CDNbook.com、b.CDNbook.com 和 c.CDNbook.com。每個子域都可以自行維護自己的權威域名伺服器。當一個子域被授權出去,它原本所屬的域就不再包含它的資料(A 記錄),而隻留下一些指針,這些指針指向相應子域的權威域名伺服器(NS 記錄)。如果有一個詢問該子域資訊的請求,所傳回的應該是該子域的權威域名伺服器清單。

一個域可以有多台權威域名伺服器,但是隻有一台是主域名伺服器,這台主域名伺服器負責向其他輔域名伺服器分發每個域名空間的更新資訊。

根 DNS 伺服器、頂級 DNS 伺服器和權威 DNS 伺服器共同組成了 DNS 伺服器層,共同維護分布式、階層化的 DNS 資料庫。

DNS 系統采用樹形設計的一個主要目的就是為了分散管理。而這種分散管理是通過 “授權” 來實作的。對域進行授權,就是域管理組織把子域授權給其他組織進行管理,由子域管理者來維護子域中的資料,可以自由改動資料,包括對子域再進行劃分,再授權。

域名解析

域名解析包括正向解析和反向解析。

  • 正向解析是把域名轉換為 IP 位址。這需要由專門的域名解析伺服器來完成。
  • 反向解析是把 IP 位址轉換為域名。反向解析比較罕見,.arpa 頂級域名專門用于這類用途。

本地 DNS 伺服器收到用戶端的域名解析請求後,會采用遞歸查詢方式(recursive query)或者疊代查詢方式(iterative query)向 DNS 系統中的其他遠端 DNS 伺服器發送查詢請求。

  • 疊代查詢方式指的是:每次查詢請求都由【本地 DNS 伺服器】發起,收到答複後再由【本地 DNS 伺服器】向下一個遠端 DNS 伺服器發送查詢請求,直到獲得結果。
  • 遞歸查詢方式指的是:【本地 DNS 伺服器】向【根 DNS 伺服器】發送查詢請求,并從【根 DNS 伺服器】擷取域名的解析結果。
DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

在實際應用中,疊代查詢方式是比較常見的。下圖描述的就是一個典型的 DNS 遞歸查詢過程。

當使用者在浏覽器的位址欄中輸入 URL 并點選回車後,浏覽器首先判斷 URL 中的是 IP 位址,還是域名。如果 URL 中的是域名,那麼首先要做的就是域名解析。

域名解析的流程:首先是浏覽器檢視浏覽器的緩存。如果浏覽器中沒有該域名的緩存,那麼浏覽器詢問【本地 DNS 解析器】,【本地 DNS 解析器】首先檢視本地 DNS 緩存。如果本地 DNS 緩存中沒有該域名的緩存,那麼【本地 DNS 解析器】請求【本地 DNS 伺服器】進行域名解析。如果【本地 DNS 伺服器】中沒有該域名的緩存,那麼【本地 DNS 伺服器】向 DNS 系統中的其他遠端 DNS 伺服器發送查詢請求。

不能把資料永遠放在緩存中,緩存中的資料都被設定了一個生存時間(time to live,TTL)。超過 TTL 時間的資料會被清除,需要再重新擷取新的資料。

DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

以【本地 DNS 解析器】請求【本地 DNS 伺服器】進行 www.CDNbook.com 域名的解析為例:

(1)【本地 DNS 解析器】向【本地 DNS 伺服器】發送域名解析請求。(8)【本地 DNS 解析器】收到來自【本地 DNS 伺服器】的應答。

(2)【本地 DNS 伺服器】向【根 DNS 伺服器】發送域名解析請求,【根 DNS 伺服器】傳回 .com 頂級域的域名伺服器清單(多條 NS 記錄)。

(4)【本地 DNS 伺服器】收到應答後,在 .com 頂級域的域名伺服器清單中選擇一個 IP 位址,向這個 IP 位址對應的 DNS 伺服器發送域名解析請求,.com 頂級域的域名伺服器傳回 CDNbook.com 域的域名伺服器清單。

(6)【本地 DNS 伺服器】收到應答後,在 CDNbook.com 域的域名伺服器清單中選擇一個 IP 位址,向這個 IP 位址對應的 DNS 伺服器發送域名解析請求,CDNbook.com 域的域名伺服器傳回 www.CDNbook.com 域的 A 記錄清單(多個 IP 位址)。

(8)【本地 DNS 伺服器】收到應答後,在 www.CDNbook.com 域的 A 記錄清單中選擇一個 IP 位址,将該 IP 位址傳回給【本地 DNS 解析器】。

記錄類型

域名伺服器是根據資源記錄來對域名解析請求進行應答的。在 DNS 系統中,最常見的資源記錄是 Internet 類記錄。

資源記錄是一個包含了下列字段的 4 元組:Name、Value、Type、TTL。

  • TTL 是該記錄的生存時間,它決定了資源記錄應當從緩存中删除的時間
  • Type 是該記錄的類型
  • Name 和 Value 的值取決于 Type

Internet 類資源記錄主要分為以下幾種類型:

  • A 記錄,Address:A 記錄用于描述域名到 IP 位址的映射關系。将域名指向一個 IPv4 位址。同一個域名,可以有多條 A 記錄。也就是說,一次 DNS 查找可以傳回多個 IP 位址。
  • NS 記錄,Name Server:NS 記錄是域名伺服器記錄,用于指定該域名由哪個 DNS 伺服器來進行解析。每個區域可以有多個域名伺服器,是以可以有多條 NS 記錄。如果需要把子域名交給其他的 DNS 伺服器來進行解析,就需要添加 NS 記錄。
  • SOA 記錄,Start Of Authority:SOA 記錄用于指定該區域的權威域名伺服器。每個區域允許且隻允許有一個 SOA 記錄,它是資源記錄的第一個條目。
  • CNAME 記錄,Canonical Name:CNAME 記錄是規範名稱,用于描述域名到規範名稱的映射關系。将域名指向另外一個域名,指向的域名是規範名稱。【本地 DNS 伺服器】收到 CNAME 記錄後,它會用 CNAME 記錄中的規範名稱來重新查詢新域名的 A 記錄。
  • PTR 記錄,Pointer Record:PTR 記錄是逆向查詢記錄,傳回一個域名,它用于根據 IP 位址查詢域名(反向解析)。逆向查詢的一個應用是:可以防止垃圾郵件,即驗證發送郵件的 IP 位址,是否真的有它所聲稱的域名。
DNS 域名解析介紹域名域名的結構域名解析記錄類型域名的應用參考資料

假設有上述的 DNS zone:當要查詢 bar.example.com 的 A 記錄時,域名解析伺服器會查到對應的 CNAME 記錄,即foo.example.com,随即開始查詢 foo.example.com 域名的 A 記錄,查到 192.0.2.23 傳回結果。

CNAME 的意思是真實名稱。正确的了解是:bar.example.com 的真實名稱是 foo.example.com。請求通路bar.example.com 的用戶端會得到 foo.example.com 傳回的結果。

域名的應用

域名伺服器可以将域名映射為 IP 位址。基于這個特點,域名解析除了可以用于浏覽器之外,域名解析還可以用于以下的場景:

  • 基于域名實作重定向:使用域名代替 IP 位址。可以讓對外提供服務的域名不變,而主機的 IP 位址任意變動。當主機有情況需要下線、遷移時,可以更改 DNS 記錄,讓域名映射到其他的 IP 位址。
  • 基于域名搭建名字伺服器:因為域名是一個名字空間,是以可以使用 BIND 9 等開源軟體搭建一個内網的本地 DNS 伺服器作為名字伺服器。這樣我們開發的各種内部服務就可以都用域名來标記,比如資料庫服務都用域名 “mysql.inner.app”,商品服務都用 “goods.inner.app”,發起網絡通信時使用域名,不必再使用寫死的 IP 位址了。
  • 基于域名實作負載均衡,進而提高系統的可用性:基于域名實作負載均衡有兩種方式:
    • 第一種方式:域名解析傳回多個 IP 位址,用戶端收到多個 IP 位址後,自己根據負載均衡政策選擇一個 IP 位址使用,把請求分發到不同的伺服器。
    • 第二種方式:域名解析内部配置負載均衡政策,在 DNS 端把請求分發到不同的伺服器。

參考資料

《CDN 技術詳解》雷葆華著

CDN技術詳解-雷葆華著-微信讀書 (qq.com)

DNS 原理入門 - 阮一峰的網絡日志 (ruanyifeng.com)

06 | 域名裡有哪些門道? (geekbang.org)

繼續閱讀