實際例子解析:從打網址開始,網路到底發生了什麼事?

更新日期: 2025 年 4 月 7 日

你有沒有想過,當你打開瀏覽器、輸入 www.google.com、按下 Enter 的那一瞬間,到底發生了什麼事?

這短短幾秒內,電腦與全球無數設備展開了一場密切協作。

在這篇文章中,我們將用 TCP/IP 四層模型 的角度,帶你一層一層拆解從「輸入網址」到「網頁呈現」這段過程。

無論你是學習網路基礎的新手,或是想強化底層理解的程式設計師,這篇文章都能幫你把抽象的網路流程變得具體又清晰!


全貌先看:一張圖了解 TCP/IP 四層與流程概覽

你每天滑手機、用電腦上網,背後其實是一個非常嚴謹又有秩序的流程在運作。而這一切的傳輸流程,正是根據 TCP/IP 四層模型 分工合作完成的。

想像你寄一封跨國信件,會經過撰寫信件、封裝、標上地址、交由郵局、飛機運送、當地郵差配送… 這些環節就像是 TCP/IP 各層的角色。每一層都有特定任務,合作完成整體傳遞。

以下是四層的簡要對照:

TCP/IP 層級功能簡述
應用層(Application)負責處理我們看的見的應用,例如:HTTP、Email、FTP 等瀏覽器、App 就在這一層溝通
傳輸層(Transport)確保資料送得「完整」又「有順序」,以 TCP/UDP 協定為主
網際層(Internet)幫資料決定「送去哪裡」的路線,處理 IP 位址與路由
網路介面層(Network Interface)資料的實體傳輸過程,透過乙太網路、Wi-Fi、光纖等方式,真正送出資料

📌 接下來,我們將從你輸入網址開始,逐層解析這場資料傳遞的旅程。


應用層(Application Layer):你打開網頁,HTTP 請求啟動

第一步:DNS 查詢,把網址變成 IP 位址

當你在瀏覽器輸入 www.google.com,按下 Enter 的瞬間,第一件事就是找出這個網域名稱背後代表的 IP 位址。

因為網路世界的設備只看得懂 IP 位址,不能直接處理「字母網址」。所以就得拜託 DNS(Domain Name System) 這個像「網路電話簿」的系統,來幫我們做翻譯。

比喻一下:

就像你要寄信給「台北市政府」,你不能寫「市政府」就好,你需要它的具體地址。DNS 就是在幫你查這個地址。

範例流程:

使用者輸入:www.google.com

查詢 DNS,得到 IP:142.250.196.100(舉例)

📌 小補充:有些瀏覽器會先查本地快取(cache)或作業系統快取,若找不到才會透過網路發送 DNS 查詢。

第二步:發出 HTTP 或 HTTPS 請求

獲得 IP 之後,瀏覽器會根據你要求的網頁內容,組出一個 HTTP 請求,並打包送往伺服器。

這是最常見的應用層協定,用來傳送文字、圖片、影片等各種網頁資源。

範例請求:

GET / HTTP/1.1
Host: www.google.com

若是 HTTPS 則還會多加上加密機制,確保資料在途中不會被竊聽或竄改。

📌 請求完成後,這些資料會往下一層送交,由傳輸層處理。


傳輸層(Transport Layer):建立連線,確保資料穩定送達

TCP 協定登場:資料包裝與可靠傳送

HTTP 請求雖然已經準備好內容,但還需要靠 TCP 協定 幫忙分段、加編號、處理錯誤、重送遺失資料… 才能「穩穩當當」地送出去。

TCP 就像一個嚴謹的快遞公司,確保每份資料包裹:

  • 有正確的收件人與寄件人(埠口號)
  • 有編號可重組(序號)
  • 有確認收到的回信(ACK)
  • 有問題還會主動補寄(重傳機制)

這就是 TCP 的強大之處。

🤝 TCP 三次握手(Three-Way Handshake)

TCP 是「連線導向」的協定,也就是說在真正傳資料前,它會先「打招呼」建立穩定的通訊通道,這個過程叫作「三次握手」。

流程如下:

  1. Client 傳送 SYN(我要建立連線)
  2. Server 回應 SYN + ACK(我收到了,也想建立連線)
  3. Client 再傳 ACK(我確認了)

握手成功後,才會開始資料交換,並確保雙方能夠正確收發資料。

🧩 SYN 和 ACK 是什麼?

