你在瀏覽器輸入 example.com 時,電腦不能只靠這串文字直接找到遠端主機。真正建立網路連線時,通常需要 IP address。於是,在 HTTP request 出發以前,系統往往要先回答另一個問題:這個名稱現在對應到哪裡?

DNS(Domain Name System)就是負責這類名稱解析的分散式系統。它讓網站可以使用穩定、可讀的 domain,而不用要求每個人記住一串 IP。

一句話先記住:domain 是名稱;DNS 負責查詢這個名稱目前指向什麼。

一次查詢不是直接問「全世界的 DNS」

你的裝置通常會先把問題交給 recursive resolver。它可能由 ISP、公司網路或公共 DNS 服務提供。resolver 如果已有仍有效的快取,就能直接回答;沒有的話,才繼續向 DNS 階層查詢。

Browser / OS → Recursive resolver → DNS hierarchy → Answer

Root、TLD、Authoritative Nameserver 在做什麼?

DNS 是分層的。resolver 不知道答案時,可以從 root nameserver 得知某個頂級網域該往哪裡問,再向例如 .com 的 TLD nameserver 查詢,最後找到該 domain 的 authoritative nameserver。

Authoritative nameserver 才是對該 DNS zone 提供權威答案的一方。它保存或服務網站設定的 DNS records,例如 A、AAAA、CNAME、MX 等。

A、AAAA 與 CNAME 差在哪?

A record 把名稱指向 IPv4 address;AAAA record 對應 IPv6 address。CNAME 則不是直接放 IP,而是讓一個名稱成為另一個 canonical name 的別名。

A: app.example.com → 203.0.113.10
CNAME: www.example.com → app.example.net

因此「DNS 就是把網址轉成 IP」是方便入門的說法,但不完整。DNS record 能表達的資訊不只 IP,郵件路由、驗證文字與服務發現也會使用 DNS。

TTL:為什麼改完 DNS 不一定立刻生效?

DNS response 通常帶有 TTL(Time To Live)。resolver 可以在 TTL 允許的時間內保存答案,不必每次都重新向 authoritative server 查詢。

這降低 DNS 基礎設施的負載,也讓解析更快;代價是你修改 record 後,世界各地仍可能暫時使用先前 cached 的答案。所謂「DNS propagation」很多時候其實就是不同 cache 在不同時間到期。

DNS 和 HTTP 是兩個不同階段

DNS 成功,只代表 client 得到了後續連線所需的資訊。接下來通常還要建立 TCP 或 QUIC 連線、進行 TLS,再送出 HTTP request。網站回傳 404 或 500,通常已經比 DNS 更後面。

DNS resolve → 建立連線 → TLS → HTTP request → HTTP response

那網址、Domain、DNS 是同一個東西嗎?

不是。URL 可以包含 scheme、domain、port、path、query 等部分;domain 只是其中可能的一段。DNS 解析的是名稱,而不是整條 URL。像 /explore/ 這種 path 不會交給 DNS 決定。

換 DNS Resolver 會讓網路變快嗎?

有時會改善名稱解析延遲或可靠性,但 DNS 只佔完整載入流程的一部分。解析完成後,下載速度仍取決於 server、CDN、網路路由、頻寬與網站本身。把 resolver 換掉,不等於整條 Internet connection 都換掉。

DNS 也不是網站託管

買了 domain、設定 DNS,不代表網站內容已經存在。Hosting 負責實際提供網站或應用;DNS 負責讓名稱指向適當的位置。Cloud hosting、CDN 與 DNS 常被同一平台包在一起,所以介面上容易看起來像同一件事。

把整個流程串起來

當你輸入一個網站網址時,可以先把它想成:瀏覽器從 URL 取出 hostname;系統透過 DNS 找到可連線的目標;建立網路與 TLS 連線;最後才用 HTTP 請求真正的頁面。

所以 DNS 最重要的角色不是「載入網站」,而是先回答:這個名字,我現在應該去哪裡找?

你現在應該能分清楚

理解 DNS 之後,再看 CDN、HTTPS、reverse proxy 或 Cloudflare Pages,會更容易知道每一層到底負責哪一件事。