史丹佛CS144 電腦網路播客:電腦網路簡介- 分層模型、 ARP 、 IP 與應用層

2025.08.26

當我們在瀏覽器中輸入網址,按下回車,絢麗的網頁便呈現眼前。這個看似瞬間完成的動作背後,是一個由無數協定、路由器和連結組成的複雜而又優雅的系統在默默工作。這個系統就是網路。

本文將以史丹佛大學CS 144 課程的核心思想為基礎,帶你深入探索互聯網的基石——從網絡設計的宏偉藍圖(四層模型),到其最核心的協議(IP),再到地址分配與路由的精妙細節。

宏觀設計:網路的四大支柱

為了管理網路通訊的複雜性,電腦科學家借鑒了軟體工程中的分層思想,將整個互聯網的功能劃分為四個層次。這種分層設計不僅降低了系統的複雜度,也讓每一層都可以獨立演進,大大促進了技術創新。

四層網路模式(The Four-Layer Internet Model)

想像寄送一個包裹。你需要先將物品(資料)打包(應用層),然後寫上收件人和寄件人資訊(傳輸層),再貼上具體的街道地址(網絡層),最後由快遞員選擇具體的交通工具和路線(鏈路層)送達。互聯網的四層模型與此類似:

  • 應用層(Application Layer)  :這是我們最常接觸的一層。它定義了應用程式之間如何交流,例如,Web 瀏覽器使用 HTTP 協定取得網頁,郵件用戶端使用 SMTP 協定發送郵件。這一層關心的是通訊內容的具體語意。
  • 傳輸層(Transport Layer)  :負責端對端(end-to-end)的資料傳輸。它為應用層提供可靠的通訊管道。最著名的協定是 TCP (Transmission Control Protocol),它能確保資料完整且有序地到達目的地,並處理網路擁塞。對於一些即時性要求高、但能容忍少量資料遺失的應用(如視訊通話),則會使用更輕量的 UDP (User Datagram Protocol)。
  • 網路層(Network Layer)  :這是整個網路的心臟。它負責將資料包從源頭主機跨越多個網絡,一路「接力」到目標主機。網路層的核心協定就是 IP (Internet Protocol)  。它定義了位址格式和路由規則,將全球無數個子網路黏合成一個統一的網路。
  • 連結層(Link Layer)  :這是最底層,負責在單一實體連結上(例如,你的電腦和路由器之間,或兩個路由器之間)傳輸資料。我們熟悉的乙太網路(Ethernet) 和Wi-Fi 都屬於連結層技術。

封裝(Encapsulation):層層打包的藝術

分層模型帶來了一個關鍵操作—封裝。當應用程式的資料向下傳遞時,每一層都會給它加上自己的「頭部資訊」(Header),就像層層打包一樣。

一個 HTTP 請求的旅程是這樣的:

  1. 應用層產生 HTTP 資料。
  2. 傳輸層將其打包成一個 TCP 段(Segment),並加上 TCP 頭部(包含連接埠號碼等資訊)。
  3. 網路層將 TCP 段打包成一個 IP 資料封包(Datagram),並加上 IP 頭部(包含來源/目的IP 位址等資訊)。
  4. 鏈路層將 IP 資料封包打包成一個訊框(Frame),並加上鏈路層頭部(包含MAC 位址等資訊),最後透過實體媒體傳送出去。

這個過程可以用下圖清楚地表示:

+------------------------------------------------------------+
| 链路层头部   | 网络层头部 | 传输层头部   | 应用层数据 | 链路层尾部  |
| (Ethernet) |   (IP)   |   (TCP)    |  (HTTP)  | (Ethernet) |
+------------------------------------------------------------+
             <----------------------- IP Datagram ----------->
                         <----------- TCP Segment ----------->
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

接收方則會執行相反的「解包」過程,逐層剝離頭部,最終將原始的應用層資料交給應用程式。

在乙太網路(Ethernet)中, 幀(Frame) 由三個部分組成:

[ 以太网头部 (Ethernet Header) ] + [ IP 数据报 (Payload) ] + [ 以太网尾部 (Ethernet Trailer) ]
  • 1.
  • 乙太網路頭部( Ethernet Header  ):包含目的MAC 位址、來源MAC 位址、型別欄位(EtherType)。
  • IP 資料封包 (Payload):就是整個網路層的資料(IP 頭+ 上層資料)。
  • 乙太網路尾部 (Ethernet Trailer):通常只有一個欄位-  FCS (Frame Check Sequence, 幀校驗序列)  ,用來偵測連結層傳輸是否出錯。長度4 位元組。