SYN(Synchronize)和 ACK(Acknowledge)不是封包的名稱,而是 TCP 封包中的控制位元(Flags),也可以說是一種訊號,用來表示「這個封包要幹嘛」。

🔍 TCP 封包裡有哪些控制位元?

TCP 協定的封包裡面有一段叫做 Flags 欄位,這個欄位用來控制通訊的狀態,它包含以下幾個常見的控制旗標(旗幟):

名稱縮寫意義
SYNSynchronize要建立連線(「我想開始對話」)
ACKAcknowledge確認已收到資料(「我有收到你說的話」)
FINFinish我要斷線了(「我要掛電話了喔」)
RSTReset強制重設連線(「欸欸這通話怪怪的重來」)
PSHPush要求立即處理資料
URGUrgent表示這筆資料很緊急

📦 那 SYN 和 ACK 是怎麼出現在封包裡的?

它們會以「旗標」的形式,被設在 TCP 封包的 header(標頭)中。舉個例子:

  • 第一次握手
    Client → Server:一個 SYN = 1,ACK = 0 的封包 → 表示「我想建立連線」
  • 第二次握手
    Server → Client:一個 SYN = 1,ACK = 1 的封包 → 表示「我收到了,也想連線」
  • 第三次握手
    Client → Server:一個 SYN = 0,ACK = 1 的封包 → 表示「我確認你有收到,那我們來開始吧!」

所以說:

SYN 跟 ACK 是 TCP 封包的控制訊號,不是「封包名稱」本身。

🤔 SYN 跟 ACK 是不是空的封包?來拆解一下!

很多初學者學到 TCP 三次握手時都會好奇:「SYN 跟 ACK 這些封包裡有沒有傳資料?」

✅ 簡短回答:

是的!SYN 與 ACK 這類控制封包,幾乎都不含資料內容(也就是 payload 通常是空的)。

它們的主要任務是:「建立連線、確認收訊」,不是拿來傳輸像 HTML 或圖片這種實際資料的。

🔬 詳細說明:這些控制封包長怎樣?

一個 TCP 封包基本上包含兩部分:

  1. Header(標頭)
    包含來源與目的埠號、序號、確認號、控制旗標(SYN、ACK、FIN…)等
  2. Payload(負載)
    這才是真正的資料內容(像 HTTP 請求、圖片、影片等)

但像是:

  • 第一次握手(SYN 封包):SYN=1, ACK=0
  • 第三次握手(ACK 封包):SYN=0, ACK=1

這類控制封包:

  • ✅ Header 有資訊(像起始序號、確認號)
  • ❌ Payload 幾乎為空(沒有實際資料內容)

所以你可以把它們想成:

「功能性通知信」,有標題但沒正文,只是用來說「我來囉」、「我收到了」,不是真的在傳資料。

📞 舉個生活比喻:

就像你打電話的前幾秒:

1️⃣ 你撥電話給朋友(SYN):只是撥號,沒說話
2️⃣ 對方接起來說「喂?」(SYN+ACK)
3️⃣ 你回「好,我聽得到你」(ACK)
✔️ 然後才開始講正事(傳資料)

SYN 跟 ACK 就像電話中那段「喂—喂—聽得到嗎?」的開場白,不講內容,但沒有它你們也沒辦法好好對話。

控制封包含資料嗎?功能
SYN(建立連線)❌ 幾乎沒有 payload告訴對方「我要連線」
ACK(確認收訊)❌ 通常沒有 payload告訴對方「我有收到資料了」
SYN+ACK(回應握手)❌ 通常沒有 payload表示「我收到了,也同意連線」

這些封包的重點都是建立穩定的連線環境,不是用來傳資料本身。


網際層(Internet Layer):IP 負責尋路,找到伺服器位置

IP 協定:讓封包「知道要去哪」

接下來 TCP 封包會被包進一個 IP 封包,這層的重點是「定位與導航」。

IP 封包中會註明:

  • 來源 IP:誰寄的(例如你的筆電)
  • 目的 IP:要寄去哪(例如 Google 的伺服器)

路由器會根據 IP 位址,決定封包該送到哪個網段、經過哪些節點,像是 GPS 幫封包導航。

ICMP 協定:當封包迷路時的求救訊號

如果資料發生錯誤、傳不到,這時會透過 ICMP 協定 發出錯誤回報,常見的像是:

  • ping(測試主機是否可達)
  • traceroute(追蹤封包路徑)

