「『從瀏覽器輸入 URL 到頁面顯示,中間發生了什麼?』——這是軟體工程師面試最常見的問題之一。」
很多人能說「DNS 解析、TCP 連線、發 HTTP Request」,但面試官要的是細節: DNS 是怎麼查的?TCP 為什麼要三次握手?CDN 是在哪個環節介入的? 這篇把每一步完整拆解,讓你下次不只是說個大概。
整體流程鳥瞰
輸入 URL 到頁面出現,一共走過 6 個大步驟。這篇專注在前三步(DNS、TCP、IP), HTTP 在 EP.01 已經說過,HTTPS/TLS 在 EP.03 繼續。
DNS 解析
本篇重點把 google.com 這個「名字」翻譯成 142.250.185.14 這個「地址」
建立 TCP 連接(三次握手)
本篇重點確認你和伺服器之間的連線是通的,雙方都準備好收發資料
TLS 握手(HTTPS 才有)
EP.03協商加密方式、驗證憑證,建立加密通道,詳見 EP.03
發出 HTTP Request
EP.01GET / POST 請求,帶上 Headers(Cookie、Accept 等),詳見 EP.01
伺服器處理並回應
後端範疇路由匹配、DB 查詢、業務邏輯、組成 HTML/JSON 回傳
瀏覽器解析 HTML + 渲染
前端渲染建構 DOM Tree、載入 CSS/JS、計算 Layout、繪製畫面
DNS——網路的「電話本」
生活化比喻:你知道一間餐廳叫「麥當勞」,但你不知道它的地址。 你查了 Google Maps,得到地址「台北市信義路 X 號」。DNS 就是網路的 Google Maps——把名字(域名 google.com) 轉換成地址(IP 142.250.185.14)。沒有 DNS,你就必須記住每個網站的 IP, 沒有人做得到。
DNS 解析的完整過程
查詢 DNS 不是問一個伺服器那麼簡單,而是一層一層往上問, 直到有人知道答案。越高層的 DNS 伺服器知道的越少, 但最終一定能找到。
為什麼要分這麼多層?
全球有幾億個域名。如果只有一台 DNS 伺服器,每次查詢都打去同一台, 早就被流量打掛了。分層設計讓查詢分散, 快取讓大部分查詢在 ISP 層就結束,不需要每次都問到 Root。
TTL(Time to Live)
每條 DNS 記錄都有 TTL,單位是秒。TTL 300 = 快取 5 分鐘後過期。 過期後下次查詢才會重新問。遷移網站時記得先把 TTL 調低(例如 60 秒), 這樣換 IP 後才能快速生效。
常見 DNS Record 類型
CNAME vs A Record 怎麼選?
如果你的服務 IP 會變動(例如 Vercel、Cloudflare 托管),用 CNAME 指向他們給你的 hostname。 這樣他們改 IP 你不需要動任何設定。 如果你的伺服器 IP 固定(例如自架 VPS),用 A Record 直接指 IP 比較乾淨。 注意:根域名(example.com,不帶 www)通常不能設 CNAME,要用 A Record 或特殊的 ALIAS 記錄。
IP 地址——你在哪裡
比喻:IP 地址就像快遞地址。 IPv4 是舊式地址(四段數字,如 192.168.1.1), 總共只有 42 億個,早就快用完了。IPv6 是新式地址,長度更長、數量幾乎無限。 Port 就像「幾樓幾號」——同一台電腦可以同時運行網頁伺服器、資料庫、SSH 等多個服務, 用 Port 區分哪個服務要接哪個連線。
IPv4 vs IPv6
IPv6
常見 Port 速查
你平常連 http://localhost:3000, 就是在連你自己電腦(localhost = 127.0.0.1)的 3000 port。 瀏覽器連 https://google.com 不帶 port, 是因為 HTTPS 預設就是 443,瀏覽器自動補上。
TCP 三次握手——打電話確認連線
比喻:打電話確認連線。你打電話(SYN), 對方說「有聽到嗎?」(SYN-ACK),你說「有聽到,開始說吧」(ACK)—— 然後才開始真正的對話。這三個步驟確保雙方都能收發,才開始傳真正的資料。
為什麼需要三次,不是兩次?
這是個好問題,很多面試官會追問。用情境解釋:
兩次握手的問題
- 1. Client 發 SYN(舊的,因為網路延遲才到)
- 2. Server 收到,回 SYN-ACK,以為連線建立
- 3. 但 Client 早就放棄這個連線了(太舊了)
- 4. Server 白白開著一個半連接等 Client,浪費資源
三次握手的保障
- 1. Client 確認 Server 收到了 SYN(靠 SYN-ACK)
- 2. Server 確認 Client 收到了 SYN-ACK(靠 ACK)
- 3. 雙方都確認對方能收發,才建立連線
- 4. Server 不會為舊的 SYN 白開連線
TCP vs UDP——什麼時候不需要握手?
TCP 可靠但較慢(三次握手的額外往返)。UDP 直接送不管有沒有收到, 很快但不可靠。視訊通話、線上遊戲、DNS 查詢用 UDP—— 偶爾掉幾個封包比等重傳更可接受。一般網頁(HTTP/HTTPS)用 TCP—— 確保資料完整很重要。HTTP/3(QUIC 協議)則是在 UDP 上自己實現可靠傳輸, 兼顧速度和可靠性。
CDN——讓台灣連美國網站也快
比喻:McDonald's 在全球各地都有分店,你不用飛去美國總部買漢堡。 CDN(Content Delivery Network)就是網路的麥當勞—— 把內容分發到全球各地的伺服器,你連最近的那台就好。 台灣的用戶連台灣的 CDN 節點,不需要跨太平洋連美國,延遲從 200ms 降到 20ms。
CDN 怎麼知道要回應哪台伺服器?
這裡 DNS 又出現了。CDN 的神奇之處在於:相同的域名,對不同地區的用戶,DNS 會回傳不同的 IP。
靜態資源加速
圖片、CSS、JS、字型這類不常變的東西最適合 CDN。一旦快取就可以服務全球用戶。
DDoS 防護
大量惡意流量打進來,CDN 節點分散吸收,原始伺服器看不到攻擊。Cloudflare 就是這樣保護網站的。
Edge Computing
現代 CDN(Cloudflare Workers、Vercel Edge)甚至可以在節點上執行程式碼,讓計算也在用戶附近完成。
完整流程總覽——把這些全串起來
你輸入 google.com,按下 Enter
瀏覽器先查自己的 DNS 快取,有就跳過後面幾步
DNS 解析:名字 → IP
瀏覽器 → OS → Router → ISP Resolver → Root DNS → .com TLD → Google Authoritative DNS → 142.250.185.14
CDN 介入(如有)
DNS 根據你的地理位置,回傳最近的 CDN 節點 IP,不一定是 Google 美國總部
TCP 三次握手
SYN → SYN-ACK → ACK,確保雙方都能收發,建立可靠連線
TLS 握手(HTTPS)
協商加密演算法、驗證伺服器憑證、交換金鑰,建立加密通道(詳見 EP.03)
HTTP Request
GET / HTTP/2 帶上 Headers,伺服器回傳 HTML
瀏覽器渲染
解析 HTML → DOM,下載 CSS/JS,計算 Layout,繪製畫面,頁面出現
面試回答建議
面試時不用把每一步說得一樣詳細。重點是:先給出完整的步驟清單(讓面試官知道你有全局觀), 再針對你最熟的部分(DNS、TCP、HTTP)深入說明。 如果對方追問某一步,再展開說。
能說出「DNS 分層查詢」、「TCP 三次握手的必要性」、「CDN 透過 DNS anycast 實現就近存取」的候選人, 已經比大部分人說得更完整了。