所以你圖裡寫的 連結層尾部 ,其實指的就是 FCS  ,它不是必然有複雜意義,只是連結層用來做錯誤偵測的校驗欄位。

有些教材/畫圖會忽略它,因為它對理解分層結構不是核心,但嚴格來說它確實存在。

HTTP 處於 應用層,它的「資料」就是我們真正關心的內容(網頁內容、請求訊息等)。

在封裝時,HTTP 資料會被逐層打包:

HTTP 数据 → 加上 TCP 头部 → 成为 TCP Segment
TCP Segment → 加上 IP 头部 → 成为 IP Datagram
IP Datagram → 加上以太网头部和尾部 → 成为 Ethernet Frame
  • 1.
  • 2.
  • 3.

所以:

  • 在TCP 眼裡,HTTP 就是「資料」。
  • 在IP 眼裡,整個TCP 段(包括HTTP)就是「資料」。
  • 在Ethernet 眼裡,整個IP 資料報就是「資料」。

這就是分層封裝的關鍵: 每一層只看自己要處理的頭部,把上層全部當作「資料」  。

網路核心:IP 協定的「薄腰」哲學

在四層模型中,網路層的 IP 協定扮演著一個無可取代的角色,它被稱為網際網路的「薄腰(thin waist)」。這意味著,無論上層的應用(HTTP, FTP, DNS)如何變化,也無論下層的鏈路技術(乙太網路, Wi-Fi, 5G)如何演進,它們都必須透過 IP 協定這個「腰部」來進行連接。

這種設計的背後,蘊含著深刻的哲學。

IP 服務模式:簡單即是美

IP 協議的設計者們選擇了一種極為簡潔的服務模型,其核心特徵可歸納為:

  • 不可靠(Unreliable)  :IP 協定不保證資料包一定能送達。它可能會在傳輸過程中遺失、損壞、延遲或被重複發送。
  • 盡力而為(Best-Effort)  :雖然不可靠,但 IP 協議承諾會盡其所能地投遞資料包,不會無故丟棄(除非網路擁塞或資料包生命週期結束)。
  • 無連線(Connectionless)  :IP 協定在發送資料前,來源和目的之間不建立任何連線。每個資料包都被獨立對待,各自尋找自己的路徑,這使得網路核心的路由器可以非常簡單和有效率。

端對端原則(End-to-End Principle)

既然 IP 協定如此“不可靠”,那我們如何實現可靠的通訊?答案是 端到端原則 。

這個原則主張,像是可靠性、擁塞控制這類複雜的功能,應該由通訊的兩個端點(即使用者的電腦)來負責,而不是由網路中間的路由器來承擔。

這樣做的好處是巨大的:

  • 保持網路核心簡單 :路由器只需專注於快速轉發資料包,這使得它們可以做得更便宜、更快速、更穩定。
  • 應用靈活客製化 :應用程式可以根據自身需求,在端系統上選擇實現不同程度的可靠性。需要高可靠性的文件傳輸可以使用 TCP,而即時視訊則可以使用更簡單的 UDP,將可靠性的實現留給應用程式本身。
  • 易於創新 :新的應用功能可以在端系統上快速部署和迭代,無需改變整個互聯網的核心設備。

IPv4 頭部欄位一覽

為了實現上述功能,每個 IP 資料封包都帶有一個頭部,其中包含了路由和處理所需的所有資訊。下面是IPv4 頭部的主要欄位:

0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • Version (版本)  :指明協定版本,對IPv4 來說,這個值是 4
  • Time to Live (TTL, 存活時間)  :一個8 位元的數值,每經過一台路由器就減1。當TTL 減到 0 時,資料包將被丟棄。這個機制可以防止資料包因路由錯誤在網路中無限循環。
  • Protocol (協定ID)  :告訴接收方,IP 封包的負荷(payload)應該交給哪個傳輸層協定處理。例如,6 代表 TCP17 代表 UDP
  • Source/Destination Address (來源/目的位址)  :32 位元的IP 位址,是整個轉送過程的依據。
  • Header Checksum (頭部校驗和)  :用於偵測 IP 頭部在傳輸過程中是否發生損壞。

位址與順序:網路通訊的規範

位元組序(Byte Order):大端與小端的約定

當我們在記憶體中儲存一個多位元組的數字(例如一個32 位元的整數)時,有兩種排列方式:

  • 大端序(Big-endian)  :最高有效位元組(Most Significant Byte)儲存在最低的記憶體位址。這符合人類的閱讀習慣。
  • 小端序(Little-endian)  :最低有效位元組(Least Significant Byte)儲存在最低的記憶體位址。 Intel x86 架構的處理器就是典型的小端序。

