JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

網際網路的形狀:層級、轉接與對等互連

第 1 篇給了你自治系統這塊積木。現在我們退一步,看看數以萬計的它們是如何被接成一張行星大小的單一網路,並發現藏在它核心的意外之事:網際網路的形狀,是由金錢與合約畫出來的,而不是由最短路徑畫出來的。

從一張網路,到網路的網路

在上一段,你看著單一張網路內部的路由器分享自己能抵達哪裡,並用 OSPF 這類內部閘道協定算出最低成本路徑。在這一段的第 1 篇,你認識了自治系統,也就是 AS:一張在單一管理之下、當成一個整體來經營的網路,並戴著一個叫做 ASN 的編號。把這兩個概念一起記在腦裡,因為網際網路正是用恰好兩層搭起來的。在每個 AS 內部,內部協定在營運者自己擁有的線路上找好路徑。在 AS 之間,則由另一個協定把這些島嶼縫起來。這個兩層的區分就是階層式路由,也是路由能擴展到整個行星的唯一原因。

為什麼要分層?想想規模。全世界有遠超過十萬個自治系統。如果地球上每台路由器都得個別知道通往其他每台路由器的路徑,那些表會大得不可能,而為了讓它們保持新鮮所產生的喋喋不休永遠不會安定下來。階層把細節藏起來:東京的一台路由器不需要知道巴西某張網路內部的接線,它只需要知道該把封包交給哪一個鄰居 AS,好讓它朝大致正確的方向旅行。一個 AS 對外面所有人來說都是一個黑盒子。你只看得到門,永遠看不到房間。

三種網路:誰把「可達性」賣給誰

不是所有 AS 都平等,而這份不平等大致關乎「可達性」。最底下是末端網路(stub 或 edge):一所大學、一家公司、一個內容供應者。它們買連線,但不會讓陌生人的流量穿過自己。中間是區域型與全國型的 ISP,它們連著底下的客戶,並向更大的人買「再往上」的可達性。最頂端坐著一個小俱樂部,也許就那二、三十家,叫做第一級 ISP(tier-1):全球骨幹網。第一級網路由一個了不起的性質來定義——它不必付任何人轉接費,就能抵達網際網路上的每一個目的地。它不向任何人買可達性。按定義,它就是這座金字塔的頂端。

任兩個有連線的 AS 之間,關係只有兩種,而是哪一種決定了一切。第一種是供應者—客戶關係,也叫轉接(transit)。客戶付錢給供應者,換取通往整個網際網路的可達性。錢往上流;路由則上下都流。把它想成一家小店在巨大購物中心裡租了一個攤位:小店付租金,作為回報,購物中心把它連到每一位顧客、以及這條連鎖裡的其他每一座購物中心。客戶自己的路由會被供應者向全世界宣告,而全世界的路由則被交到客戶手上。轉接,就是真正把「網際網路」賣給你的那種關係。

第二種叫對等互連(peering),是個聰明的捷徑。兩個規模大致相當的 AS 注意到,它們的客戶之間有大量流量往來,而它們各自都在付錢給供應者、繞遠路把這些流量載過去。於是它們同意直接相連、免費交換那些流量——用術語講叫「無結算」(settlement-free)。關鍵規則是:對等互連只承載兩個對等者各自客戶之間的流量,絕不通往網際網路的其餘部分。兩座相鄰的購物中心也許會蓋一座私人天橋,好讓各自的顧客直接走過去,但兩座中心都不會讓一個陌生人免費用那座天橋去抵達第三座遙遠的購物中心。對等互連省錢又降低延遲,但它不會讓你變成任何人的免費轉接。

線路真正交會的地方:IXP

如果一座城市裡有上百張網路全都想彼此對等互連,要替每一對都拉一條自己的私人纜線,會是一場組合爆炸的惡夢。優雅的答案是一個共用的會面廳:網際網路交換中心,也就是 IXP。實體上它常常是一棟很大的中立建築(或好幾棟相連),裡頭塞滿機櫃,正中央擺著一台又大又快的交換器。每一個參與的網路拉一條纜線進這棟樓、插上那台交換器,現在它離其他每一個插上去的人都只剩一跳。與其替每個鄰居都修一條路,不如大家都開到同一個停車場,在那裡碰面。

