實際例子解析:從打網址開始,網路到底發生了什麼事?
更新日期: 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 是「連線導向」的協定,也就是說在真正傳資料前,它會先「打招呼」建立穩定的通訊通道,這個過程叫作「三次握手」。
流程如下:
- Client 傳送 SYN(我要建立連線)
- Server 回應 SYN + ACK(我收到了,也想建立連線)
- Client 再傳 ACK(我確認了)
握手成功後,才會開始資料交換,並確保雙方能夠正確收發資料。
🧩 SYN 和 ACK 是什麼?
SYN(Synchronize)和 ACK(Acknowledge)不是封包的名稱,而是 TCP 封包中的控制位元(Flags),也可以說是一種訊號,用來表示「這個封包要幹嘛」。
🔍 TCP 封包裡有哪些控制位元?
TCP 協定的封包裡面有一段叫做 Flags 欄位,這個欄位用來控制通訊的狀態,它包含以下幾個常見的控制旗標(旗幟):
名稱 | 縮寫 | 意義 |
---|---|---|
SYN | Synchronize | 要建立連線(「我想開始對話」) |
ACK | Acknowledge | 確認已收到資料(「我有收到你說的話」) |
FIN | Finish | 我要斷線了(「我要掛電話了喔」) |
RST | Reset | 強制重設連線(「欸欸這通話怪怪的重來」) |
PSH | Push | 要求立即處理資料 |
URG | Urgent | 表示這筆資料很緊急 |
📦 那 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 封包基本上包含兩部分:
- Header(標頭)
包含來源與目的埠號、序號、確認號、控制旗標(SYN、ACK、FIN…)等 - 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)
- 路由跳轉(經過無數節點)
- 再回到你眼前呈現結果!
理解這些不只是為了考試,更能幫助你寫程式時,知道資料「從哪來」「往哪去」「中間經過了什麼」。