web network dns tcp/ip http cdn domain

[Web] 網路基礎:IP、Domain、TCP/IP 與 CDN

IP 位址

每台連上網路的裝置都有一個 IP 位址,這是它在網路上的唯一身分。封包要送到哪台機器,看的就是 IP。

IPv4 長這樣:

93.184.216.34

四組數字,每組 0–255,用小數點隔開。整個 IPv4 空間大約 43 億個位址,早就不夠全球裝置分了。

IPv6 長這樣:

2606:2800:220:1:248:1893:25c8:1946

十六進位加冒號,位址多到近乎用不完。目前兩者並存,多數服務同時支援。

問題是,沒有人記得住這串數字。所以才有 Domain 和 DNS,把好記的名字對應到 IP。

Domain 與 DNS

Domain(網域)就是給人看的名字,像 google.comgithub.com。DNS(Domain Name System)負責把 domain 解析成 IP 位址。

Domain 的結構要從右往左看:

  • TLD(頂級網域):最右邊,像 .com.org.tw
  • 二級網域:你登記的名字,像 googlegithub
  • 子網域:最左邊,像 wwwmailapi

mail.google.com 來拆:.com 是 TLD,google 是二級網域,mail 是子網域。

DNS 解析流程

瀏覽器手上沒有 domain 對 IP 的對照表,得一層一層問出來:

你的瀏覽器輸入 example.com問:這網址的 IP 是多少?Recursive ResolverISP / 8.8.8.8問:.com 在哪?回:去問 .com TLDRoot Nameserver全球 13 組根伺服器問:example.com 的 IP?回:去問 Authoritative NSTLD Nameserver.com 區段管理回傳:93.184.216.34Authoritative Nameserver網域的最終答案來源⑤ 取得 IP 位址,回傳給瀏覽器結果通常會被快取,下次查詢更快

順序是:瀏覽器 → Recursive Resolver(ISP 提供的,或像 Google 的 8.8.8.8)→ Root Nameserver → TLD Nameserver → Authoritative Nameserver → 拿到 IP。

看起來要問四層,實際上通常幾毫秒就結束,因為每一層都有快取。查到的結果會照 TTL 設定暫存,在有效期間內就不用重問。

也因為到處都是快取,改 DNS 設定之後不會馬上生效——要等全球各地的快取陸續過期。這段等待期叫 DNS propagation,通常幾小時到 48 小時不等。

TCP/IP

TCP/IP 是網路通訊的基礎協定組,把整個通訊過程切成四層:

應用層Application LayerHTTP · HTTPS · DNS · SMTP傳輸層Transport LayerTCP(可靠)UDP(快速)網路層Internet LayerIP · ICMP網路存取層Network Access Layer乙太網路 · Wi-Fi · 光纖

各層各管各的事:

層級負責內容
應用層HTTP、Email、DNS 等應用協定
傳輸層資料分段、送達確認、流量控制
網路層封包路由、IP 定址
網路存取層實體訊號傳輸(電纜、Wi-Fi、光纖)

TCP vs UDP

傳輸層有兩大協定,取捨很明確——要可靠還是要快:

TCPUDP
全名Transmission Control ProtocolUser Datagram Protocol
連線方式三次握手建立連線無連線
可靠性確認送達,遺失重送不保證送達
延遲較高(確認開銷)極低
適用場景網頁載入、檔案下載線上遊戲、視訊通話

TCP 三次握手:Client → SYN → Server → SYN-ACK → Client → ACK。三步走完,雙方都確認對方準備好了,才開始傳資料。

HTTP 與 HTTPS

HTTP(HyperText Transfer Protocol) 定義瀏覽器和伺服器之間講話的格式:

  • Request:方法(GET、POST 等)、路徑、Header
  • Response:狀態碼(200 OK、404 Not Found 等)、Header、Body

拆開看實際文字格式——Request:

POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 42

{"email":"aira@example.com","pw":"****"}

Response:

HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: sid=abc123; HttpOnly; Secure
Content-Length: 25

{"ok":true,"userId":42}

注意一件事:HTTP 是明文傳輸,路上經過的每個節點都讀得到全部內容。

HTTPS 就是在 HTTP 底下墊一層 TLS(Transport Layer Security) 加密。建立連線時雙方先協商出金鑰,之後傳的東西全部用這把金鑰加密——就算被攔截,也只是一堆看不懂的密文。

現在幾乎所有網站都應該用 HTTPS。瀏覽器會對 HTTP 網站顯示「不安全」警告,搜尋引擎也偏好 HTTPS 網站。如果你在架站,讓 TLS 憑證這件事盡早處理好。

TLS 憑證可以從 Let’s Encrypt 免費取得,大部分的主機平台(Vercel、Netlify、Cloudflare)都會自動幫你設定好。

CDN

你的伺服器可能放在美國,但你的使用者可能在台灣、日本、德國。物理距離是客觀存在的,光速是有限的,資料要跑 2000 公里,延遲就是比較高。

CDN(Content Delivery Network) 的解法是在全球各地部署快取節點(Edge Node)。使用者連線時,不是直接打去原始伺服器,而是打去離他最近的 Edge Node。

沒有 CDN使用者台灣距離遠 · 延遲高2000km+原始伺服器美國東岸有 CDN使用者台灣距離近延遲低CDN Edge Node新加坡 / 東京cache miss才走原始伺服器美國東岸Cache Hit:Edge Node 直接回應,不回原始伺服器Cache Miss:Edge Node 無快取,向原始伺服器取得後再回傳並快取

CDN 的核心概念是快取:

  • Cache Hit:Edge Node 已經有這份內容的副本,直接回傳,原始伺服器完全不需要介入
  • Cache Miss:Edge Node 沒有快取(第一次請求、或快取過期),才回去跟原始伺服器要,取得後再快取起來

靜態資源(圖片、CSS、JS、字型)特別適合 CDN,因為這些檔案不常變動,快取命中率高。

實際上你每天都在用 CDN,只是沒意識到:

  • jsDelivrunpkg:npm 套件的免費 CDN
  • Cloudflare:除了 CDN,還提供 DDoS 防護、DNS 管理
  • AWS CloudFront:AWS 生態系的 CDN,跟 S3 整合緊密

CDN 不只是速度的問題。當流量突然暴增,CDN 的快取節點可以吸收大量請求,讓原始伺服器不至於被打爆。這也是很多人在網站上線前優先設定 CDN 的原因。

串起來看

把這些拼在一起,你輸入網址按下 Enter 之後發生的事,大概是這樣:

  1. DNS 查詢:瀏覽器問 Recursive Resolver,最終拿到 IP 位址
  2. TCP 連線:三次握手,與目標伺服器(或 CDN Edge Node)建立連線
  3. TLS 握手:如果是 HTTPS,協商加密金鑰
  4. HTTP 請求:瀏覽器發出 GET 請求,說明要哪個資源
  5. CDN 回應:如果是 Cache Hit,Edge Node 直接回傳;如果是 Cache Miss,Edge Node 先跟原始伺服器拿,再回傳
  6. 頁面渲染:瀏覽器拿到 HTML,再繼續請求 CSS、JS、圖片,重複以上步驟

整個流程在 0.幾秒內跑完,每個環節都有相應的技術在背後支撐。理解這個流程不只是知識層面的好奇,也能幫助你在遇到效能問題、網路錯誤的時候,更快判斷問題出在哪個環節。

Latest Updates

  • 2026.06.11 Content updated