你在瀏覽器輸入 example.com 時,電腦不能只靠這串文字直接找到遠端主機。真正建立網路連線時,通常需要 IP address。於是,在 HTTP request 出發以前,系統往往要先回答另一個問題:這個名稱現在對應到哪裡?
DNS(Domain Name System)就是負責這類名稱解析的分散式系統。它讓網站可以使用穩定、可讀的 domain,而不用要求每個人記住一串 IP。
一句話先記住:domain 是名稱;DNS 負責查詢這個名稱目前指向什麼。
一次查詢不是直接問「全世界的 DNS」
你的裝置通常會先把問題交給 recursive resolver。它可能由 ISP、公司網路或公共 DNS 服務提供。resolver 如果已有仍有效的快取,就能直接回答;沒有的話,才繼續向 DNS 階層查詢。
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 的別名。
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 更後面。
那網址、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 最重要的角色不是「載入網站」,而是先回答:這個名字,我現在應該去哪裡找?
你現在應該能分清楚
- Domain:人可讀的名稱。
- DNS:分散式名稱解析系統。
- Resolver:替 client 遞迴查詢並快取答案。
- Authoritative nameserver:對特定 zone 提供權威 DNS 資料。
- DNS record:名稱對應的資料,例如 A、AAAA、CNAME。
- TTL:答案可以被 cache 多久。
理解 DNS 之後,再看 CDN、HTTPS、reverse proxy 或 Cloudflare Pages,會更容易知道每一層到底負責哪一件事。