網路與封包:一句訊息橫跨世界的旅程
從封包交換到排隊延遲,看懂網際網路如何用共享線路服務數十億人
你按下「傳送」之後,訊息究竟發生了什麼事?
想像你在通訊軟體上打了一句「晚上要不要一起吃飯?」,按下傳送。對你而言,這句話彷彿瞬間出現在朋友的手機上。但實際上,這句話並沒有像一條完整的繩子被丟過去,而是被切成許多小塊、貼上地址標籤,各自踏上一段橫跨數千公里的旅程,途中經過十幾台不同的機器,最後在朋友的裝置上被重新拼回原樣。
更有趣的是:同一時間,全世界有數十億人也在做一樣的事,而這些訊息共用同一批線路與交換設備,卻很少互相塞爆。這背後是一套精巧的設計,叫做「封包交換(packet switching)」。理解它,就理解了整個網際網路為什麼能運作。
封包交換 vs 電路交換:兩種完全不同的世界觀
要理解封包交換,最好的方式是先看它取代了什麼。
在傳統電話網路裡,用的是「電路交換(circuit switching)」。當你撥通一通電話,網路會在你和對方之間「建立一條專屬電路」——從你的電話一路到對方的電話,中間每一段線路、每一台交換機都預留給你們這通電話使用,直到掛斷為止。
這條電路的好處是穩定:頻寬固定、延遲穩定。但缺點也很明顯——只要你們不說話的那幾秒,這條線路仍然被你們獨佔,別人不能用。電話對話中其實有大量的沉默,這些頻寬就被白白浪費了。
封包交換採取了完全相反的哲學。它不預留任何專屬線路。資料被切成一個個「封包(packet)」,每個封包就像一張獨立的明信片,自己帶著「收件地址」與「寄件地址」。封包進入網路後,沿途的路由器(router)讀取地址,決定把它往哪個方向轉送,這個動作叫做「儲存後轉送(store-and-forward)」。
| 面向 | 電路交換 | 封包交換 |
|---|---|---|
| 資源配置 | 通話前預留專屬電路 | 不預留,動態共享 |
| 閒置時 | 線路仍被獨佔(浪費) | 線路可給別人用 |
| 延遲特性 | 穩定、可預測 | 會變動(受流量影響) |
| 典型代表 | 傳統市話 | 網際網路 |
| 失效影響 | 整條電路斷掉 | 封包可改走別條路 |
封包交換的關鍵優勢在於彈性與韌性。某條線路斷了,封包可以繞道;某個瞬間流量暴增,網路只是變慢而不是直接拒絕你。這種「能撐住、不全斷」的特性,正是當年網際網路設計的核心目標。

