Skip to main content

什么是BGP

· 4 min read

什么是BGP?

BGP(Border Gateway Protocol)是互聯網的路由大腦,負責告訴全球所有的路由器某個IP地址在哪裡,怎麼去。

當你在瀏覽器輸入google.com,你的ISP路由器查詢BGP路由表,找到去往google.com的最佳路徑,封包才能跨越數十甚至數百個自治系統(AS)到達Google的服務器。

BGP是唯一在互聯網規模下工作的協議,管理全球九十萬以上的路由前綴

AS自治系統

AS(Autonomous System)是BGP的基本單位,代表一個由單一機構管理的網路。

每個AS都有一個唯一的編號ASN,例如Google是ASN15196,AWS是ASN16509。 AS之間通過eBGP建立Peering,互相交換我能連結到哪些IP地址的路由資訊。

BGP路由機制

BGP的路由通知被叫做Update消息,每當有一個AS有新路由或者路由失效,就發送Update給所有的BGP鄰居。

關鍵機制:AS_PATH,每當一個AS宣告一個路由,它會把自己的ASN添加到AS_PATH中。這樣其他AS就知道這條路由經過了哪些AS,避免路由循環。

AS_PATH Prepend 就是利用這個機制:把自己的 ASN 重複追加幾次,讓路徑看起來更長,其他 AS 就會優先選更短的路徑(即 DX)

BGP路徑屬性

BGP 路徑屬性決定了當有多條路徑到達同一目的地時,路由器選哪條。理解這四個屬性是掌握混合雲路由控制的關鍵:

  • LOCAL_PREF:只在同一 AS 內有效。值越高,優先級越高。用來控制「本 AS 的流量從哪個出口出去」。
  • AS_PATH:路徑所經過的 AS 序列。越短越優先。跨 AS 可見,是影響對端選路的主要手段。
  • Community:可自定義的標籤。AWS 預定義了一些 Community 值,可以讓你告訴 AWS「這條路由請低優先/不要傳播」。

決策過程

當路由器收到多條去往同一目的地的路由時,按照嚴格的優先級順序逐條比較,找到第一個能分出勝負的屬性就停止。

生產中最常用的兩個手段:LOCAL_PREF 控制本端選路(出方向),AS_PATH Prepend 影響對端選路(入方向)。

iBGP和eBGP

eBGP(external BGP):不同 AS 之間的 BGP 會話。會自動把自己的 ASN 追加到 AS_PATH,修改 NEXT_HOP 為自己的地址,LOCAL_PREF 不會傳遞給對方。

iBGP(internal BGP):同一 AS 內部的 BGP 會話。不修改 AS_PATH,LOCAL_PREF 可以傳遞。但有個重要限制:iBGP 收到的路由不能再傳給其他 iBGP 鄰居(防環路),所以 AS 內部要麼全互聯,要麼用 Route Reflector 解決。

BGP在AWS中的應用

在 AWS 混合雲場景中,BGP 扮演三個角色:

  • 路由自動發現:機房路由器把機房網段(如 192.168.0.0/16)通過 BGP 告訴 AWS VGW,VGW 自動把這條路由注入 VPC Route Table,無需手動配置靜態路由。
  • 故障自動切換:DX 斷開時,BGP 會話超時,VGW 刪除從 DX 學到的路由,自動轉為使用從 VPN 學到的備份路由。
  • 路由策略控制:通過 LOCAL_PREF 和 AS_PATH Prepend 控制哪條路徑優先,實現精細的流量工程。

BGP為什麼是TCP連線

BGP工作在TCP 179端口,選擇TCP是因為BGP要保證路由更新消息一條不漏地傳遞,丟包就意味著路由表不一致,後果很嚴重。TCP 的可靠傳輸幫 BGP 省去了自己實現重傳的麻煩。這也意味著 BGP Peering 建立需要 TCP 三次握手,所以 Security Group 要放行雙向的 TCP 179。

AWS AS 7224

這是AWS為Direct Connect和VPN分配的公有ASN,代表了AWS這一側的網路身分。當你的機房路由器和 AWS VGW 建立 BGP 會話,對端 ASN 就填 7224。有趣的是,AWS 在不同服務裡有不同的 ASN:DX 和 VPN 用 7224,AWS Transit Gateway 可以自定義 ASN(預設 64512),而面向公網的 AWS IP 地址段則用 AS16509。