讓我們用一個32 位元整數 0x12345678 來舉例:

内存地址         大端序存储
低 ----> 高     低 ----> 高
+------+        +----+----+----+----+
| 0x100 |        | 12 | 34 | 56 | 78 |
+------+        +----+----+----+----+
| 0x101 |       小端序存储
+------+        +----+----+----+----+
| 0x102 |        | 78 | 56 | 34 | 12 |
+------+        +----+----+----+----+
| 0x103 |
+------+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

不同的機器可能有不同的字節序,為了確保通訊的正確性,互聯網協定規定: 所有在網路上傳輸的二進位數據,都必須採用大端序 ,這也被稱為 網路字節序(Network Byte Order)  。

為了方便開發者,C 語言等程式語言的網路庫提供了 htons() (Host to Network Short)、ntohl() (Network to Host Long) 等函數,用於在主機字節序和網路字節序之間進行自動轉換。

IPv4 位址與CIDR

IPv4 位址是一個32 位元的數字,通常被寫成點分十進位的形式(如 171.64.0.0)。為了有效率地管理和路由,IP 位址被分為網路部分和主機部分。

早期的A、B、C 類地址劃分方式非常僵化,造成了大量的地址浪費。如今,我們使用 無類別域間路由(Classless Inter-Domain Routing, CIDR) 來分配和表示 IP 位址區塊。

CIDR 使用「IP 位址/前綴長度」的格式,例如 171.64.0.0/16。這裡的 /16 表示位址的前16 位元是網路部分,後 32-16=16 位元是主機部分。這個前綴長度可以是任意的,大大提高了位址分配的靈活性。

最長前綴匹配(Longest Prefix Match)

當一個路由器收到封包時,它如何決定從哪個連接埠轉送出去?答案是查詢其內部的轉發表(Forwarding Table),並遵循 最長前綴匹配(Longest Prefix Match, LPM) 原則。

路由器的轉發表由一系列CIDR 條目組成。當封包到達時,路由器會用其目的 IP 位址去匹配表中的所有條目,並選擇 前綴最長 的那一個。

看一個例子:

路由器转发表
+--------------------+--------------+
|       前缀          |    下一跳     |
+--------------------+--------------+
| 128.10.0.0/16      |   接口 A      |
| 128.10.1.0/24      |   接口 B      |
| 0.0.0.0/0          |   接口 C      |  <-- 默认路由
+--------------------+--------------+
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 如果一個封包的目的位址是 128.10.2.5,它同時匹配 /16 和 /0,但 /16 更長,所以封包會從介面A 轉送。
  • 如果目的地址是 128.10.1.5,它同時匹配 /16/24 和 /0/24 是最長的前綴,所以封包會從介面B 轉送。
  • 如果目的位址是 192.168.1.1,它只匹配 /0(預設路由),所以會從介面C 轉送。

位址解析協定(Address Resolution Protocol - ARP)

IP 位址工作在網路層,它解決了全域路由的問題。但是當資料包到達最終的區域網路後,如何把它準確地交給目標機器呢?這需要連結層的位址,也就是我們常說的 MAC 位址 。

位址解析協定(Address Resolution Protocol, ARP) 就是用來建立 IP 位址和MAC 位址之間映射關係的橋樑。

工作流程如下:

  1. 主機A 想向同一區域網路下的主機B (IP:  192.168.1.100) 發送數據,但它只知道B 的 IP 位址,不知道其MAC 位址。
  2. 主機A 先檢查自己的ARP 快取表,看是否 192.168.1.100 有的記錄。
  3. 如果沒找到,主機A 會在區域網路內廣播一個ARP 請求包,內容是:“誰的 IP 位址是 192.168.1.100?請告訴我你的MAC 位址。”
  4. 區域網路內所有主機都會收到這個要求,但只有主機B 會回應。
  5. 主機B 向主機A 發送ARP 回應包,內容是:“我的 IP 是 192.168.1.100,我的MAC 位址是 XX:XX:XX:XX:XX:XX。”
  6. 主機A 收到回應後,就知道了主機B 的MAC 位址,並將這個映射關係存入自己的ARP 緩存,然後就可以封裝鏈路層幀並發送資料了。

從宏觀的分層設計,到 IP 協定簡潔而強大的「薄腰」模型,再到字節序、位址分配、路由匹配和位址解析等具體實現,我們看到了網路設計中的智慧與權衡。它透過「保持核心簡單,將複雜性推向邊緣」的端到端原則,建構了一個既穩定又極具創新活力的全球網路。理解這些基本原理,是深入學習更高階網路概念(如 TCP 的可靠傳輸、DNS 的網域解析等)的堅實基礎。