在 IXP 裡,兩個想對等互連的網路會跨過那台共用交換器,彼此建立一個對等互連工作階段,開始替各自的客戶交換路由。於是單獨一個實體連接埠就能同時承載通往數十甚至數百個對等者的工作階段。這就是為什麼你在某座城市家裡發出的一個封包,常常能抵達城另一頭的影音服務、卻完全沒碰過任何第一級骨幹——它穿過一個本地 IXP 就到了。IXP 是網際網路那不起眼的公共基礎建設:讓流量留在本地、便宜、又快。

最大的意外:依政策路由,而非依距離

這裡有一個幾乎讓所有人都絆倒的概念,而它正是這整篇指南的重點。在一個 AS 內部,路由是真心想找出最短、最便宜的路徑——那就是 OSPF 在算的東西。但在 AS 之間,它不是。跨網域路由講的是政策與經濟,而不是距離。如果比較短的那條路要花錢,一個 AS 會非常樂意把你的流量導去比較長的那條路。一個封包橫越網際網路的旅程的形狀,遠遠更多是由「誰付錢給誰」畫出來的,而不是由「地理上哪邊最近」畫出來的。

這套邏輯直接從錢裡掉出來。把流量送向一個客戶會替你賺錢(他們付你錢),所以經由客戶的路由是所有選項裡最迷人的。把它送過一條對等互連線路是免費的。把它往上送給一個供應者則要花你錢。於是地球上幾乎每一張網路,在有下一跳可選時,都遵循同一套出於本能的排序:優先選從客戶學來的路由,其次是從對等者學來的路由,只有在不得已時才動用從供應者學來的路由。這個經驗法則普遍到有了個名字,而它解釋了流量實際移動方式的絕大部分。

Two routes to the same destination D, seen by network X:

  Route A:  X -> (customer) -> D      cheapest: customer pays X
  Route B:  X -> (provider) -> ... -> D   most expensive: X pays provider

  X picks Route A  --  even if Route B has FEWER AS hops.

Preference ranking almost every AS uses:
     customer  >  peer  >  provider
     (earns money) (free)  (costs money)
一個 AS 會偏好那條替它賺錢的路由,勝過那條讓它花錢的,即使那條對它較便宜的路由其實比較長。政策勝過距離。

這帶來一個深遠的後果,而那些老式的最短路徑協定根本無力處理:網際網路挑出的路徑,常常不是最短的那條,而這是刻意設計,不是臭蟲。它也意味著跨網域協定不能只是算出距離、把它們最小化。它必須讓每一張網路都能表達自己私下的商業規則、並對其他所有人保密,同時仍然產生出一個前後一致的全域系統。要造出能做到這件事的協定真的很難,而這正是第 3 篇要介紹的:BGP。

黏合劑:BGP 與它所攜帶的路徑一瞥

讓各個獨立王國向彼此宣告「可達性」的協定,是邊界閘道協定,BGP。第 3 篇會好好把它拆開;這裡我們只需要它的形狀,好讓上面那套經濟學有個立足點。BGP 不宣告距離,也不宣告線路成本。取而代之,當一個 AS 告訴鄰居它能抵達某一塊位址時,它會附上這則宣告為了走到那裡所經過的完整 AS 清單。那份清單就是 AS 路徑:不是「那裡離這裡 9 跳」,而是「要抵達那裡,先穿過 AS 174、再 AS 3356、再 AS 15169」。

攜帶整條路徑、而不只是一個數字,正是讓 BGP 成為路徑向量(path-vector)協定的原因,而這一招一次買到兩樣東西。第一,網路可以套用政策:看著那條 AS 路徑,它能看出某條路由會不會逼自己的流量穿過某個競爭對手、或某個它不喜歡的供應者,然後拒絕它。第二,這條路徑本身就是一個內建的迴圈偵測器。如果一個 AS 在抵達的 AS 路徑裡看到自己的編號已經在裡面了,它就知道這則宣告繞回到自己了,於是悄悄丟掉它。不必計數至無窮,不必猜測——迴圈的證據就明明白白擺在那份清單裡。

現在你看得出這兩層是怎麼喀一聲扣在一起的了。在每個 AS 內部,內部協定在自己擁有的線路上找出真正的最短路徑。在 AS 之間,BGP 攜帶著帶有完整 AS 路徑的可達性,好讓每一張網路都能套用自己那套客戶優先於對等者、對等者優先於供應者的經濟學,並拒絕任何違反政策的東西。距離統治內部;政策統治外部。心裡裝好這個模型,你就準備好迎接第 3 篇了——在那裡,我們會看一條路由真正一跳一跳地、跨過兩張網路之間那道接縫被宣告出去。