System Design - DNS
DNS 階層
DNS 並不是單一伺服器,而是整個基礎架構,由一堆 name servers 在不同的階層中在 DNS 階層中,主要有分成四個類型的伺服器類型
- DNS Resolver (Recursive Resolver): 作用是接收如網頁瀏覽器、應用程式等的查詢,並將請求轉發給其他 DNS name servers
- 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 中找,有點像是索引的概念。
- Top-level domain name servers: 這些伺服器有著 authoritative name servers 的 ip。
- Authoritative name servers: Authoritative name servers 是 name servers 查詢中的最後一站。如果 Authoritative name servers 能夠存取請求的記錄,則其會將已請求主機名稱的 IP 位址傳回到發出初始請求的 DNS 解析程式,也就是回傳網頁/應用程式的主機 ip。
Iterative vs recursive query resolution
有兩個執行 DNS query 的方式
- Iterative: 本地端向本地/ISP, root, top-level domain, authoritative name servers 依序請求 ip 位置。
- Recursive: 本地 -> root -> top-level-domain -> authoritative -> top-level-domain -> root -> ISP/本地
Caching
快取指的是將常常被請求的 resource records 暫時存起來,
快取減少請求的回應,也減少了網路流量,也可以減少DNS 基礎設施的大量查詢負擔,
快取減少請求的回應,也減少了網路流量,也可以減少DNS 基礎設施的大量查詢負擔,
快取可以實作於瀏覽器、瀏覽器、作業系統、在用戶的網路內的本地域名伺服器,
和 ISP 的 DNS Resolver。
可以透過以下幾個指令來觀察
和 ISP 的 DNS Resolver。
可以透過以下幾個指令來觀察
- nslookup www.google.com
- 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 返回的快取版本。如果我們嘗試多個域名,我們會發現大部分時間我們都會收到快取的回應。
留言
張貼留言