在上面的討論中,我們探索了互聯網的底層基石:從優雅的四層模型到作為「細腰」的IP 協定。我們了解資料包如何在網路中被定址和路由。現在,讓我們將目光上移,看看運行在這個堅實基礎之上的應用程序,並探討這個偉大的全球網絡是如何演進、被治理,以及它將走向何方。

應用的千姿百態:不同的通訊模型

幾乎所有的網路應用程序,從瀏覽網頁到視訊通話,其核心訴求都可以歸結為一個簡單的模型:在兩台電腦之間建立一個 可靠的雙向字節流(reliable two-way byte stream)  。這意味著程式可以像讀寫本機檔案一樣,向這個「管道」的一端寫入數據,並確信這些數據會完整、有序地出現在另一端。TCP 協議正是為滿足這項需求而生。

然而,不同的應用在實現這一目標時,採用了截然不同的架構。

萬維網(World Wide Web):經典的客戶端-伺服器模型

這是我們最熟悉的模型。當你造訪一個網站:

  • 模型 :嚴格的 客戶端-伺服器(Client-Server) 模型。你的瀏覽器是客戶端,運作網站的機器是伺服器。
  • 協議 :HTTP (HyperText Transfer Protocol)。
  • 流程 :
  1. 你的瀏覽器(客戶端)會向網站伺服器的 80 或 443 連接埠發起一個 TCP 連線。
  2. 連線建立後,瀏覽器發送一個 HTTP GET 請求,請求特定的網頁資源。
  3. 伺服器處理請求,然後回傳一個 HTTP 回應,其中包含狀態碼(如 200 OK)和網頁的 HTML 內容。
  4. 瀏覽器接收並解析 HTML,最終渲染出我們看到的頁面。

這個模型簡單、直觀,但所有壓力都集中在伺服器上。如果訪問量過大,伺服器就會不堪負荷。

BitTorrent:去中心化的點對點模型

為了解決中心化下載的瓶頸,BitTorrent 採用了一種截然不同的方法:

  • 模型 : 點對點(Peer-to-Peer, P2P) 模型。在這個網路中,每個參與者既是下載者(客戶端),也是上傳者(伺服器)。
  • 核心概念 :

檔案塊(Pieces)  :一個大檔案被切分成許多小的資料塊。

群(Swarms)  :所有正在下載或共享同一個檔案的使用者的集合。

Tracker 伺服器 :一個協調者。它不會儲存檔案本身,只負責記錄目前「群組」裡有哪些使用者(peer)在線,以及他們各自擁有哪些檔案區塊。

流程

  1. 你打開一個 .torrent 文件,你的客戶端聯絡Tracker 伺服器,取得目前線上的使用者清單。
  2. 你的客戶端直接與其他使用者建立 TCP 連線。
  3. 你從不同的使用者下載不同的檔案區塊,同時,也將你已經下載好的檔案區塊上傳給其他需要的人。

透過這種「人人為我,我為人人」的模式,下載的人越多,速度反而越快,大大分散了頻寬壓力。

Skype:應對複雜現實的混合模型

Skype 的目標是讓用戶間的語音和視訊通話盡可能流暢。然而,一個巨大的障礙是  網路位址轉換(Network Address Translator, NAT)  。多數家庭和公司的設備都位於NAT 路由器之後,它們擁有的是私有IP 位址,無法從公網直接訪問,這給P2P 通訊帶來了巨大挑戰。

為了穿透NAT,Skype 設計了一套巧妙的混合模型:

  • 會合伺服器(Rendezvous Server)  :當你登入Skype 時,你的客戶端會與一個公網上的會合伺服器建立連線。這個伺服器扮演著「介紹人」的角色。
  • 反向連線(Reverse Connection)  :當Alice 想要呼叫位於NAT 之後的Bob 時,直接連線是行不通的。此時:
  1. Alice 的客戶端通知會合伺服器:「我想呼叫Bob」。
  2. 伺服器找到Bob 已經建立的連接,透過它向Bob 的客戶端發送指令:「Alice 想呼叫你,請你主動向Alice 的公網IP 和連接埠發起連線」。
  3. Bob 的用戶端主動向Alice 發起 TCP 連線。因為這個連結是從NAT 內部發起的,所以能夠成功穿透NAT。

