System Design - DNS

DNS 階層

DNS 並不是單一伺服器,而是整個基礎架構,由一堆 name servers 在不同的階層中
在 DNS 階層中,主要有分成四個類型的伺服器類型

  1. DNS Resolver (Recursive Resolver): 作用是接收如網頁瀏覽器、應用程式等的查詢,並將請求轉發給其他 DNS name servers
  2. Root-level name servers: 維護 top-level domain, ex:  .com  .edu  .us  .io  等等。舉例來說,當你查詢 maper.io 的 IP 時,root-level name servers 會回傳一個擁有 .io 的 top-level domain name server 的 IP 地址列表給你。更簡單來說,root-level name servers 會告訴你 .io 要去哪個 top-level domain name server 中找,有點像是索引的概念。
  3. Top-level domain name servers: 這些伺服器有著 authoritative name servers 的 ip。
  4. Authoritative name servers: Authoritative name servers 是 name servers 查詢中的最後一站。如果 Authoritative name servers 能夠存取請求的記錄,則其會將已請求主機名稱的 IP 位址傳回到發出初始請求的 DNS 解析程式,也就是回傳網頁/應用程式的主機 ip。

Iterative vs recursive query resolution

有兩個執行 DNS query 的方式
  1. Iterative: 本地端向本地/ISP, root, top-level domain, authoritative name servers 依序請求 ip 位置。
  2. Recursive: 本地 -> root -> top-level-domain -> authoritative -> top-level-domain -> root -> ISP/本地

Caching

快取指的是將常常被請求的 resource records 暫時存起來,
快取減少請求的回應,也減少了網路流量,也可以減少DNS 基礎設施的大量查詢負擔,
快取可以實作於瀏覽器、瀏覽器、作業系統、在用戶的網路內的本地域名伺服器,
和 ISP 的 DNS Resolver。


可以透過以下幾個指令來觀察
  1. nslookup www.google.com
  2. dig www.google.com

nslookup 的結果

 Non-authoritative answer  指的是這個回應不是由 google 的 authoritative name server 提供的結果,而是由第二、第三、第四手的被設定要回應我們查詢的 name servers 所回應的。
例如,我們的大學或辦公室 DNS resolver、我們的 ISP name servers、我們的 ISP 的 ISP name servers 等等。它可以被認為是 Google authoritative name servers 返回的快取版本。如果我們嘗試多個域名,我們會發現大部分時間我們都會收到快取的回應。








留言

這個網誌中的熱門文章

[MySQL] schema 與資料類型優化

[Nginx] 使用轉址做負載平衡