衡量網路的三把尺:頻寬、延遲、吞吐量
談網路效能時,很多人把「快」混為一談,但其實有三個彼此獨立的指標,必須分開理解。
頻寬(bandwidth) 是線路單位時間能傳輸的資料量上限,單位通常是 bits per second(bps、Mbps、Gbps)。它像是水管的「粗細」——管子越粗,同一時間能流過的水越多。注意頻寬是「容量上限」,不是「實際速度」。
延遲(latency) 是一個封包從起點到終點所花的時間,常以毫秒(ms)計。它像是水從水管這頭流到那頭所需的時間。延遲主要由四部分組成:
$$ \text{總延遲} = d_{\text{傳播}} + d_{\text{傳輸}} + d_{\text{處理}} + d_{\text{排隊}} $$
其中傳播延遲($d_{\text{傳播}}$)受限於物理距離與光速,是無法靠加大頻寬解決的。從台灣連到美國伺服器,光在光纖中跑單程就要約幾十毫秒,這是物理定律,再貴的網路也快不了。
吞吐量(throughput) 是實際達成的有效傳輸速率,永遠小於等於頻寬。它受最慢的那一段(瓶頸鏈路)、封包遺失、協定額外開銷等因素拖累。
一個常見迷思是「頻寬大就一定快」。但對於需要頻繁來回確認的互動(例如線上遊戲、視訊通話的同步),延遲往往比頻寬更關鍵。打個比方:用一台塞滿硬碟的卡車運資料,頻寬(總資料量÷時間)大得驚人,但延遲(卡車開到目的地的時間)長達數小時——你絕不會想用它來打電動。
動手看一個例子:算一筆傳輸帳
假設要傳一個 $100$ MB 的檔案,頻寬 $100$ Mbps,傳播延遲(單程)$20$ ms。先把單位對齊:$100$ MB $= 100 \times 8 = 800$ Mb(注意 Byte 與 bit 差 8 倍)。
傳輸時間 = 資料量 / 頻寬
= 800 Mb / 100 Mbps
= 8 秒
第一個 bit 到達目的地 ≈ 傳播延遲 = 20 ms
最後一個 bit 到達 ≈ 20 ms + 8 s ≈ 8.02 秒
可以看到:對「大檔案傳輸」這種情境,$8$ 秒的傳輸時間遠遠主宰一切,$20$ ms 的延遲幾乎可以忽略——這是頻寬主導的場景。
但換一個情境:你打開一個網頁,瀏覽器要來回問伺服器十幾次(DNS 查詢、建立連線、要 HTML、要 CSS、要圖片……),每次來回都要吃一次往返延遲(round-trip time, RTT)。
若 RTT = 40 ms,需要 15 次來回:
互動延遲 ≈ 15 × 40 ms = 600 ms
即使你的頻寬從 100 Mbps 升到 1000 Mbps,
這 600 ms 幾乎一點都不會變短。
這就解釋了為什麼「網路升級到 10 倍頻寬,但開網頁感覺沒快多少」——因為瓶頸是延遲,不是頻寬。
LAN 與 WAN:從一個房間到全世界
網路依規模可粗分為兩類。
區域網路(LAN, Local Area Network) 覆蓋小範圍,例如一間教室、一棟宿舍、一個辦公室。家裡所有裝置連到同一台 Wi-Fi 分享器,就構成一個 LAN。LAN 的特點是距離短、延遲低、頻寬高、且通常由單一個人或組織管理。
廣域網路(WAN, Wide Area Network) 跨越城市、國家甚至大陸,把眾多 LAN 串連起來。網際網路(Internet)就是全世界最大的 WAN,由無數網路彼此互連而成——這也是 "Internet" 一字的本意:inter(之間)+ network(網路),即「網路之間的網路」。
兩者的接點通常是你家或公司的路由器:對內它管理你的 LAN,對外它透過網際網路服務供應商(ISP)接入更廣大的 WAN。封包要出門時,路由器負責把它送往正確的下一站。
用戶端-伺服器 vs 對等式:誰服務誰?
封包在網路上跑,但「程式之間如何分工」是另一個層次的設計,主要有兩種架構。
用戶端-伺服器(client-server) 是最常見的模式。一方(伺服器)持續待命、提供服務;另一方(用戶端)主動發出請求、取得回應。你瀏覽網頁、收發電子郵件、看串流影片,幾乎都是這個模式:你的裝置是用戶端,內容存放在某處的伺服器上。
用戶端 ──── 請求(request) ────▶ 伺服器
◀──── 回應(response) ────
這種架構的優點是集中管理、容易維護;缺點是伺服器成為單點瓶頸與單點故障——它一掛,所有人都連不上。
對等式(P2P, Peer-to-Peer) 則沒有固定的伺服器。每個節點(peer)同時既是用戶端也是伺服器,彼此直接交換資料。經典例子是 BitTorrent 檔案分享:你下載檔案的同時,也把已下載的片段上傳給其他人。參與的人越多,整體可用頻寬反而越大,因為大家互相分擔。
P2P 的優點是去中心化、抗單點故障、可擴展性好;缺點是難以管理、資料一致性不易保證,且常被濫用於非法散布內容。理解 P2P 的技術原理,目的在於設計合法的分散式系統(如內容分發、區塊鏈、分散式儲存),而非用於侵權散布——技術本身中立,使用方式才決定合法與否。
封包的旅程:一句訊息的完整冒險
讓我們把整段過程串起來,回到開頭那句「晚上要不要一起吃飯?」。
-
切割與封裝:應用程式把這句話交給作業系統,資料被切成封包。每個封包外層層層加上標頭(header),記錄來源位址、目的位址、序號等資訊——這就像把信紙裝進信封、寫上地址。
-
離開 LAN:封包先在你的 LAN 內傳到家用路由器。
-
進入 WAN:路由器把封包交給 ISP,封包開始在廣域網路中「跳躍」。每經過一台路由器,就讀一次目的地址、查路由表、決定下一站,這叫「逐跳轉送(hop-by-hop forwarding)」。
-
各走各路:同一句話的不同封包,可能走不同路徑、以不同順序抵達,途中甚至可能有封包遺失。
-
重組與確認:抵達朋友的裝置後,作業系統依序號把封包重新排序、拼回完整訊息;若發現缺漏,會請求重傳。這是傳輸層協定(如 TCP)的工作。
-
交付應用:完整訊息交給對方的通訊軟體,顯示在螢幕上。
整段旅程通常在零點幾秒內完成,而你完全感覺不到中間發生了這麼多事。
重點回顧
- 封包交換把資料切成自帶地址的封包、動態共享線路,相較於電路交換的專屬預留,更有彈性、更省資源、更能容錯——這是網際網路的根本設計。
- 頻寬、延遲、吞吐量是三個獨立指標:頻寬是容量上限、延遲是單程耗時、吞吐量是實際有效速率。互動體驗常由延遲(尤其 RTT)主導,而非頻寬。
- 傳播延遲受光速與距離限制,無法靠升級頻寬解決;大檔案傳輸由頻寬主導,頻繁來回的互動由延遲主導。
- LAN 是小範圍區域網路,WAN 是跨地域的廣域網路,網際網路是全球最大的 WAN——「網路之間的網路」。
- 用戶端-伺服器集中提供服務,P2P 去中心化彼此互助;前者好管理但有單點故障,後者抗故障但難治理。
深入探討(研究所視角)
封包交換之所以能讓眾多使用者共享有限線路而不致頻繁崩潰,核心機制是統計多工(statistical multiplexing)。
在電路交換的時分多工(TDM)中,線路被切成固定時槽,第 $k$ 個使用者只能用第 $k$ 個時槽——即使他沒資料要傳,那個時槽也空著浪費。統計多工則放棄固定分配:誰有封包要送,就誰用線路。由於各使用者的流量通常是「突發(bursty)」的——平時安靜、偶爾爆量,且彼此爆量的時間點不同步——把它們疊在一起時,總和的波動相對平緩。於是,一條只夠支撐少數使用者「同時滿載」的線路,實際上可以服務遠多於此的使用者。這正是封包交換能用較少資源服務較多人的數學基礎,本質上是一場關於「機率」的賭注:賭大家不會同時都要爆量。
但這場賭注偶爾會輸,代價就是排隊延遲(queuing delay)。當瞬間湧入的封包超過鏈路的轉送能力,路由器只能把它們暫存在緩衝佇列裡排隊,這段等待時間就是排隊延遲。它是前面延遲公式中唯一會劇烈變動的部分——也是網路「時快時慢」的主因。
排隊延遲的行為可用排隊論(queuing theory)刻畫。定義流量強度(traffic intensity) 為 $\rho = \lambda / \mu$,其中 $\lambda$ 是封包平均到達率、$\mu$ 是鏈路的平均服務率。對於最簡化的 M/M/1 模型,系統中平均封包數為:
$$ L = \frac{\rho}{1 - \rho} $$
由 Little's Law($L = \lambda W$)可推得平均逗留時間 $W = \dfrac{1}{\mu - \lambda}$。關鍵洞察在於:
- 當 $\rho \to 0$,幾乎不必排隊,延遲趨近於零;
- 當 $\rho \to 1$(流量逼近鏈路容量),排隊延遲急遽爆炸式上升,趨向無窮大。
流量強度 ρ 平均排隊封包數 L = ρ/(1-ρ)
0.5 1
0.8 4
0.9 9
0.95 19
0.99 99
這條曲線解釋了一個重要的工程現實:網路鏈路若長期運作在接近滿載($\rho$ 接近 1),延遲會難以忍受地暴增。因此實務上會刻意保留餘裕,讓 $\rho$ 維持在較安全的區間,並設計主動佇列管理(AQM) 與壅塞控制(congestion control) 機制(如 TCP 的壅塞視窗、RED、CoDel 等)來避免緩衝區被塞爆。當佇列滿了、新封包只能被丟棄,便產生封包遺失——這正是 TCP 偵測壅塞、主動降速的信號來源。
這也牽出一個與你日後課程相關的連結:緩衝膨脹(bufferbloat)。為了避免丟封包,有些設備配置了過大的緩衝區,結果封包不被丟棄、卻在佇列裡排了很久,導致延遲飆高——這說明「不丟封包」未必是好事,過度緩衝反而傷害互動體驗。理解統計多工的紅利與排隊延遲的代價是一體兩面,是後續學習傳輸層協定、網路壅塞控制、乃至資料中心網路設計的共同地基。