中繼伺服器(Relay Server)  :如果Alice 和Bob 雙方都位於複雜的NAT 之後,連反向連線也無法成功,該怎麼辦?此時,Skype 會啟用最後的備用方案:

  1. Alice 和Bob 的客戶端都分別與一台公網路上的中繼伺服器建立連線。
  2. 雙方的通話資料包都先傳送給中繼伺服器,再由伺服器轉送給對方。

這三種連接方式的示意圖如下:

// 理想情况:直接连接
Alice <----------------------> Bob

// 方案二:反向连接 (Bob 在 NAT 后)
1. Alice -> Rendezvous Server -> Bob
2. Bob ----------------------> Alice (Bob 主动发起连接)

// 方案三:中继 (双方都在 NAT 后)
Alice <--------> Relay Server <--------> Bob
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Skype 的成功,很大程度上歸功於這套務實的、多層次的連接策略,它優先嘗試最高效的P2P 連接,失敗後則優雅地降級到伺服器輔助的模式。

網路的脈動:演進、治理與挑戰

網路並非一成不變的科技造物,它是一個不斷發展、由全球社群共同治理的生命體。

誰在掌管網路?

互聯網沒有單一的“所有者”,它的技術標準和資源分配由多個國際組織協同管理:

  • IETF (  Internet Engineering Task Force) :互聯網工程任務小組。它負責制定絕大多數網際網路協定標準(如IP, TCP, HTTP)。 IETF 以其獨特的「思想優勝制(meritocracy of ideas)」和「大致共識與運行程式碼」的務實文化而聞名。
  • W3C (World Wide Web Consortium)  :萬維網聯盟。它專注於Web 應用層面的標準,如 HTMLCSS 等。
  •  ICANN ( Internet Corporation for Assigned Names and Numbers ) :網際網路名稱與數位位址分配機構。它負責管理全球的網域名稱系統(DNS)和IP 位址的分配。

演進案例:SIP 與VoIP 的革命

在1990 年代末,隨著網路頻寬和運算能力的提升,透過IP 網路傳輸 語音,即VoIP (Voice over IP)  ,成為可能。這場革命的關鍵技術之一是 會話發起協定(Session Initiation Protocol, SIP)  。

SIP 的誕生源自於 軟體交換(Soft Switching) 的想法:將傳統昂貴、笨重的電話交換機的控制邏輯,以運作在通用電腦上的軟體來取代。 SIP 正是這樣一種訊號協議,它負責建立、修改和終止通話會照(如語音通話或視訊會議)。

SIP 成為了連接傳統電話世界和IP 網路的橋樑。像Skype Out/In 這樣的服務,正是透過SIP 協議,讓你能用電腦呼叫一部普通的電話,反之亦然。然而,為了被市場和傳統電信業者廣泛接受,SIP 在設計上做出了一些妥協,例如允許中間伺服器查看信令訊息,這在一定程度上偏離了互聯網純粹的端到端原則。

新興趨勢與未來挑戰

網路的演進從未停止,新的技術和挑戰不斷湧現:

  • 軟體定義網路(Software Defined Networking, SDN)  :與軟體交換類似,SDN 將網路的控制平面(決定封包如何路由)與資料平面(實際轉送封包)分開。這使得網路管理變得更加集中化、可編程和靈活,對傳統的網路設備製造商構成了顛覆性的挑戰。
  • 隱私與安全 :「棱鏡門」等事件引發了全球對網路監控的擔憂。 IETF 成立了 PerPass 等工作小組,積極探討如何透過加密和改進協定設計,來增強網路的隱私保護能力。
  • 內容傳遞網路(Content Distribution Networks, CDNs)  :像Netflix、YouTube 等流量巨頭,透過在全球部署CDN 伺服器,將內容快取到離用戶更近的地方,大大提升了存取速度和網路效率。未來,不同CDN 之間的協同工作將成為新的研究熱點。
  • 傳統網路融合的陣痛 :當網路與傳統電話網路深度融合時,一些舊問題也找到了新的「溫床」。例如, 騷擾電話(Robocalling) 利用VoIP 技術的低成本和匿名性,變得愈發猖獗。如何建立跨網路的身份認證體系,以追溯和阻止這些騷擾行為,已成為一個緊迫的法律和技術難題。

結語

從應用程式的精巧設計,到全球社群的協同治理,再到永不停歇的技術革新與挑戰,我們看到網路不僅是一組冰冷的協議,更是一個充滿活力、不斷自我完善的生態系統。它在連結訊息的同時,也深刻地塑造我們的社會。理解它的過去,洞察它的現在,是為了更好地參與並建構它的未來。