DNS講解

原文鏈接 https://www.jianshu.com/p/62a9f68a2573

DNS介紹

DNS 是網絡上非常重要的一個概念,不僅僅是碼農任何上網的人都會接觸它,DNS 是非常複雜,這篇文章希望以比較簡單的方式去理解它,讓非碼農也能瞭解基本概念,從而有效的去運用它。

DNS 是幹什麼的?

當我們在瀏覽器輸入一個網址訪問資源的時候,瀏覽器怎麼知道資源在哪兒呢?必須要有一個 IP 地址,瀏覽器才能和放置資源的服務器連接。而 DNS 的作用其實就是翻譯域名,獲取這個域名對應的 IP 地址。
那爲什麼不直接使用 IP 地址訪問服務器的資源,原因很簡單,IP 地址太難記憶,另外服務器綁定的 IP 可能變化,而瀏覽器是不知道這個變化的。
對於我們上網的人來說,誰在提供 DNS 服務呢?或者說誰在翻譯這個 IP 地址呢?不同的操作系統有不同的方式。
在 Windows 中,可以在控制面板網絡連接中配置,一般有兩種方式:

自定義配置一個 DNS 服務器
由 ISP 或者局域網 DHCP 協議進行分配。

這種 DNS 服務器稱爲本地 DNS 服務器,由它來負責 IP 解析工作。
一旦配置好本地 DNS 服務器後,在電腦上任何軟件(比如瀏覽器)想使用 DNS 翻譯功能就會向本地 DNS 服務器發出請求。
在 Linux 中,是通過 /etc/resolv.conf 文件配置本地 DNS 服務器。
對於大部分上網的人來說,瞭解本地 DNS 服務器如何配置就可以了,一般 DNS 服務器會自動分配,比如在家裏你通過寬帶上網,使用的本地 DNS 服務器一般是這個 ISP 提供的。

DNS 是一個數據庫

DNS 首先是一個巨大的數據庫,這個數據庫是有層級關係的,而且是分佈在世界各地的。那麼域名是如何映射到這個數據庫中的呢?首先來理解幾個概念。

  1. 域名

一個域名錶示你擁有了互聯網的一個資源,通過域名也能瞭解到一個組織的主人是誰,比如 google.com 表示谷歌這個組織擁有的一個互聯網資源。
子域名,主要是一個企業爲了規範化自己的域名系統和服務,而在一級域名下擴展出來的名稱系統。newyingyong.cn 這個域名是我的,每開發一個項目就會新擴展一個子域名,比如 http://www.rss.newyingyong.cn 這個服務的子域名就是 rss.newyingyong.cn
其實對於 .com 域名來說,google.com 就是它的子域名,這體現了域名系統或者說 DNS 系統的層級性。

2.主機

通過域名,我們能夠定義一個主機,比如大部分 WEB 服務,默認的主機名就是 WWW。
google.com 其實隱藏了默認的主機名,實際上等同 www.google.com ,www 是 google.com 這個域名下定義的虛擬主機。

3.Fully Qualified Domain Name(FQDN)

FQDN 叫做絕對域名名稱,由主機名和域名組合而成,注意一個完整的 FQDN 末尾有一個點號。比如 www.google.com. 代表一個 FQDN。
現在來說說 DNS 系統的層級數據庫,DNS 最頂層是點號(.),叫做 ROOT 根域名。接下來是 TLDs,表示頂級域名,頂級域名分爲兩種類型:

.com,.org 這樣的叫做一般通用頂級域(gTLDs)
.cn,.jp 這樣的叫做國家頂級域(ccTLDs)。

層級系統的意思表示在這個數據庫中,根域名服務器管理頂級域服務器,而頂級域管理一級域名服務器,最後一個域名服務器管理具體主機的 IP 信息。

實體 DNS 服務器

上面說了 DNS 是一個數據庫,那麼這個數據庫的組成部分就是具體的服務器,這些服務器來維護 DNS 信息。而維護是通過授權方式的,而且是一級授權。

  1. 根域名服務器

根域名服務器由 ICANN 來管理,在全球有 13 個根域名服務器,每個根域名服務器由多臺機器。分佈在全球各地,查詢量非常大,所以分佈在各地是有原因的。根域名服務器主要負責解析 TLD 服務器。

  1. TLD 服務器

TLD 服務器負責解析 Domain-Level 服務器。

  1. Domain-Level 服務器

這個服務器一般告之某個域名解析出來的 IP 地址,比如 www.google.com ,由負責管理 google.com 域名的服務器解析 IP 地址,這個層級的服務器叫做 Domain-Level 服務器 。
通過上面看出,每個層級的域名服務器負責管理他能管轄的域名,而且他也只管理他下一級的,不會跨級別管理,原因就是授權。這相當於一個公司,CEO 管理總經理,總經理管理經理,經理管理具體的員工,一般不會跨級別管理,因爲事情做的太多就沒有效率了。
以上的服務器也統稱爲權威域名服務器。他們來負責維護具體 DNS 的信息。

DNS 是如何具體工作的

