DNS 系列(二):DNS 記錄及工作方式,你瞭解嗎?

在上一篇《DNS 系列(一):爲什麼更新了 DNS 記錄不生效?》中,我們主要講解了 DNS 和 DNS 傳播,知道了網絡通信主要通過 IP 地址來進行,而域名系統(DNS)則是保證用戶在瀏覽器中輸入域名之後,可以訪問到對應的網站服務器。那這個過程到底是如何進行的呢?

DNS記錄

DNS 記錄是位於權威 DNS 服務器中的指令,提供域和主機名相關的詳細信息,包括哪些 IP 地址與該域關聯,以及如何處理對該域的請求。

當我們在瀏覽器中輸入網站地址時,瀏覽器首先要會在計算機內部緩存中查找屬於該域名的 IP 地址,如果沒有再到網絡提供商的數據庫或其他 DNS 服務器中查找。

DNS 記錄由一系列 DNS 語法編寫的文本文件組成。每個 DNS 記錄都有一個單獨的行。記錄通常遵循以下格式:

<name> <ttl> <class> <type> <rdlength> <radata>
  • < name >:指域,即用戶在瀏覽器中輸入的名稱

  • < ttl >:TTL 代表“生存時間”,表示記錄可以臨時存儲在緩存中的時間(以秒爲單位)

  • < class >:理論上,DNS 記錄有不同的類別。然而實際中,記錄常是 Internet(即 IN),

  • < type >:不同的記錄類型

  • < rdlength >:指定後續數據字段的大小(可選值)

  • < rdata >:解析出的域名信息(例如 IP 地址)

我們可以使用 Dig 命令查詢 DNS 記錄信息,例如:www.example.com

www.example.com.  69288  IN  A  93.184.216.34

這代表着該條記錄可以在緩存中存儲 69288 秒,它涉及 Internet 上的 DNS 記錄(IN),並指向了 A 類記錄,同時域名被解析爲 IP 地址(93.184.216.34)。

DNS 記錄類型

上面我們提到了 DNS 記錄有不同的類型,這其實是指記錄中的信息類型,比較常見的有以下幾種:

A 記錄

Internet 上大部分 DNS 解析都是通過 A 類記錄進行的,並指向一個 IPv4 地址。通過這個記錄,用戶在瀏覽器中輸入域名後,客戶端向相應的 IP 地址發送 HTTP 請求。由於 IPv4 地址的大小始終爲 4 個字節,因此 rdlength 的值始終爲 4。

AAAA 記錄

AAAA 記錄,也稱爲“quad A”,功能與 A 記錄相同。但是,它指向的是 IPv6 地址。因爲 IPv6 的長度爲 128 位(16 字節),所以這裏也預定義了 rdlength 爲 16。

SOA 記錄

SOA 記錄包含區域文件或 DNS 服務器的區域信息。 因爲 DNS 區域傳輸是將 DNS 記錄數據從一個主名稱服務器發送到一個輔名稱服務器的過程,而 SOA 記錄會首先被傳輸,所以每個 DNS 區域都需要一個 SOA 記錄。

CNAME 記錄

CNAME 記錄(規範名稱記錄)是將記錄值指向一個別名域,而不是 IP 地址。對於這種類型,rdata 字段會填充一個域名,該域名可以繼續指向下一個域名或 IP 地址。

MX 記錄

MX 記錄是指郵件交換或 SMTP 電子郵件服務器,MX 記錄可以存在多個,通過指定優先級來確定使用順序。

PTR 記錄

PTR 記錄(指針)是允許反向查找的 DNS 記錄。與“A”記錄恰好相反,它可以通過 IP 地址來查找對應的域名。

NS 記錄

NS (域名服務器)記錄會明確特定區域的管轄權。一個域通常會有多個 NS 記錄,這些記錄可指示該域的主要和輔助域名服務器。正確配置的 NS 記錄能告訴互聯網可從哪裏找到域的 IP 地址,從而完成加載網站或應用程序。

TXT 記錄

TXT 記錄包含了供用戶或機器可讀信息的文本。一個域可以有許多 TXT 記錄。

SRV 記錄

通過 SRV 記錄,服務器可以爲一些特定的服務提供主機和端口信息,例如即時通訊等。一些互聯網協議需要使用 SRV 記錄才能運作。

除了這些常見的 DNS 記錄,還有很多不常用的記錄類型,例如:APL、CAA、DNAME 等等。瞭解了 DNS 記錄,下一步就來詳細看看 DNS 是如何請求到這些記錄的。

DNS 請求

每當我們在瀏覽器的搜索欄中輸入網址時,都會先向本地名稱服務器(Local DNS)發出請求。Local DNS 是一個檢查記錄是否在本地緩存中的組件,它的查詢是遞歸/迭代查詢。

客戶端和 Local DNS 是遞歸查詢,這是最常見的一種查詢方式。具體來說就是如果 Local DNS 不能響應請求,它會代替客戶端向其他根域名服務器繼續發出查詢請求,即替客戶端繼續查詢,而不是讓客戶端自己進行下一步查詢。

而 Local DNS 和其他名稱服務器之間是迭代查詢。具體表現爲如果 Local DNS 請求的 DNS 服務器無法回答查詢,那麼它會返回下一個 DNS 服務器的地址作爲應答。然後 Local DNS 再向下一個 DNS 服務器發送一個新請求,繼續查找直至查到記錄。

所以 Local DNS 的查詢總體過程是首先將之前獲取過的 IP 地址記錄到緩存中,並根據請求將結果傳遞給客戶端。如果所需的記錄不在 Local DNS 緩存中,則請求將轉發到對應網絡服務商的 DNS 服務器。如果當前 DNS 服務器無法應答本次查詢,它會將請求轉發到不同的 DNS 服務器。

需要注意的是遞歸查詢通常會比迭代查詢更快。因爲遞歸 DNS 服務器會緩存它執行的每個查詢結果,並將結果保存一個 TTL 時間。當遞歸解析器接收到其緩存中已有的 IP 地址查詢時,它可以快速將結果提供給客戶端,而無需與其他 DNS 服務器進行通信。但是,在開放的 DNS 服務器上允許遞歸查詢會產生安全漏洞,這種配置容易遭到 DNS 放大攻擊和 DNS 緩存中毒。

瞭解了DNS的記錄,下次大家再遇到網站無法訪問的錯誤信息時,就可以優先排查是不是 DNS 出現了問題。如果你是網站管理者,可以查看 DNS 記錄是否配置錯誤,或者 DNS 服務器是否無法響應。如果你是網站訪問者,可以嘗試切換網絡或者更換本地 DNS 來解決。

推薦閱讀

又拍雲 Redis 的改進之路

關於 GIN 的路由樹

什麼是走索引?

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