為什麼不用一座巨大的發射塔?
在上一篇裡,你看見了 Wi-Fi 如何覆蓋一個房間或一棟樓:一個存取點、一小片共享的無線電,大家禮貌地輪流。要覆蓋整座城市,最直覺的辦法就是把這個點子放大——在最高的山頭立一座巨大的天線,用最大功率轟出去,讓五十公里內的每支手機都聽得見。這個直覺,恰恰是錯的;而看清楚「為什麼錯」,正是整個蜂巢式概念的鑰匙。無線電頻譜是一種固定而稀缺的資源:頻率就那麼多,主管機關透過拍賣,以數十億的代價發出一條條窄窄的頻段。一座巨大的發射塔,得讓城裡每一支手機同時共用那一條頻段——數百萬人為了「空中時間」而爭搶,而 CSMA 早已告訴你,空中時間永遠是有限的。
蜂巢式的洞見,把問題整個翻了過來。與其用一個大細胞,不如把大地切成許多小細胞(cell),每個都由一座規模不大、屬於它自己的基地台來覆蓋。神奇之處在於:一條在某個細胞裡使用的頻率,可以在「夠遠、遠到兩個訊號彼此傳不到」的另一個細胞裡被重複使用——還記得這一級第一篇講的衰減嗎,無線電訊號隨距離快速變弱的那回事。那個原本感覺像麻煩的衰減,現在成了一份禮物:它讓同一批珍貴的頻率,能在地圖上一遍又一遍地被花用。這就是頻率重用(frequency reuse),也正是這套系統被稱為「蜂巢式」的原因——覆蓋地圖看起來就像一片由細胞組成的蜂巢,傳統上畫成六邊形,因為六邊形能毫無縫隙地鋪滿一個平面。
基地台:那座其實是交換器的塔
每個細胞的正中央,坐著一座基地台——你在高速公路旁看見的那座無線電塔,不過大部分的聰明之處,藏在塔底的設備機櫃裡,而不在那些金屬上。它的工作有兩張臉。面向手機這一張,它是一台無線電:它擁有這個細胞的頻率,並且時時刻刻決定哪支手機可以發送、何時發送。和「裝置靠著聆聽與避免碰撞來搶空中時間」的 Wi-Fi 存取點不同,基地台是一個嚴格的排程器——它明確告訴每支手機,該用哪一小片頻率、哪一個時間槽。這就是為什麼一個擁擠的細胞依然顯得井然有序:沒有人在蓋過別人說話,因為有一位裁判在分派輪次。
面向內側這一張臉,基地台是通往有線網路的入口匝道。它不是旅程的終點——它是第一跳。它背後跑著一條回傳(backhaul)鏈路,通常是光纖,把成千上萬支手機的流量,往運營商的機器那頭載回去。所以,把基地台理解成一種特別的交換器最為貼切:一邊是經過細緻排程的無線電,另一邊是一條通往有線世界的粗光纖。當你從手機送出一個封包,它先越過空氣抵達最近的基地台,再從那裡,沿著一般的纜線旅行,和你研究過的任何其他封包一模一樣。無線的那一段——那艱難、會掉東西的無線鏈路——只是最開頭與最結尾的那一跳而已。
核心網:基地台背後的大腦
在所有基地台背後,坐著旅客永遠看不見的那一部分:核心網(core network),或者就叫「核心」。如果基地台是這棟建築的門,核心網就是門裡的一切——那本認得每一位用戶的登記簿、那個查核「你是不是付費客戶」的守門人、那位數著你用了多少流量的記帳員,以及那道最終把你接上網際網路其餘部分的閘道。基地台是笨的、可替換的;而核心網,才是一張電話網路真正的身分與智慧所在之處。當人們說一張網路是「4G」或「5G」時,他們談的,既是無線電,更是這張核心網的設計。
核心網得解決一個有線網際網路從未面對過的問題:用戶會移動,而且必須被找到。每支手機都有一個永久身分,存在 SIM 卡上,和任何 IP 位址都分得清清楚楚。當你開機時,核心網會用那個身分對你做鑑別,並且——關鍵就在這裡——它會在一本「活的通訊錄」裡,記住你目前在哪一座基地台附近。所以核心網一次做了兩件、在一般網際網路上得拆給許多系統去做的事:它既是那張認得「你是誰」的位址與身分櫃台,也是那個知道「你此刻在哪裡」的定位服務。唯有當核心網替你定好位之後,它才會發給你一個 IP 位址,放你的封包出去、上到全球的網際網路。
YOUR PHONE THE INTERNET
| ^
| (1) radio link: scheduled, |
| lossy, scarce spectrum |
v |
[ BASE STATION ] --(2) backhaul fibre--> [ CORE NETWORK ] ---+
one per cell; - who are you? (SIM)
schedules the air; - where are you? (which cell)
first wired hop - count the data, charge it
- gateway out to the Internet移動而不斷線:換手
現在來看那個讓手機之所以是手機的功能:你可以用高速公路的車速,穿過數十個細胞,而你的通話或下載卻從不暫停。當你離開一個細胞、進入下一個,網路必須把你的連線,從舊的基地台搬到新的——這叫做換手(handoff,也稱 handover)。想像一場接力賽,而接力棒就是你那場正在進行的通話:跑者必須在兩人都還在跑時,乾淨俐落地把棒子交出去,因為一旦掉了,你的通話就斷了。你的手機不停地量測鄰近細胞的訊號強度並回報,好讓網路能在當前的細胞淡去之前,就看見一個更強的鄰居正在靠近。
- 你的手機在仍與基地台 A 通話的同時,量測到鄰近的基地台 B 現在訊號更強,並透過當前的鏈路把這件事回報上去。
- 核心網通知基地台 B 為你預備資源——在你抵達之前,它的細胞裡就先保留好一片頻率與一個時間槽。
- 在選定的那一瞬間,你的手機把無線電重新調諧到 B,核心網則把你的流量重新指向,讓封包改從 B 而非 A 流過。
- 基地台 A 釋放它原本為你保留的資源,把那段空中時間騰出來給舊細胞裡的其他人。
做得好的話,一次換手只花幾分之一秒,你根本不會察覺。但請注意它的代價:網路正在做實實在在的工——量測、傳訊、保留、切換——只為了在你移動時,讓你那一條連線存活下來。這就是行動性管理(mobility management),也正是一張蜂巢式核心網之所以遠比一台有線路由器複雜得多的深層原因。一台路由器只需回答「這個位址在哪裡?」;而一張蜂巢式核心網,得不停回答「這個人此刻、這一秒鐘,在哪裡?」——而每當你轉過一個街角,答案就變了。
為什麼移動與無線丟失會讓 TCP 困惑
說到這裡,階梯前段一個漂亮的點子,撞上了麻煩。回想 TCP 的壅塞控制:那位輕踩油門、卻猛踩煞車的小心駕駛,把每一個丟失的封包都讀成「網路塞車」的信號,然後立刻減速。那個假設——「丟失就代表壅塞」——在有線鏈路上是對的,因為位元在飛行途中幾乎從不毀損。但在一條無線鏈路上,它往往是錯的。一個封包可能因為一面牆擋在你和基地台之間、或干擾突然爆發、或位元錯誤率瞬間飆高而丟失——而這跟「有沒有塞車」完全無關。
於是經典 TCP 走火了:它看見一次無線丟失,假定是壅塞,於是猛踩煞車——把發送速率狠狠砍下,儘管那條路徑從未塞滿過。鏈路只是短暫地吵雜了一下,正確的動作本該是「把那一個封包重送、然後繼續前進」。結果,吞吐量卻毫無道理地崩了。這正是 無線環境下 TCP 效能 問題的核心,而它是一個誠實、眾所周知的瑕疵,不是我們在替它打圓場的小細節。它是分層設計的代價:高高坐在上層的 TCP,分不清一個封包為什麼消失了,於是只好退回它與生俱來的那唯一一個假設。
把它們拼起來
退一步看,整套架構,就是同一個乾淨的點子在尺度上反覆。把空間切成細胞,好讓稀缺的頻譜能被重用;在每個細胞的核心放一座會排程的基地台,它既是無線電、也是第一個有線跳;再把所有的智慧,掛在一張核心網上,由它認得每位用戶是誰、在哪裡,數著他們的流量,並把他們橋接到全球網際網路。疊在最上頭,行動性管理透過一次又一次的換手,在你移動時讓你那一條連線存活著。而誠實地穿過這一切的,是與 TCP 之間的張力——TCP 從來不是為「一條因物理、而非壅塞而丟封包的路徑」設計的。
結尾來一句誠實的提醒:「蜂巢式」是一個由許多代組成的家族,不是一個固定的設計,而 4G LTE 與 5G 之間的界線,一部分是真材實料的工程、一部分是行銷。本篇講的那副骨架——細胞、基地台、核心網、換手——是它們全體共有的。代與代之間改變的,是無線電跑得多快、核心網變得多扁平與軟體化,以及每一層把無線丟失藏離 TCP 的手法有多巧。而那,正是下一篇的故事。