客戶端會發送一個命令告訴本地 DNS 服務器,告訴我 www.google.com. 這個 FQDN 的 IP 地址(A 記錄),然後就等着拿結果,這種查詢方式叫做遞歸查詢。注意區分本地域名服務器和權威域名服務器的區別。本地域名服務器理論上只是查詢,沒有維護 DNS 信息。
本地 DNS 服務器最終會找出具體的 IP 地址,但是這個步驟不是一步到位的,可能有很多步驟,這種查詢方式叫做迭代查詢。
本地 DNS 服務器也叫做 Hinet 服務器,也叫做 Resolving Name Server。這樣的服務器一般由本地 ISP 提供或者由其他組織提供,比如 Google 的 8.8.8.8 域名服務器。

本地 DNS 服務器發現沒有 www.google.com 域名對應的 IP 地址,就會向根域名服務器發出查詢任務。根域名服務器說,我只知道 .com 這個 TLD 服務器的 DNS 信息,你去問他把,並且返回 .com 服務器的地址。
.com 服務器說我不知道,但是知道這個域名由谷歌自己維護(Domain-Level 服務器 )的,你去問他把,並且返回谷歌 NS 服務器的 IP 地址,由它來告訴調用者。
本地 DNS 服務器聯繫上 Google 的 NS 服務器後,NS 這臺機器上的 DNS 軟件說,這是我維護的,然後把具體的 IP 地址告訴了本地 DNS 服務器。本地 DNS 服務器會緩存這一結果,然後告訴客戶端(比如瀏覽器)。

這裏出現了兩個新的名詞,Resolving Name Server 負責具體的 DNS 查詢工作(也叫本地 DNS 服務器),中國很多 ISP 很不厚道,提供的 DNS 服務器會進行 DNS 污染操作,假如爲了安全可以使用一些其他組織的 DNS 服務器,比如 8.8.8.8
另外一個服務器叫做 NS 服務器,這個告訴調用者,具體那臺機器維護某個域名的 DNS 信息(比如 A 記錄),爲了獲取某個域名的 IP 地址,需要去向它查詢,理解身上有些拗口。

上個例子中根域名服務器或者頂級域名服務器告訴調用者(本地 DNS 服務器)去具體某個 NS 服務器去查詢 DNS 信息,而最後到了 Google 的 NS 服務器後,這臺 NS 服務器就會直接解析域名對應的 A 記錄了。
申請域名後應該幹什麼

對於個人用戶來說,申請域名後(newyingyong.cn)(同時有了個 IP),就要進行域名的解析工作了,比如說我在萬網(域名註冊機構)買了個域名,阿里雲買了個主機,默認就是在萬網(域名管理機構)進行域名解析工作的,萬網的 NS 服務器名稱是 dns1.iidns.com.,在萬網(域名管理機構)後臺,配置域名(實際上是主機)和 IP 地址即可。

假如你要更改一個域名管理機構(比如 DNSPod)負責域名及誒工作,你的域名註冊機構管理後臺配置 NS 服務器是 DNSpod 就可以了,由他們負責域名的解析工作。

發現沒有,這裏體現了 DNS 系統的授權特性,授權域名管理機器去管理這個域名的 DNS 信息。

在這裏插入圖片描述

那麼背後發生了什麼?一旦由 DNSPod 負責解析工作,它會做兩件事情:

告訴它的上一級域名服務器,newyingyong.cn 這個域名的解析工作由我的 NS 服務器來管理,請登記下。
在自己的 DNS 服務器上增加一條記錄,記錄相應主機的 A 記錄(當然還有其他的類型的 DNS 記錄,比如 MX 記錄)。

假如是一家大型公司,比如有很多一級域名或者很多子域名,可能想自己維護 DNS 信息,那麼就要自己搭建一個 DNS 服務器,然後在自己的域名管理機構配置 NS 服務器即可,這個 NS 服務器的地址就是你自己的服務器,負責維護域名的 DNS 信息。比如 sina.com.cn 的域名服務器就是自己維護的,名稱是 ns1.sina.com.cn.,這臺服務器地址是 202.106.184.166。
那麼爲什麼大型機構希望維護自己的域名信息呢?

方便管理,假如不自己維護域名信息,域名生效時間和緩存時間都是不可控的,而自己搭建可以避免這些問題。
動態管理,比如通過一些軟件來更新自己的 DNS 信息更方便,還可以做動態域名解析。

DNS 是個協議

DNS 是個數據庫,更是個協議,默認使用 UDP 協議,端口號是 53,很多客戶端(比如瀏覽器和 dig)通過這個協議,查詢出了某個域名的 A 記錄。
而 DNS 服務器爲了管理,一般使用 BIND 這個軟件來提供具體的服務(服務器端)。
這篇文章簡單講了下 DNS 的基本概念,有點枯燥,後面會通過 dig 命令能理解 DNS,也會將如何搭建 DNS 服務器。
大家可以思考下,DNS 的緩存是什麼概念,DNS 污染是什麼,什麼是動態 DNS,什麼是泛域名,爲什麼 NS 服務器一般有多臺,爲什麼自己電腦上配置本地的 DNS 服務器有多臺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章