斯坦福 CS144 計算機網絡播客:路由基礎到 STP 二層路由和 BGP 三層路由算法
互聯網如何將全球數十億臺設備連接在一起?當你打開瀏覽器訪問一個網站時,數據包是如何穿越大半個地球,精準地找到目標服務器,并將內容呈現在你眼前的?這一切的背后,都離不開一個核心技術—— 路由(Routing) 。
路由的基本構件
什么是路由器?
簡單來說, 路由器(Router) 是一種連接兩個或多個網絡的設備。它的核心任務是接收傳入的數據包,檢查其目標地址,然后決定將它轉發到哪一個網絡,最終送達目的地。你可以把它想象成全球郵政系統中的一個中轉站,它不生產信件(數據),只負責高效地分揀和派送。
路由器如何做出決策?
路由器的決策依據是一張內置的地圖,稱為 轉發表(Forwarding Table) 。這張表里并不記錄互聯網上每一臺設備的具體地址,而是使用一種更高效的方式—— 路由前綴(Routing Prefix) 。
一個路由前綴代表了一個地址范圍,比如 192.0.2.0/24 就代表了從 192.0.2.0 到 192.0.2.255 的所有 IP 地址。當一個數據包到達時,路由器會用它的目標 IP 地址去匹配轉發表中的所有前綴。如果有多條前綴都能匹配上,路由器會遵循 最長前綴匹配(Longest Prefix Match) 原則,選擇最具體(也就是前綴最長)的那條路由。
# 簡化的轉發表示例
| Prefix | Next Hop |
|-------------------|-----------------|
| 192.0.2.0/24 | Interface 1 |
| 192.0.0.0/8 | Interface 2 |
| 0.0.0.0/0 | Interface 3 |
# 目標地址:192.0.2.10
# 匹配結果:
# - 192.0.2.0/24 (長度 24) -> 匹配
# - 192.0.0.0/8 (長度 8) -> 匹配
# - 0.0.0.0/0 (長度 0) -> 匹配
#
# 根據最長前綴匹配原則,選擇 /24 的路由,從 Interface 1 轉發。水平分割和垂直分割
這里有兩個概念:
- 水平分割(Horizontal partitioning) :把網絡按“橫向”切分為若干自治單元——例如按地理區域、運營商或租戶劃分的 AS、IXP、區域 POP 等。水平分割利于規模化擴展、流量局部化和政策隔離(如本地出站優先、本地中轉或對等策略),常見的實踐包括區域路由、Anycast/CDN 節點分布和多區域自治系統設計。
- 垂直分割(Vertical partitioning) :把網絡按“縱向”層次或職責劃分,例如將二層轉發、三層路由、控制平面、管理/監控平面或服務功能(防火墻、負載均衡)分離開來。垂直分割可以提高安全性與模塊化(例如 VLAN/VRF 隔離、SDN 控制器與轉發器分離、EVPN/VXLAN 的 overlay 下發與 underlay 轉發分工),并使得不同層可以獨立演進或做精細化策略。
水平分割決定“誰跟誰互通、哪條流量本地化”,直接影響商業關系與流量走向;垂直分割決定“誰做決策、誰做轉發與隔離”,直接影響可管理性、安全性與演進路徑。
互聯網的宏觀結構:自治系統
互聯網并不是一個單一、統一的網絡。它是由成千上萬個獨立管理的網絡組成的“網絡的網絡”。每一個這樣的獨立網絡被稱為一個 自治系統(Autonomous System, AS) 。
一個 AS 通常由單一實體(如谷歌、AT&T、一所大學)管理,并擁有統一的路由策略。每個 AS 都有一個全球唯一的編號,即 自治系統編號(Autonomous System Number, ASN) ,早期是 16 位,現在已擴展到 32 位。正是這些 AS 之間的相互協作,才構成了我們今天所知的全球互聯網。
互聯網的架構也經歷了一系列演變:
- 1995 年前 :由美國政府運營的單一骨干網構成,結構簡單。
- 1995-2005 年 :商業化轉型,多個商業網絡運營商共同構成了骨干網,催生了用于在不同 AS 間交換路由信息的 邊界網關協議(Border Gateway Protocol, BGP) 。
- 如今 :互聯網結構趨于扁平化和整合。大型內容提供商(如 Google, Netflix)構建了自己的全球網絡,它們與傳統的電信運營商共同構成了互聯網的核心。這些巨頭通過 內容分發網絡(Content Delivery Networks, CDN) 將內容部署到離用戶更近的地方,極大地改變了全球流量的模式。
網絡間的互聯需要物理設施,主要通過兩種方式實現:
- 互聯網交換點(Internet Exchange Point, IXP) :一個公共的物理設施,允許多個 AS 在此通過交換機實現多邊連接。
- 直接互聯(Private Peering) :兩個網絡之間的專用雙邊物理連接。
路由背后的商業邏輯
AS 之間的路由選擇不僅僅是技術問題,更深刻地受到商業關系的驅動。理解這些關系是理解 BGP 路由策略的關鍵。
中轉(Transit)與對等(Peering)
AS 間的商業關系主要分為兩種:
- 中轉(Transit) :這是一種客戶與提供商的關系??蛻?AS 付費給提供商 AS,以獲得訪問整個互聯網的路徑。提供商會向其客戶通告它所知道的所有路由(來自它的其他客戶、對等方和上游提供商)。資金從客戶流向提供商。
- 對等(Peering) :這是一種平等的合作關系。當兩個 AS 之間有大量且大致對等的流量交換時,它們可能會選擇建立對等關系。這種關系通常是 結算免費(settlement-free) 的,即雙方互不收費。在對等關系中,一個 AS 只會向其對等方通告自己網絡以及其客戶網絡的路由, 絕不會 通告從其他提供商或對等方學到的路由。
這個核心原則可以總結為 “絕不為你的對等方或提供商提供免費中轉服務” 。
路由策略與過濾
基于上述商業關系,AS 在向其鄰居通告路由時會實施嚴格的策略和過濾:
- 向客戶通告 :通告所有路由(自身的、來自其他客戶的、來自對等方的、來自提供商的),因為客戶付費就是為了獲得完整的互聯網可達性。
- 向提供商通告 :只通告自身以及來自其客戶的路由。因為 AS 不會付費讓提供商去訪問它的其他鄰居。
- 向對等方通告 :只通告自身以及來自其客戶的路由。這是為了避免免費為對等方提供中轉服務。
這些策略構成了 BGP 的核心配置,決定了全球互聯網流量的走向。
自治系統(AS)詳解:一個形象化的例子
上面的概念可能依然有些抽象。讓我們通過一個更具體的例子來理解 AS 到底是誰,以及商業策略是如何在現實中運作的。
AS 到底是誰?
擁有 ASN 的實體多種多樣,我們可以大致分為幾類:
- 一級運營商(Tier-1 Provider) :如美國的 AT&T (AS7018)、Lumen (AS3356),歐洲的 Arelion (AS1299)。它們是互聯網的頂級骨干網,網絡遍布全球。它們之間通過對等關系互聯,并且不向任何人購買中轉服務。它們是互聯網路由表的“源頭”。
- 大型內容提供商(Content Provider) :如 Google (AS15169)、Meta/Facebook (AS32934)、Netflix (AS2906)。它們為了優化用戶體驗,也構建了龐大的全球網絡。它們會積極地與各級運營商建立對等關系,以便將內容更快地送達用戶。
- 區域性 ISP 或接入網 :比如你家或公司所使用的寬帶服務提供商。它們通常是一個國家或地區性的網絡,需要向上級運營商(如一級或二級運營商)購買中轉服務,以連接到全球互聯網。
- 大學和科研機構 :許多大型學術機構也擁有自己的 AS,用于科研和教學。
場景劇場:一次視頻訪問的路由之旅
假設有以下參與者:
- 你 :一位普通用戶。
- LocalISP (AS65001) :為你提供寬帶服務的本地運營商。
- ContentProvider (AS65002) :一家大型視頻流媒體公司。
- Tier1-Carrier (AS701) :一家全球一級運營商。
它們的商業關系如下:
Tier1-Carrier (AS701)
/ \
/ \ <---- (Peering: 結算免費)
(Transit: 付費) / \
/ \
LocalISP (AS65001) ContentProvider (AS65002)
|
|
你現在,你想觀看 ContentProvider 上的視頻,數據包的路由策略將這樣執行:
LocalISP的視角 :它是一個客戶,向Tier1-Carrier付費購買中轉服務。因此,Tier1-Carrier會向LocalISP通告它所知道的 所有 互聯網路由,其中就包括去往ContentProvider (AS65002)的路由。反過來,LocalISP只會向Tier1-Carrier通告自己的用戶地址段。ContentProvider的視角 :它和Tier1-Carrier是對等關系,因為它們之間有巨大的、對等的流量交換。ContentProvider會向Tier1-Carrier通告自己的服務器 IP 地址段。Tier1-Carrier則會向ContentProvider通告 自己以及自己所有客戶(包括LocalISP) 的路由。Tier1-Carrier的視角(策略核心)
它從客戶 LocalISP 學到了 LocalISP 的用戶路由,它會把這條路由通告給 全世界 (包括它的其他客戶、對等方如 ContentProvider、以及其他提供商)。因為讓全世界都能訪問到自己的客戶,是它提供服務的價值所在。
它從對等方 ContentProvider 學到了視頻服務器的路由,它只會把這條路由通告給 自己的客戶 (如 LocalISP)。它 絕不會 把這條從對等方學來的路由,再通告給它的其他對等方或提供商。否則,就等于在免費幫 ContentProvider 把流量轉發出去了,這違背了商業原則。
通過這個例子,我們可以清晰地看到,BGP 路由的傳播路徑完全由這些預設的商業策略所主導,而不僅僅是尋找技術上的“最短路徑”。
域內路由:尋找最短路徑
在一個 AS 內部,路由器之間也需要協議來發現彼此并計算到達 AS 內各個目標的最佳路徑。這類協議被稱為 內部網關協議(Interior Gateway Protocol, IGP) 。其目標通常是找到成本最低的路徑,構建一棵 最小成本生成樹(minimum-cost spanning tree) 。
兩種核心算法
歷史上出現過多種路由算法,但現代網絡主要依賴以下兩大類:
距離矢量算法(Distance-Vector Algorithm)
距離矢量算法的核心思想是“聽信鄰居”。每個路由器維護一張表,記錄著它到所有已知目的地的“距離”(成本),并將這張表(即距離矢量)分享給它的直連鄰居。
- 代表協議 :路由信息協議(Routing Information Protocol, RIP) ,基于經典的 Bellman-Ford 算法。
- 工作方式 :路由器收到鄰居的距離矢量后,會將其與自己的信息進行比較。如果通過某個鄰居能以更低的成本到達目的地,它就會更新自己的路由表。這個過程不斷迭代,最終會收斂。
- 致命缺陷 :存在 “慢收斂到無窮大”(counting to infinity) 問題。當一個網絡鏈路斷開時,“壞消息”的傳播速度非常慢,可能導致路由器在很長一段時間內相信一條已經失效的路徑,甚至形成路由環路。雖然有 毒性反轉(Poison Reverse) 等技術來緩解,但無法根治。因此,RIP 在現代網絡中已基本被淘汰。
鏈路狀態算法(Link-State Algorithm)
鏈路狀態算法的核心思想是“全局地圖”。每個路由器都負責發現并通告其所有直連鏈路的狀態(如鏈路成本)。這些信息會在整個 AS 內被廣播。
- 代表協議 : 開放最短路徑優先(Open Shortest Path First, OSPF) ,基于著名的 Dijkstra 算法。
- 工作方式
信息共享 :每個路由器通過泛洪(Flooding)機制,將自己的鏈路狀態信息發送給 AS 內的所有其他路由器。
構建地圖 :最終,每個路由器都擁有了整個 AS 的完整網絡拓撲圖。
本地計算 :每個路由器獨立地、以自己為根節點運行 Dijkstra 算法,計算出到所有其他節點的最短路徑樹,并據此生成自己的轉發表。
- 優勢 :由于每個路由器都有全局視野,收斂速度快,且能有效避免路由環路。這使得 OSPF 成為當今最主流的 IGP 之一。
熱土豆路由(Hot-Potato Routing)
這是一個非常形象的路由策略,常見于大型 AS 內部。其核心思想是: 盡快將數據包扔出自己的網絡 。當一個 AS 有多個出口可以到達某個外部目的地時,它內部的路由器會選擇一條路徑,使得數據包在自己網絡內經過的成本(IGP 成本)最低。這相當于把路由的“燙手山芋”盡快丟給下一個 AS。
域間路由的王者:BGP
當數據包需要跨越 AS 邊界時, IGP 協議就無能為力了。這時, 邊界網關協議(Border Gateway Protocol, BGP) 登上了舞臺。BGP 是迄今為止唯一被廣泛使用的 外部網關協議(Exterior Gateway Protocol, EGP) 。
BGP 的獨特之處:路徑矢量協議
BGP 既不是距離矢量,也不是鏈路狀態協議,它是一種 路徑矢量協議(Path-Vector Protocol) 。BGP 在通告路由時,不僅包含目標前綴,還附帶了一條關鍵屬性: AS 路徑(AS-PATH) 。
AS-PATH 記錄了該路由通告所經過的完整的 AS 序列。
# 示例: 前綴 203.0.113.0/24 的一條 BGP 路由
# AS-PATH: 64500 65500 701
#
# 這表示該路由起源于 AS 701,途徑 AS 65500,再途徑 AS 64500,最終被通告出來。AS-PATH 屬性帶來了兩個核心好處:
- 無環路 :路由器收到一條 BGP 更新時,會檢查
AS-PATH。如果發現自己的 ASN 已經存在于路徑中,就意味著這是一個環路,該路由將被丟棄。 - 策略基礎 :
AS-PATH的長度(經過的 AS 數量)成為衡量路徑好壞的一個重要指標,但更重要的是,AS 可以基于AS-PATH以及其他屬性來實施復雜的路由策略。
BGP 路徑選擇過程
BGP 最重要的特性就是其強大的策略能力。當一臺 BGP 路由器收到關于同一個目標前綴的多條路徑時,它會按照一個嚴格的決策流程來選擇最佳路徑。這個過程通常遵循以下順序:
- 選擇本地優先級(
LOCAL_PREF)最高的路徑 :這是一個只在 AS 內部傳遞的屬性,數值越高越優先。網絡管理員通常用它來區分客戶、對等方和提供商的路由(客戶 > 對等 > 提供商)。 - 選擇 AS 路徑(
AS-PATH)最短的路徑 :路徑中經過的 AS 數量越少越好。 - 考慮多出口鑒別器(
MED) :如果多個路徑來自同一個鄰居 AS,MED值較低的路徑會被優先選擇。 - 優先選擇 eBGP 路徑而非 iBGP 路徑 :
eBGP用于 AS 之間,iBGP用于 AS 內部。路由器傾向于選擇從外部鄰居直接學到的路徑。 - 選擇到下一跳 IGP 成本最低的路徑 :這就是熱土豆路由的應用。
- 當一切都相同時,通過路由器 ID(Router ID)決勝 :選擇來自 BGP 路由器 ID 值最低的鄰居的路徑。
BGP 的挑戰與問題
盡管 BGP 是互聯網的基石,但它也存在一些固有的問題:
- 配置復雜 :BGP 策略配置復雜且容易出錯,一個小小的錯誤可能引發全球性的網絡中斷,這被稱為路由的“蝴蝶效應”。
- 缺乏安全 :BGP 協議在設計之初沒有內置強大的認證機制。這使得 BGP 劫持(BGP Hijacking) 成為可能,攻擊者可以惡意通告不屬于自己的 IP 前綴,將流量重定向到自己控制的設備上,從而竊取數據或造成服務中斷。
- 收斂緩慢 :當網絡發生變化時,BGP 的收斂過程可能需要幾分鐘,期間可能導致數據包丟失或路由循環。
二層網絡與環路:以太網交換、環路問題與 STP 系列協議
二層(鏈路層)網絡主要由以太網交換機組成。交換機通過學習 MAC 地址并基于目的 MAC 轉發以太網幀,從而實現局域網內的點到點通信。然而,以太網幀本身沒有像 IP 的 TTL(生存時間)字段這一類內置的“壽命”機制;一旦網絡中存在拓撲環路,幀會被設備不斷轉發、復制,迅速導致 廣播風暴(broadcast storm) 、MAC 表不穩定(MAC 地址在不同端口間不斷“翻轉”)以及鏈路飽和——整個二層域可能因此“癱瘓”。
為了解決二層環路問題,工程上產生了若干機制與協議,其中最經典也最廣泛部署的是 生成樹協議(Spanning Tree Protocol, STP) 及其改進版本(如 RSTP、MSTP)。同時在數據中心與大規模網絡中,也出現了基于鏈路狀態的二層替代方案(TRILL、SPB、EVPN+VxLAN 等)來實現多路徑、快速收斂與更高的帶寬利用率。
以太網交換的基本工作
- MAC 學習(CAM 表) :交換機在收到幀時記錄源 MAC 與收到該幀的接口(即學習),并將此信息放入 MAC 地址表(有時稱 CAM)。條目有壽命(aging time),若長時間未見到該 MAC,條目會被老化刪除。
- 基于目的 MAC 轉發 :若目的 MAC 在表中有對應端口,則只在該端口轉發;若未知或為廣播/多播,則在除了接收端口以外的所有端口泛洪(flood)。
- 泛洪與廣播 :ARP 請求、DHCP 廣播等會被泛洪到同一二層域內的所有端口。
這些機制在無環路的網絡中能高效運行;但一旦存在環路,泛洪的幀會被在環內不斷復制并被各交換機再次學習與泛洪,形成惡性循環。
為什么環路會導致“網絡爆炸”?
關鍵點在于:以太網幀沒有 TTL,交換機不會丟棄已轉發過的幀(除非收到重復檢測或物理端口被禁用),因此:
- 廣播幀被不斷泛洪 ,在環路中循環,造成廣播風暴,耗盡帶寬。
- MAC 表不穩定(MAC Flapping) :不同交換機在不同時間學習到同一 MAC 在不同端口,表項頻繁更新,導致大量控制流量與錯誤轉發。
- CPU / 轉發資源被占滿 :交換機需要處理大量重復幀,可能導致 CPU 飽和,甚至丟失管理連接。
因此必須在二層網絡中消除或控制環路。
生成樹協議(STP, IEEE 802.1D)
STP 的目標是:在存在物理環路的情況下,通過邏輯禁用部分端口,形成一顆無環的 生成樹(spanning tree) ,從而保證任意兩個節點之間只有唯一的轉發路徑。
工作原理(核心流程)
- 橋 ID(Bridge ID)與根橋(Root Bridge)選舉 :每臺支持 STP 的交換機有一個 Bridge ID,通常由優先級(priority)和交換機的 MAC 地址組成。優先級越小越優先(廠商實現中不同方式),根橋選舉為 Bridge ID 最小的交換機。
- 端口角色 :STP 將每個端口分配為以下角色以構建樹:
- Root Port (RP) :到根橋的最短路徑上的端口(每臺非根橋只有一個)。
- Designated Port (DP) :負責在該網絡段(collision domain)上轉發到根橋方向的端口(每個網段只有一個 DP)。
- Blocked Port :不轉發數據幀,用于阻斷環路。
- 路徑代價(Path Cost) :端口到根橋路徑的代價是各鏈路代價的累加,鏈路代價與帶寬相關(速率越高代價越?。B窂酱鷥r用于比較多條候選路徑的優劣。
- 端口狀態機 :傳統 STP 定義了若干定時器和狀態:
Blocking→Listening→Learning→Forwarding。這些過渡用以避免臨時環路并允許網絡穩定。常見默認定時器:Hello = 2s、MaxAge = 20s、ForwardDelay = 15s(不同實現可調整)。 - BPDU(Bridge Protocol Data Unit) :交換機通過發送 BPDU 來互相交流根信息、路徑代價、端口角色等。BPDU 在二層直接傳輸,不依賴 IP。
STP 的限制
- 收斂慢 :由于監聽/學習狀態及保守的定時器,拓撲變化時收斂可能需要幾十秒到上分鐘,這對實時業務和數據中心不可接受。
- 單一樹拓撲 :STP 在部署時會關閉多條物理鏈路以消除環路,造成鏈路資源浪費(帶寬未被充分利用)。
- 可擴展性問題 :在大型環境(大量交換機/VLAN)中復雜度與收斂問題更明顯。
迅速生成樹協議(RSTP, IEEE 802.1w)
為了解決 STP 收斂慢的問題,IEEE 定義了 RSTP(Rapid Spanning Tree Protocol),作為 802.1D 的增強并向后兼容。
RSTP 的主要改進
- 更快的狀態轉換 :RSTP 引入了
Proposal/Agreement的握手機制,能在點對點鏈路上實現幾乎即時(毫秒級)地從阻塞到轉發的轉換。 - 端口角色擴展 :增加了 Alternate 和 Backup 角色,用于標識可用的替代路徑,從而加速故障切換。
- Edge Port(類似 Cisco 的 PortFast) :針對直接連接終端設備(主機)的接入端口,允許繞過學習/監聽,立即進入轉發態,避免主機連網時觸發暫時中斷。
- 更少依賴計時器 :通過基于事件的同步機制,減少了對長時間計時器的依賴,從而更快收斂。
RSTP 能與傳統 STP 混合部署;在與老設備交互時會回退到兼容模式。RSTP 推薦在現代交換網絡中作為默認生成樹實現。
多實例與多 VLAN:PVST、MSTP
- PVST / PVST+(Per-VLAN STP) :思科提出的變體,為每個 VLAN 維護單獨的生成樹,從而可以為不同 VLAN 指定不同根橋,利于流量工程,但也增加了資源開銷。
- MSTP(Multiple Spanning Tree, IEEE 802.1s) :允許將多個 VLAN 映射到同一生成樹實例,從而在可控規模內實現多根而不至于爆炸性增長的實例數量。MSTP 面向較大網絡的可擴展性做了折中。
額外的二層防護與增強機制
- BPDU Guard :當端口被配置為 Edge/PortFast 時,如果接收到 BPDU 則將該端口切斷,用以防止錯誤設備或錯誤連線破壞生成樹。
- Root Guard :防止某個端口在不該成為根橋的情況下宣稱自己為根,保護拓撲穩定性。
- Loop Guard :防止因單向鏈路問題導致原本處于阻塞態的端口錯誤地進入轉發狀態。
- UDLD(Unidirectional Link Detection) :檢測物理鏈路的單向故障,配合 STP 避免錯誤轉發。
- Storm Control / Broadcast Suppression :在交換機上限制廣播/多播/未知單播流量的過快增長,從而在環路或故障時減輕影響。
- MAC 地址表老化與穩定化策略 :調整老化時間、配合端口安全(port-security)可減少因 MAC Flapping 帶來的影響。
- IGMP Snooping :在交換機層面監聽 IGMP 消息,以便僅向需要的端口轉發組播,減少泛洪量。
二層網絡的現代替代方案(數據中心/大規模網絡)
由于 STP 系列總是在拓撲上產生受阻的鏈路,現代數據中心和大規模運營商網絡往往采用能夠同時激活多條路徑、并提供快速收斂的技術:
- TRILL(Transparent Interconnection of Lots of Links) :使用鏈路狀態協議(IS-IS)在交換設備間建立拓撲,交換機(RBridge)作源路由封裝,允許所有物理鏈路并行工作,支持多路徑。
- SPB(Shortest Path Bridging, IEEE 802.1aq) :也是基于鏈路狀態的二層解決方案,計算最短路徑并允許所有路徑同時轉發。
- 廠商方案(如 Cisco FabricPath) :實現類似的鏈路狀態二層轉發,支持 ECMP 多路徑。
- Overlay + EVPN(例如 VXLAN+EVPN) :在三/四層之上建立覆蓋網絡,通過控制平面(EVPN)提供 MAC 學習與分發,底層為 IP 網絡且使用等價多路徑 (ECMP),常見于云/數據中心網絡。
這些方案的共同點是引入了“鏈路狀態”或“控制平面分發”的思想,使網絡能夠利用多條物理路徑、快速收斂并擺脫單一生成樹的帶寬浪費問題。
設計與運維最佳實踐
- 根橋控制 :在設計中手動指定根橋(調低優先級),而不是讓自動選舉決定,確保流量按預期走向。
- 接入端口配置 PortFast/Edge :對直接連接主機的端口啟用 edge/portfast,并同時啟用 BPDU Guard 以防誤接交換設備。
- 啟用 BPDU Guard / Root Guard / Loop Guard / UDLD :根據角色選擇合適防護,防止錯誤或惡意 BPDU 導致拓撲變動。
- 鏈路聚合(LACP) :對需要更高帶寬/冗余的鏈路使用鏈路聚合,而不是依賴單條鏈路。
- 洪泛控制 :啟用 storm-control、IGMP snooping 等特性,限制廣播/未知單播/組播的泛洪。
- 監控與測試 :監控 MAC 表、BPDU 活動、端口狀態;在變更前在實驗網或維護窗口中驗證配置。
- 考慮現代架構 :在數據中心或需要高可用高帶寬利用的場景,評估 EVPN/VXLAN、TRILL 或 SPB 等替代方案。
VLAN(虛擬局域網,Virtual LAN)
VLAN(虛擬局域網,Virtual LAN)是一種在二層上把物理交換網絡劃分成多個 邏輯隔離的廣播域 的技術——同一 VLAN 內的主機像在同一交換機/端口組上,可以互相看到 ARP/廣播;不同 VLAN 的主機默認互相隔離,必須通過三層設備(路由器/三層交換)才能通信。
- 標準 :IEEE 802.1Q。VLAN 標簽在以太網幀中插入 4 字節(TPID=0x8100 + TCI),其中包含 12-bit 的 VLAN ID(范圍 0-4095,1–4094 可用,0 表示優先級/未標記幀,4095 保留)。
- Access port(接入口) :通常只屬于一個 VLAN,接入主機不帶標簽;交換機會給該端口發出的幀加/解標簽。
- Trunk port(干道口) :攜帶多個 VLAN 的標簽(802.1Q),用于交換機間或交換機與路由器之間傳遞多 VLAN 流量。
- Native VLAN :在 802.1Q 中可指定一個未標記的 VLAN(兼容舊設備),但也帶來安全隱患,通常推薦禁用或謹慎使用。
- VLAN 隔離 :廣播/未知單播/多播 在 VLAN 范圍內泛洪,而不會跨 VLAN(除非顯式路由或橋接)。
- Inter-VLAN Routing :不同 VLAN 間的通信通過三層設備(SVI、Router-on-a-stick、L3 路由器)實現。
- Q-in-Q(802.1ad) :運營商用來把客戶的 VLAN 封裝在服務提供方 VLAN(外層標簽)中,實現 L2 隔離與多租戶(又稱 VLAN stacking)。
- VLAN 安全 :存在 VLAN hopping、native VLAN 攻擊等風險,應禁用未用端口、限制 trunk、綁定端口安全、啟用 BPDU Guard 等防護。
場景A:家庭/小型 ISP 接入(Host — LocalISP)
[Host] --(access, VLAN 10)-- [CPE/Switch] --(trunk)-- [LocalISP Edge Switch]- 家庭或企業里,接入端口通常是 access port(比如 VLAN 10)。Host 發出的幀不帶 VLAN 標簽,接入交換機會把該流量視為 VLAN 10。
- LocalISP 邊界交換機上,客戶網段被映射到某個 VLAN(或在更上層映射到一個子接口/路由接口)。VLAN 限定了廣播域:同一 VLAN 的客戶設備可以互相 ARP,而不同 VLAN 則被隔離。
- 當 LocalISP 要把流量發到上游路由器或其它 AS 時,VLAN 僅用于本地 L2:上游路由器只看到邊界設備的接口 MAC,BGP 仍然處理 IP 前綴。
場景B:IXP 或私有對等點(多個 AS 在同一交換平面)
+----------------+
AS A Router-| Port (VLAN 100)|
AS B Router-| Port (VLAN 200)| <- 交換機/IXP 交換機上可能為每個 peering 用不同 VLAN
AS C Router-| Port (VLAN 300)|
+----------------+- 在一些 IXP,交換機會通過 專用 VLAN 為不同的對等關系隔離流量(例如:某個私有 peering 使用 VLAN 100,另一個私有 peering 使用 VLAN 200)。
- 也有 IXP 提供一個 “公共 VLAN” 用于多方交換(route server),或通過 VRF/過濾策略分隔租戶。
- 關鍵點:不同 AS 的路由器可以處在物理同一臺交換機上,但是否能“看到”彼此的 MAC / L2 流量取決于它們是否在同一 VLAN(或是否被運營商/IXP 配置為可達)。
場景C:運營商 / 數據中心 的 L2 擴展(Metro Ethernet / EVPN)
Customer A Site1 --[provider L2 core]-- Customer A Site2
(VLAN 100) (VLAN 100)- 運營商可能提供 L2VPN / Metro Ethernet 把客戶的 VLAN 跨城延伸。實現方式包括簡單的 VLAN 承載、Q-in-Q 或更現代的 EVPN+VXLAN。
- 在 EVPN 場景中, 控制平面 (MP-BGP EVPN)分發 MAC 可達性, 數據平面 通過 VXLAN 隧道承載客戶的二層幀。對客戶來說感覺像是同一 VLAN(廣播域)跨越了多個物理位置,但底層是通過封裝在 L3 隧道里傳輸的。
- 這就是“把 MAC 跨 AS/跨站點傳播”的受控方式:不是把裸 MAC 廣播給互聯網,而是通過運營商控制的 L2/L2-over-L3 服務分發。
VLAN 與路由(BGP/AS)如何協同
- 在 常規 ISP 互聯 中:VLAN 用于本地 L2 鏈路(比如路由器與交換機之間或交換機內部的隔離);BGP 通告 IP 前綴,路由器之間建立會話(BGP session 本身可在某個 VLAN/子接口上承載)。但 BGP 不會 宣布客戶主機的 MAC——只有 IP 前綴被通告。
- 在 L2 服務或 EVPN 模式:運營商會用 VLAN(或 VNI)把租戶隔離開,并通過專門的控制面(如 BGP-EVPN)來分發 MAC/IP 到達性,從而讓跨站點的二層像“本地”一樣工作。
簡短的示例
- 本地接入與上游 BGP(簡單)
[Host:10.0.10.5] --(access VLAN10)-- [CE Switch] --(trunk VLAN10)-- [CE Router] --(subif, BGP)-- [ISP Router]- Host 在 VLAN10,ARP 限于 VLAN10。CE Router 把 10.0.10.0/24 用 BGP 廣告給 ISP。ISP 在同一 L2 鏈路上只看到 CE Router 的 MAC,不會學習 Host 的 MAC。
- IXP 私有對等(每對等分 VLAN)
AS100 Router Port <---(VLAN500)---> IXP Switch <---(VLAN600)---> AS200 Router Port- AS100 與 AS200 如果想做私有 peering,IXP 可在交換機上為每對等分配獨立 VLAN(VLAN500、VLAN600 等),實現隔離及計費/策略。
- EVPN 跨站點 L2 擴展(邏輯上像同一 VLAN)
SiteA Host --(VLAN10)-- VTEP-A ===(IP core, VXLAN tunnels)=== VTEP-B --(VLAN10)-- SiteB Host- 控制平面:BGP-EVPN 分發 Host 的 MAC+IP。
- 數據平面:VTEP-A 將以太幀封裝到 VXLAN 隧道,送到 VTEP-B,再解封并在 SiteB 的 VLAN10 轉發。
AS 之間二層如何學習地址
這個問題觸及了「鏈路層(L2)局域性」與「自治系統/邊界路由(L3)」這兩個層次的關鍵區別。結論先給出一句話版: 自治系統之間一般不會交換原始的二層地址(MAC);它們通過 BGP 交換的是三層前綴(IP),而實際的 MAC 只在本地二層域或通過專門的二層/覆蓋技術在受控的域內傳播或被分發。 下面分點展開解釋并給出幾個常見場景。
核心概念
- MAC 是 L2 局部可見的 :以太網幀和 MAC 地址只在同一二層廣播域(或同一交換域/同一 VLAN)內傳播。默認情況下,MAC 地址不會跨越路由器(L3)傳出該二層域。
- BGP 傳播的是 IP 前綴(L3 可達性) :不同 AS 之間交換的是哪些 IP 段能到達(和一堆策略屬性),而不是哪些具體主機的 MAC。路由器利用這些前綴決定下一跳 IP,然后在本地二層上解析下一跳的 MAC(例如通過 ARP 或 NDP)。
常見場景與機制
典型的 AS 間互聯(路由器對路由器,L3 邊界)
Host --(L2)-- CPE ----- LocalISP_Router (AS65001) --- (L3/BGP peering) --- Tier1_Router (AS701) --- (...)- 在這種情形,每個 AS 在邊界由路由器(或三層交換)相連。
- 當 LocalISP_Router 要把數據發到 Tier1_Router,它在本地二層鏈路上 ARP(或 NDP)出 Tier1_Router 的 MAC,然后把以太幀發到該 MAC。 但 Tier1 不會把 Host 的 MAC 學到它的其它鄰居那里去。
- 換句話說: IP 前綴由 BGP 宣告,MAC 僅在相連的 L2 鏈路上解析/使用。
交換點/對等點(IXP)或私有對等(L2 交換互連)
多家 AS 的邊界路由器都接到同一交換機/交換布線(例如 IXP 交換平面)。
- 在 IXP(或私有 peering 在同一 L2 交換網)上,不同 AS 的路由器都在同一個二層域里, 交換機會學習這些路由器或直接連接服務器的 MAC 。
- 因此,物理上連在同一 L2 交換平面的兩個 AS 可以看到彼此端口的 MAC、并直接建立二層通信(比如直接交換以太幀)。但這仍然是“在同一 L2 域內可見”,不是 BGP 在傳播 MAC。BGP 仍舊用于廣告 IP 前綴與建立會話。
提供商二層轉發 / 以太網承載跨域(Metro Ethernet / L2VPN)
- 當兩個客戶(或兩個 AS)通過運營商的以太網(或 Metro Ethernet)被橋接到同一二層域時,運營商的交換/轉發設備會轉發客戶 MAC,客戶的 MAC 就可能在跨長距離的 L2 域中被學習。
- 這是運營商為客戶提供「L2 跨城」服務的模式,MAC 會在運營商的 L2 網絡中傳播 —— 但通常是在運營商控制的邊界/租戶隔離(VLAN、VPLS、EVPN)之下。
覆蓋與控制平面分離:EVPN / VxLAN /VPLS / MPLS L2VPN
- 數據中心/運營商為了跨越三層網絡實現二層互通,常用 EVPN(用 MP-BGP 做控制平面分發 MAC/IP 可達性)+VxLAN/MPLS(作為數據平面封裝) 。要點:
控制平面 :BGP-EVPN 可以把 MAC+IP+VNI 等信息作為路由/通告項分發到其它邊緣(VTEP) —— 這看起來像在“跨節點分發 MAC 到達性”。
數據平面 :收到這些通告的節點用 VXLAN/MPLS 等封裝,把原始以太幀封裝在 IP/MPLS 隧道中送到目標 VTEP,再解封并轉發到目標 MAC。
- 結果:MAC 可跨越物理 L3 網絡被“邏輯地”分發和到達,但這種行為是 由專門的覆蓋/控制平面協議(如 EVPN)實現的 ,而不是傳統 BGP 把裸 MAC 直接傳播到 Internet 各 AS。
ARP 代理 / ARP 抑制
- 在很多邊界上,路由器或 VTEP 會做 ARP 代理或 ARP 抑制 :當需要到達某個 IP(由 BGP 宣告)時,邊界設備可以自己響應 ARP,提供自己的 MAC 作下一跳,避免把客戶 MAC 全網廣播或學習。
- 這在縮小廣播、提高可控性方面很常見。
面向未來的路由技術
為了應對傳統路由協議的挑戰,并滿足日益增長的網絡需求,新的技術和理念正在不斷涌現。
- 軟件定義網絡(Software-Defined Networking, SDN) :SDN 的核心思想是 控制平面與數據平面分離 。它將網絡的“大腦”(控制邏輯)集中到一個中央控制器上??刂破鲹碛芯W絡的全局視圖,可以基于應用需求、實時流量等信息做出智能的路由決策,然后將轉發指令下發給底層的“傻瓜”交換機和路由器。
- 段路由(Segment Routing, SR) :SR 是一種先進的源路由技術,旨在簡化網絡,特別是復雜的 MPLS 網絡。它通過在數據包頭中壓入一個指令序列(段列表),精確地指定了數據包要經過的路徑,減少了網絡中間設備所需維護的狀態,提高了網絡的可編程性和效率。
- 網絡可觀測性與自動化 :現代網絡正在從被動管理轉向主動感知。設備可以主動將詳細的遙測數據(如延遲、抖動、丟包率)實時推送到控制器?;谶@些數據,自動化系統可以進行更智能的流量工程、故障預測和自我修復。
- IPv6 :雖然不是路由協議,但 IPv6 提供了近乎無限的 128 位地址空間,解決了 IPv4 地址耗盡的問題。其 無狀態地址自動配置(Stateless Address Autoconfiguration, SLAAC) 特性也簡化了網絡管理。
SLAAC 的工作原理非常巧妙,它允許網絡中的設備在沒有 DHCP 服務器的情況下自動為自己配置一個全球唯一的 IPv6 地址。這個過程分為兩步:
- 獲取網絡前綴 :設備啟動后,會向網絡中發送一個 路由器請求(Router Solicitation) 消息。本地網絡的路由器在收到該消息或周期性地廣播 路由器通告(Router Advertisement, RA) 消息。這個 RA 消息中包含了當前子網的 64 位網絡前綴(例如
2001:db8:1234:5678::/64)。 - 生成接口標識符 :設備獲取到網絡前綴后,需要自行生成后 64 位的 接口標識符(Interface Identifier, IID) 。最傳統的方法是使用 EUI-64 規范,它將設備獨一無二的 48 位 MAC 地址擴展為 64 位 IID。
# EUI-64 轉換過程
# 1. 獲取 48 位 MAC 地址
# MAC: 00-1A-2B-3C-4D-5E
#
# 2. 從中間插入 16 位的 FFFE
# => 00-1A-2B-FF-FE-3C-4D-5E
#
# 3. 翻轉第 7 位 (U/L 位, 0 表示全局唯一)
# 第一個字節 00 (二進制 00000000)
# 翻轉第 7 位后變為 00000010, 即十六進制的 02
# => 02-1A-2B-FF-FE-3C-4D-5E
#
# 4. 組合成 64 位 IID
# IID: 021A:2BFF:FE3C:4D5E設備將網絡前綴和自己生成的 IID 組合起來,就形成了一個完整的 IPv6 地址。在正式使用前,它還會執行 重復地址檢測(Duplicate Address Detection, DAD) 來確保該地址在本地網絡中是唯一的。 由于 EUI-64 方式會暴露設備的 MAC 地址,存在隱私風險,因此現代操作系統普遍采用 隱私擴展(Privacy Extensions) ,生成一個臨時的、隨機的 IID 來代替基于 MAC 地址的 IID。

