網路介面層(Network Interface Layer):實體世界傳輸資料

📡 傳送實體封包:從線路或無線空間送出去

到了這一層,封包終於要「實際上路」了。

IP 封包會被轉成乙太網路幀(Ethernet Frame),並透過:

  • 有線網路(Ethernet、RJ45)
  • 無線網路(Wi-Fi)
  • 手機基地台(4G/5G)
  • 光纖網路

來傳送訊號。

這層處理的是非常「物理性」的問題,例如訊號編碼、電壓變化、無線頻段等,是網路工程師調網速、修連線時最常處理的層級。

MAC 位址:區網內的真實身分證

在本地網路(如家用 Wi-Fi、公司內部網)中,每一台裝置都有一個唯一的 MAC 位址,像是網卡的身分證。

資料從你電腦送到家中路由器,會根據 MAC 來決定該轉給哪台設備,是這層最關鍵的任務之一。


回程資料:伺服器把網頁送回來的流程,其實也是一模一樣的反向旅程!

當伺服器收到你的請求之後(例如請求首頁 HTML 檔案),它會進行一連串的處理動作,像是:

  • 根據 URL 產出正確的網頁內容(可能包含 HTML、CSS、JS、圖片等資源)
  • 組裝好 HTTP 回應
  • 再「一層一層打包」傳送回你的電腦

這個回傳過程會再次經過 TCP/IP 的四層,就像一個「資料回程快遞」:

應用層(Application Layer):準備好 HTTP 回應資料

伺服器會建立一份 HTTP 回應,裡面包含你要的網頁內容,例如:

HTTP/1.1 200 OK
Content-Type: text/html

<!DOCTYPE html>
<html>
  <head>...</head>
  <body>...</body>
</html>

這就是瀏覽器會顯示在畫面上的網頁原始碼。

傳輸層(Transport Layer):用 TCP 把資料穩穩地送出去

伺服器會將 HTTP 回應資料交給 TCP 協定處理:

  • 把整段資料切成多個封包(因為可能太大)
  • 為每個封包編號
  • 加上確認號與校驗碼
  • 確保對方收到資料時可以正確排序、補齊遺漏

傳送過程中,瀏覽器也會回傳 ACK 封包,告訴伺服器「我有收到第 N 個封包囉!」

網際層(Internet Layer):根據 IP 幫資料找到你的電腦

TCP 封包會被包進 IP 封包中:

  • 來源 IP:伺服器的位址(例如 Google 的 IP)
  • 目的 IP:你的電腦 IP(透過路由器 NAT 後會對應到你家)

封包就會透過眾多路由器跳躍(Router hopping),從資料中心出發,橫跨城市、國家,一路送回你的家中網路。

網路介面層(Network Interface Layer):透過真實的網路送回來

最後,IP 封包會被轉成乙太網路幀(Ethernet Frame)或 Wi-Fi 資料包,透過實體設備傳送回你的電腦,可能經過:

  • 光纖主幹網
  • 手機基地台(若你在用 4G/5G)
  • 路由器、Switch、Wi-Fi 無線訊號
  • 網卡(Network Interface Card)

等網路設備,最終進入你的作業系統網路堆疊。

最後:瀏覽器接收到資料 → 開始畫面渲染!

當封包一層層解開後,HTTP 回應的內容被送進瀏覽器:

  • 讀取並解析 HTML 結構
  • 觸發後續載入 CSS、JavaScript、圖片等資源
  • 建構 DOM、渲染畫面、觸發互動功能

這一切的最終結果,就是你熟悉的「網頁畫面」呈現在你面前 🎉

小提醒:這還只是「主文件」的回程!

現代網頁通常不只一個請求,打開一個頁面還會再向伺服器發出更多子請求,例如:

  • 載入 CSS 樣式表
  • 載入圖片資源
  • 執行 JavaScript 請求 API 資料

每一個這樣的資源,都會再經歷相同的四層流程來回一次


結論:一個網址背後,走過四層、跨越世界

當你輸入一個網址並按下 Enter,看似簡單,其實背後經歷了:

  • 名稱解析(DNS)
  • 協定封裝(HTTP → TCP → IP → Ethernet)
  • 路由跳轉(經過無數節點)
  • 再回到你眼前呈現結果!

理解這些不只是為了考試,更能幫助你寫程式時,知道資料「從哪來」「往哪去」「中間經過了什麼」。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *