動態路由協議
動態路由協議,用在多個 Router 之間定期的、自動的、互相交換 Routes(路由信息,包含了網段信息、可達性信息、路徑信息等),動態生成 Routing Table Entries,并最終達到全網的路由收斂,即:理想情況下,一個 Router 總是能夠知道到達 IP Packets 的目標網絡對應的下一跳應該如何轉發。并且即便網絡上的某個 Router 出現了故障,但只要有一個可繞行的其它路徑,那么其他 Router 的 Table 就會自動設置,并選擇一個可達的路徑。
動態路由協議的基本工作原理
簡而言之,動態路由協議就是 Routers 之間用于交換、計算和維護路由表的協議,其基本工作原理包括 4 個階段:
鄰居發現階段:運行了相同動態路由協議的 Routers 之間,首先需要建立一個用于交換 Routes 的對等點關系,這些 Routers 又稱為 Neighbor Routers(鄰居路由器)。
路由交換階段:發現鄰居后,每個 Router 會主動通過廣播或單薄的方式把自己的 Routes 發送給 Neighbor Routers。經過一段時間后,每個建立了對等點關系的 Routers 都擁有了整網的路由信息。
計算路由階段:每臺 Router 都會自身的配置,運行各自的路由算法,計算出最終的路由表/樹。
維護路由階段:為了感知突發的網絡故障(例如;設備故障或線路中斷等),Neighbor Routers 之間會發送周期性的心跳包,當心跳包超時時,就會認為鄰居關系失效。此時 Router 需要自動維護路由表的更新,將故障路徑移除。
動態路由協議的類型
從應用場景角度劃分: IGP(Interior Gateway Protocol,內部網關協議):作用于同一個 AS(Autonomous System,自治系統)內部的動態路由協議。在 AS 內的所有 Routers 之間交換 Routes,用于實現 AS 內部的 Routers 之間的三層路由可達性。例如:RIP、OSPF、I-BGP 協議。 EGP( Exterior Gateway Protocol,外部網關協議):作用于不同 AS 之間的的動態路由協議。在不同 AS 之間的 Edge Routers(邊界路由器)之間交換 Routes,用于實現 AS 之間的路徑選擇,所以也稱為路徑控制路由。例如:E-BGP 協議。
從技術實現角度劃分:
3.Distance Vector(距離矢量類型):是一種基于 “距離" 和 “方向" 的動態路由協議,如下圖所示。該類型的路由協議有:RIP、BGP。
1. 距離:指示了到達目的網絡的度量值,即:所要經過路由器的個數。
2. 方向:指示了到達目的網絡的下一跳設備。
Link State(鏈路狀態類型):是一種基于 LSDB(鏈路狀態數據庫)的動態路由協議。LSDB 中存儲了 一張完整的網絡拓撲圖,繪制拓撲圖的步驟如下。該類型的路由協議有:OSPF、ISIS。
LSA(Link State Advertisement,鏈路狀態通告)泛洪:LSA Msg 中包含了 Router 已知的接口狀態、接口 IP 地址、網絡掩碼、路由開銷、網絡類型等信息。每臺 Router 都會將關于自身的本地直連鏈路的狀態信息,以及將關于所有直連鄰居的路由信息都宣告出去。
LSDB(Link State Database,鏈路狀態數據庫)建立:收到 LSA Msg 的 Router 都會根據 LSA 提供的信息建立本地的 LSDB,知道收斂后,網絡中的所有的 LS Router 都應該具有了相同的 LSDB。
建立最短路徑樹:Router 在 LSDB 的基礎上使用最短路由優先算法進行路由計算,得到一棵以自己為 Root(根)的、無環路的、可到達每個網絡的最短路徑樹。
路由計算:通過最短路徑樹得出到達每個目的網絡的最優 Routes,并將這些 Routes 加載到 Routing Table 中。
可見,我們可以簡單的理解為:Distance Vector 類型 Routes 提供的是 “路標”,那么 Link State 類型 Routes 提供的就是 “地圖”。
常見的動態路由協議
?
1、RIP(IGP、距離矢量類型):是最早期的路由協議,為小型 IGP 網絡提供。
配置簡單;
網絡收斂慢;
用于小型網絡,現在常見于實驗室環境。
2、OSPFv3 和 ISIS(IGP、鏈路狀態類型):為大中型 IGP 網絡提供。
IGP 整網地圖繪制,可以精確的知道網絡中每一條鏈路的狀態,例如:狀態是 UP 還是 Down,鏈路的相對帶寬大小是多少等等。以此來保證了無環路,
使用最短路徑優先算法來計算到達所有目的網絡的最佳路徑。
缺點在于分享的信息太多、太精確,安全性缺失,計算芯片負載高。
3、BGPv4(IGP、EGP、距離矢量類型):最初為 EGP 廣域網絡提供,后來也可用于大型 IGP 網絡。
作為 EGP 時,使用 AS 的數量作為距離度量單位,而不是使用 Router 的數量。
有強大的路徑控制功能,例如:路由策略、路由過濾,可以對廣域網的流量實現優化與調度。
設計之初,就是用于容納超大容量的路由條目。
動態路由協議的性能指標
不同的動態路由協議,具有有不同的特點。常規的性能指標如下:
協議的路由計算正確性:杜絕出現路由環路。由于 Link State 類型具有整網地圖,所以比 Distance Vector 類型更優。
協議的路由收斂速度:整網路由器的路由表快速達到一致的狀態。收斂速度越快,就意味著當網絡拓撲結構發生變化時,路由器能夠更快的感知到,并及時更新相應的路由信息。
協議所占的系統開銷:運行路由協議所占用的路由器系統資源,例如:CPU 、內存等。Link State 類型的開銷大于 Distance Vector 類型。
協議適用的網絡規模:OSPF 的實現機制限定了其可以應用在幾百臺路由器的中大規模網絡場景中;而 BGP 理論上能夠管理全世界所有的路由器,其所管理的網絡規模大小只受系統資源的限制。
BGP 和 Internet
BGP(Border Gateway Protocol,邊界網關協議)是一種被設計出來應用于 Internet 中的 Distance Vector 類型動態路由協議,能夠在不同的 AS(Autonomous System,自治系統)間交換 Route Informations(路由信息)。因為 BGP Router 通常被部署在不同的 AS 之間的邊界上,故命名為 “邊界網關”。
BGP 協議起源于 1989 年 1 月舉行的第 12 次 IETF 會議。在那時,由于 Internet 的快速發展,使得 Internet 中的各種網絡的數量(AS 數量)快速增加,早期的手動靜態路由配置方式顯然已經無法滿足在大量的 AS 之間管理路由信息。因此,會議上討論的主題就是需要一種新的 EGP 動態路由協議。
AS(自治系統)是 Internet 的基本定義之一,指的是一個邏輯上自包含的、自洽的 IP 網絡系統,不同的 AS 之間可能運行著各自不同的 IGP 路由協議。
Internet 上的每個 AS 都具有一個 ASN(AS Number)作為唯一標識,全球 ASN 由 IANA(Internet Assigned Numbers Authority,互聯網分配號碼管理局)統一管理和分配,共有 1-65535 多個,代碼體現為一個長度 16bits 的數字。其中:
1~64511:是全球唯一的 Internet 編號。
64512~65535:是自用的編號,作用類似于 IP 私網網段。
如下圖所示,每個在 Internet 上提供網絡服務的 AS(例如:運營商、大學、政企網絡等)都需要擁有自己的 AS Number。在 BGP 協議出現之前,這些 AS 就像是一座座孤島,與外界隔離。IETF 第 12 次會議的目的就是為了將這些大量的這些 AS 連接起來,其主要成果就是 BGP 協議。
在會議結束后,由 Len Bosack、Kirk Lougheed 和 Yakov Rekhter 等人在餐巾紙上完成了 BGP 協議的設計草稿,為了解決 2 個 AS 之間的互聯互通問題,其最初的設計也比較簡單,歸納為以下 5 個想法:
為了連接不同的 AS,應該在 2 個 AS 中分別部署 Border Gateway Router(邊界網關路由器),由它們專門負責在不同的 AS 之間交換 Routes。
為了避免在多個 AS 之間形成路由環路,應該在 Routes 中包含特定的 Path Attribute(路徑屬性),以此來確定 AS 之間的最優路徑。
為了在 WAN 中可靠的交換 Routes,應該使用 TCP 作為傳輸層協議。
為了減少全球 Border Gateway Router 之間需要交換的海量 Routes,應該采用增量同步的交換方式。
使用 TLV(Type-Length-Value)數據編碼方式來定義 Message 的數據結構,使其擁有更好的功能可擴展性。
最終在 1989 年 6 月發布了 RFC1105 BGPv1 標準。經過多年的發展后,現如今被廣泛應用的是 BGPv4 版本,已經具有了以下完備的功能特性:
支持 IPv4 和 IPv6;
支持 CIDR(Classless Inter-Domain Routing);
支持 Multi-Path(多路徑),提高網絡的可用性和容錯能力;
支持 BGP Confederations(聯盟);
支持 BGP Route-Reflectors(路由反射器);
支持 BGP Community(團體屬性);
支持 BGP Route Dampening(路由懲罰);
支持 BGP MP(Multi-protocols Extensions,多協議擴展);
支持 Capability Advertisement(能力通告);
支持 BGPSEC 安全協議;
等等。
?
雖然 BGP 最初定位于 EGP 場景,將 AS 作為距離度量單位,并通過強大的路由控制手段(例如:路由策略、路由過濾)來計算出 AS 之間的最佳路徑。后來,隨著 BGP 優秀的可擴展性也逐漸完善了在 IGP 場景中的應用,支持將 AS 內部的 Routers 作為距離度量單位,支持在一個大規模的 AS 內的所有 Router 之間發現、通告和計算 Routes。
區別于 OSPF、ISIS 等 Link State 類型路由協議,BGP 在大規模的 IGP 場景中能夠基于強大的路由控制特性提供更好的網絡穩定性(路由計算準確性高、路由收斂速度快)。
舉例來說,在大規模 IGP 組網中,任何路由節點發生故障時,OSPF 和 ISIS 都會引發整網的鏈路狀態信息的泛洪和 LSDB 信息更新,然后在此基礎上完成路由收斂。而 BGP 則只需要在特定的路有節點間通告路由,并通過增量同步的方式刷新路由信息,同時還具有路由域分區獨立,故障域可控等優勢。
BGP Router 和 Routes
BGP 組網的核心就是 BGP Router,實現了 BGP 協議標準。能夠對外 Advertise(發布)BGP Msg 的 BGP Router,稱為 BGP Speaker(宣告者)。
建立了 BGP Connection/Session 并互相交換 BGP Msg 的 Speaker 之間互稱為 BGP Peers(對等體),根據應用場景的不同,又可以細分為 I-BGP Peer 和 E-BGP Peer,同時若干相關的 Peer 還可以構成一個 Peer Group(對等體組)。
而 BGP Routes 就被包含了專門的 BGP Update Msg 類型中。所以,BGP 協議實際上是一種承載在 TCP 協議之上的應用層協議。
?
一個 Router 最基本的組成部分就是 RIBs(Routing Information Base)和 FIB(Forwarding Information Base)Table,前者負責 Control Plane 的路由選擇,后者負責 Data Plane 的報文轉發。 更具體的,BGP Router 的 RIB 由以下部分構成:
Adj-RIBs-In:用于存儲從 BGP Peers 接收到的 Update Msg 中所攜帶的 Routes。或者根據 Update Msg 中的 WITHDAWN Route 在 Adj-RIBs-In 中刪除相關條目。并在此后交由 Input Policy 處理。
Input Policy:當 Adj-RIBs-In 存儲了從 BGP Peer 傳遞過來的 Routes 時,會根據本地的 Input Policy 并結合 Local RIB 中的內容來判斷是否接受,只有滿足路由策略的 Routes 才會被寫入到 Router 的 RIB。例如:如果 BGP Router 收到 2 條 Routes,它們的目的網絡一樣,但是路徑不一樣,一個是 AS1=>AS3=>AS5,另一個是 AS1=>AS2。那么,通常情況下,Router 會優先選用路徑短的 AS1=>AS2 這條 Route。
BGP Selection Process(路徑決策進程):再將 Routes 寫入 Local RIB 之前,還需要經過 BGP Selection Process 進行處理。例如:將自己的 AS Number 注入到 Route 中,將 Next hop 改為自己,并將自己加入到 Path Attribute 中,形成一條新的可達信息。在這之后,這條信息會繼續向其他 Peers 宣告,使得其他 Peers 知道可以通過 Next hop 到當前 Router,并最終到達目的網絡。
Local RIB:用于存儲 BGP Selection Process 的處理結果,同時某些本地路徑也可以注入到 Local RIB 中。這些結果將用于生成 Local Route Table。
Output Policy:BGP Router 通過 Output Policy 來控制那些 Routes 是需要且允許對外進行宣告的。Local RIB 存儲的結果在進行了一些 Output Policy 處理后,再把允許輸出的 Routes 存儲到 Adj-RIB-Out 中。
Adj-RIB-Out:最終 BGP Router 根據 Adj-RIB-Out 的結果向其它 Peers 發送 Update Msg。
另外,如果 BGP Router 收到的一條 Route 的 Path Attribute 中包含了自己的 AS Number,那么 Router 就會判定為這是一條自己發出的 Route,就會將這條 Route 丟棄掉。
?
BGP Message 類型和格式
BGP Message(消息),由 Header 和 Data 這兩部分組成,最大長度為 4096Bytes。BGP Message 類型和格式的細節有很多,具體建議瀏覽相應的 RFC 文檔,下面只作概括性的介紹。
BGP Msg Header
?
所有 BGP Msg Header 的格式都一樣,共有 19Bytes。
Marker(16Bytes):記錄著同步信息和加密信息,用于檢查 BGP Peer 的同步信息是否完整,以及用于 BGP 驗證的計算。不使用驗證時為全 1。
Length(2Bytes):記錄 BGP Msg 的總長度,長度范圍是 19~4096。
Type(1Byte):表示當前 BGP Msg Data 的類型。其取值從 1 到 5,分別表示下列消息類型:
Open Msg:用于對等體參數協商;
Keepalive Msg:用于維護對等體鄰居關系;
Update Msg:用于通告可達路由和不可達路由;
Notification Msg:用于錯誤信息通告,斷開對等體鄰居;
Route-refresh:用于請求對等體重新發送路由信息。
BGP Msg Data
Open Msg Open Msg 是 TCP connection 建立后發送的第一個 BGP Msg 類型,用于建立 BGP Peers 之間的 Session 關系。
Version:指示 BGP 協議版本,通常為 4;
My AS:指示本地的 AS Number;
Hold Time(保持時間):在建立 BGP Peer 關系時雙方需要協商保持時間,如果在這段時間內未收到對端發來的 Keepalive Msg 和 Update Msg,則認為 BGP 連接中斷了;
BGP Identifier:BGP 標識符,IP 地址形式,用來識別一個 BGP Router。
Keepalive Msg
Keepalive Msg 用于檢測和維護 BGP Session 的健康狀況,BGP Peers 之間會周期性地發出 Keepalive Msg,用來保持 Session 的有效性。
?
Update Msg
Update Msg 用于在 BGP Peers 之間交換 Routes,它既可以用于發布 Routes,也可以用于撤銷不可達的 Routes。
Update Msg 是最關鍵的 BGP Msg 類型之一,BGP Routers 的 NLRI(Network Layer Reachability Information,網絡層可達性信息)和 Path Attribute(路徑屬性)都被包含在里面。
Withdrawn Routes Length:指示 Withdrawn Routes 字段的長度。其值為零時,表示沒有需要撤銷的路由。
Withdrawn Routes:指示需要撤銷的路由。
Total path attribute length:指示 Path Attributes 字段的長度。
Path Attributes:BGP Router 使用 Path Attribute 來確定前往目的地的最佳路徑。
NLRI:BGP Router 使用 NLRI 中的 IP Prefixes(網絡前綴)信息來完成路由分發。
?
兩個 AS 的 BGP Router 之間通過 Update Msg 交換各自的網絡信息,包括:IP Prefix、子網掩碼和其他網絡相關信息。
?
Notification Msg
Notification Msg 用于 BGP Router 運維信息的通知,例如:當 BGP Router 檢測到錯誤狀態時,就會向 Peer 發出 Notification Msg,并中斷 BGP Session。
Error Code、Error Subcode:指示錯誤碼、錯誤子碼,用于描述錯誤類型;
Data:具體的錯誤內容。
?
Route-refresh Msg
Route-refresh Msg 用于要求 BGP Peer 重新發送指定地址族的 Routes,常用于實現路由刷新。
通常的,在 BGP Router 改變了自身的路由策略(Input/Output Policy)后就會請求 BGP Peers 重新發送 Routes。以此來實現 Peers 之間動態的交換路由刷新請求,并在后續的過程中使相關的 Adj-RIB-Out 重新通告路由。
BGP Msg 狀態機
Idle(空閑狀態):為初始狀態,該狀態下,BGP Router 拒絕 Peer 發送的連接請求。只有在收到本設備的 Start 事件后,BGP Router 才開始嘗試和其它 BGP Peers 進行 TCP Connection,并轉至 Connect 狀態。
Start 事件是用戶配置或重配置一個 BGP 連接時觸發的。
另外,無論 BGP 處于任何狀態中,當收到 Notification Msg 或 TCP 拆鏈通知等 Error 事件后,BGP 都會轉至 Idle 狀態。
Connect(連接狀態):BGP Router 啟動 Connect Retry(連接重傳定時器),等待 TCP Connection 完成。
如果 TCP 連接成功,那么 BGP Router 向 Peer 發送 Open Msg,并轉至 OpenSent 狀態;
如果 TCP 連接失敗,那么 BGP Router 轉至 Active 狀態。
如果 Connect Retry 超時,BGP 仍沒有收到 Peer 的響應,那么 BGP Router 會繼續嘗試和其它 BGP Peer 進行 TCP 連接,停留在 Connect 狀態。
Active(行動狀態):該狀態下 BGP Router 總是在試圖與鄰居建立 TCP Connection。
如果 TCP 連接成功,那么 BGP Router 向 Peer 發送 Open Msg,并關閉 Connect Retry,然后轉至 OpenSent 狀態。
如果 TCP 連接失敗,那么 BGP Router 停留在 Active 狀態。
如果 Connect Retry 超時,BGP 仍沒有收到 Peer 的響應,那么就轉到 Connect 狀態。
OpenSent(發送狀態):BGP Router 等待 Peer 的 Open Msg,并對收到的 Open Msg 中攜帶的 AS Numer、Version、認證碼等字段進行檢查。如果收到的 Open Msg 正確,那么 BGP Router 發送 Keepalive Msg,并轉至 OpenConfirm 狀態。
OpenConfirm(確認狀態):BGP Router 等待 Keepalive 或 Notification Msg。
如果收到 Keepalive Msg,則轉至 Established 狀態;
如果收到 Notification Msg,則轉至 Idle 狀態。
Established(連接建立狀態):BGP Router 建立了鄰居關系后,就可以和 Peer 交換 Update、Keepalive、Route-refresh、Notification Msg 了。如果收到 Update 或 Keeplive Msg,則繼續保持該狀態;如果收到 Notification Msg,則遷移到 Idle 狀態。
更具體的狀態機流程如下圖所示。
?
BGP Path Attributes 與路由選擇
這里單獨展開 BGP Update Msg 中的 Path Attributes 與 BGP Router 進行路由選擇之間的關系。總體而言,BGP Path Attributes 可以分為以下 4 大類型。
公認必遵屬性(Well-known mandatory)
是所有的 BGP Router 都能夠識別該屬性,并且必須出現在所有 Update Msg 中。包括:
ORIGIN(源頭):指出了 BGP Routes 的來源,用于判斷 Routes 的可信度,Router 會根據 ORIGIN 屬性作為路由決策的參考。可以是以下 3 種值,在路由選擇的時候,IGP 優于 EGP,EGP 優于 INCOMPLETE。
IGP:表示網絡層可達信息來源于 AS 內部。
EGP:表示網絡層可達信息通過 AS 外部學習。
INCOMPLETE:表示網絡層可達信息來源無法確定。
AS_PATH(AS 路徑):它通過一種 Record-Route(記錄路由)的方式,記錄了一個 IP Prefix(路由前綴)在傳遞過程中所經過了的 AS。采用 AS_SEQUENCE 方式表示,即該路由經過的 AS 的有序集合。當 BGP 發布者發布路由給 IBGP 對等體時,BGP 不修改路由的 AS_PATH 屬性。當 BGP 發布者發布路由給 EBGP 對等體時,本地系統應該把自己的 AS 號作為序列的最后一個元素加在序列的最后面。所以,AS_PATH 可以用來作為路由選路的一種度量。經過更少 AS 路徑的路由更優先。
同時,AS_PATH 也作為一種手段來避免環路。如果 BGP 路由信息發布者從 E-BGP 對等體收到一條路由,它的 AS_PATH 包含發布者自己的 AS 號,就說明這條路由曾經從本 AS 發出過,將其丟棄,同時不再進行轉發。基于上述機制,AS_PATH 屬性可以避免 AS 之間的路由環路的出現,AS 內部的路由環路的避免則采用其他手段來實現。
NEXT_HOP(下一跳):表示目的網絡所使用的下一跳路由器的 IP 地址。如果是發布給 EBGP 對等體,NEXT_HOP 填寫 BGP 發布者的 IP 地址。如果是發布給 IBGP 對等體,且路由來自 AS 外部,則 NEXT_HOP 保留原始的 AS 外部對等體的 IP 地址。
公認可選屬性(Well-known discretionary)
是所有的 BGP Router 都能夠識別該屬性,但可以不出現在 Update Msg 中。包括:
LOCAL_PREF(Local Preference,本地優先級):Update Msg 可以攜帶這個屬性并將其發給 I-BGP 鄰居,用于 AS 內部的 BGP Router 作為參考,具有較高的 LOCAL_PREF 值的 Routes 將在路由選擇過程中被優先考慮。僅在 I-BGP 對等體之間交換,不通告給其他 AS。當 BGP 的路由器通過不同的 IBGP 對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇 LOCAL_PREF 屬性值較高的路由。如下圖所示,Router B 和 Router C 發給 Router D 的關于 8.0.0.0 的路由攜帶不同的 LOCAL_PREF 值,從而引導從 AS 20 到 AS 10 的流量將選擇 Router C 作為出口。
ATOMIC_AGGREGATE(原子聚合):當 BGP Router 進行路由聚合時,由于會產生一條新的聚合路由,因此精細路由所攜帶的 AS-path 屬性將會在聚合時被丟失。用來通告路由接收者,該路由是經過聚合的。有時 BGP 發布者會收到兩條重疊的路由,其中一條路由包含的地址是另一條路由的子集。一般情況下 BGP 發布者會優選更精細的路由(前者),但是在對外發布時,如果它選擇發布更粗略的那條路由(后者),這時需要附加上 ATOMIC_AGGREGATE 屬性,以知會對等體。它實際上是一種警告,因為發布更粗略的路由意味著更精細的路由信息在發布過程中丟失了。在進行路由聚合時,對于聚合的路由信息會添加 ATOMIC_AGGREGATE 屬性。
可選傳遞屬性(Optional transitive)
不要求所有 BGP Router 都能識別,但即使不能識別也會傳遞該屬性。包括: AGGREGATOR(聚合站點):可以包含在產生聚合路由的 Update Msg 中,通過攜帶發送 Update Msg 的 Router 的 BGP-ID,以此來告知進行了路由聚合通告的 Router 的標識。是 ATOMIC_AGGREGATE 屬性的補充。ATOMIC_AGGREGATE 是一種路由信息丟失的警告,AGGREGATOR 屬性補充了路由信息在哪里丟失,即它包含了發起路由聚合的 AS 號碼和形成聚合路由的 BGP 發布者的 IP 地址。在進行路由聚合時,當對于聚合的路由信息同添加 ATOMIC_AGGREGATE 屬性的同時,會添加 AGGREGATOR 屬性。
Community(共同體):在 RFC1997 和 RFC1998 中定義,用于對 Routes 進行分組管理。通常在制定路由策略時會對一系列的 IP Prefix 進行控制,例如:對從某個 AS 來的 Routes 進行特殊處理等。基于這樣的原因,可以通過在 Update Msg 中攜帶 Community 屬性來進行相關的路由策略管理。例如:ISP 可以為某個特定的用戶分配一個 Community 屬性值,此后該 ISP 就可以基于 Community 值來設置專門的 LOCAL_PREF 或者 MED 等屬性來完成路由策略的控制。團體屬性用來簡化路由策略的應用和降低維護管理的難度,沒有物理上的邊界,與其所在的 AS 無關。公認的團體屬性有:
INTERNET:缺省情況下,所有的路由都屬于 Internet 團體。具有此屬性的路由可以被通告給所有的 BGP 對等體。
NO_EXPORT:具有此屬性的路由在收到后,不能被發布到本地 AS 之外。如果使用了聯盟,則不能被發布到聯盟之外,但可以發布給聯盟中的其他子 AS。
O_ADVERTISE:具有此屬性的路由被接收后,不能被通告給任何其他的 BGP 對等體。
NO_EXPORT_SUBCONFED:具有此屬性的路由被接收后,不能被發布到本地 AS 之外,也不能發布到聯盟中的其他子 AS。
可選非傳遞屬性(Optional non-transitive)
不要求所有 BGP Router 都能識別,不識別該屬性就會丟棄該 Msg。包括:
ORIGINATOR_ID:用于標識路由反射器,為了防止引入路由反射器之后出現環路,增加 ORIGINATOR_ID 這個屬性來標識,反射器在發布路由時加入 ORIGINATOR_ID,當反射器收到的路由信息中的 ORIGINATOR_ID 就是自己的 ROUTER_ID 時,就可以發現路由環路的出現,將該路由丟棄,不再轉發。
CLUSTER_ID:用于標識路由反射器組,用來防止環路,在路由經過路由反射器時路由反射器會將自己的 CLUSTER_ID 添加到路由攜帶的 CLUSTER_LIST 中,當路由反射器發現接收的路由的 CLUSTER_LIST 中包含有自己的 CLUSTER_ID,則將該路由丟棄,不再轉發。
路由選擇原則
?
如上圖所示,在一個 Internet 中具有 6 個 AS。如果此時 AS1 需要向 AS3 路由一個 IP 數據包,那么它有兩種不同的路徑:
AS2 → AS3
AS6 → AS5 → AS4 → AS3
在這個簡化的示例中,路由選擇顯然傾向于路徑 1,它是最快、最高效的路由。然而在實際現網中,則基于 Path Attribute 的影響,BGP Router 進行具體的路由選擇時,通常遵守下述規則:
權重:首選 Weight 值最高的。
本地優先級:如果 Weight 相同,選擇 local-preference 最高的。
本地始發:如果 local-preference 相同,選擇本地發出的 Route(Next-hop=0.0.0.0),優于從 Peer 學習到的。
AS 路徑長度:如果沒有當前路由器通告的路由,選擇 AS-path 最短的。
源地屬性(Origin):如果 AS-path 相同,選擇 Origin 最優的(IGP > EGP > 不完全)。
MED:如果 Origin 相同,選擇 MED 最低的。
E-BGP over IBGP:如果 MED 相同,則 E-BGP 優于 I-BGP。
E-BGP 到達順序:若都是 E-BGP,選擇優先到達的。
I-BGP 下一跳開銷:若都是 I-BGP,選擇下一跳最近的。
集群列表(Cluster list):優先選擇最短的 cluster-list,僅適用于 RR(路由反射器)客戶端。
Router ID:首選 BGP 鄰居的 Router-id 最小的。
對等體 IP 地址最小長度:如果 Router-id 相同,選擇鄰居 IP 地址最小的。
BGP RR(Route-Reflectors,路由反射器)
在 BGP RR(Route-Reflectors,路由反射器)標準被提出之前,采用的是 BGP Full Mesh 組網拓撲,即:每一個 BGP Speaker 都需要和其他 BGP Speaker 建立 BGP Session。這樣全網中 BGP Session 的總數就是 N^2,如果 BGP Cluster 的規模超過了 100 臺,就會對設備造成非常大的配置和處理壓力。因此 Tony Bates 和 Ravi Chandra 在 1996 年 6 月提出了《RFC1966: Route Reflector》標準。
BGP RR 通過指定少量的(一個或多個)高性能 BGP Speaker 作為 RR,由它們與網絡中其他 BGP Router 建立 BGP Session,并負責將 Routes 信息反射給所有建立連接的 Peers。每個 BGP Router 只要成為了 RR 的 Peer 之后,即可獲得全網的 Routes 信息,以此來有效減輕 Cluster 的配置壓力。目前 BGP RR 已經被廣泛應用在 I-BGP 和 E-BGP 場景中,例如:Kubernetes Calico CNI 等。
為了保證 RR 方案的簡潔性和支持平滑升級,RR 標準引入了一些新的概念。比如,當一個 BGP Speaker 被配置為 RR 后,它會將 BGP 鄰居分為 2 類:
Client Peer
Non-Client Peer
并且在宣告路由時遵循以下規則:
當收到一個來自 Non-Client Peer 的 I-BGP Update Msg 后,該 Route 將會反射到所有的 Client Peer。
當收到一個來自 Client Peer 的 I-BGP Update Msg 后,該 Route 將會反射到所有的 Client Peer 和 Non-Client Peer。
當收到一個來自 E-BGP Update Msg 后,該 Route 將會反射到所有的 Client 和 Non-Client Peer。
BGP MP(Multi-protocols Extensions,多協議擴展)
最初的 BGPv1 只能管理 IPv4 協議和單播路由,后來為了讓 BGP 支持更多的協議類型(e.g. IPv6)和路由類型(e.g. 多播),在《RFC 4760: Multiprotocol Extensions for BGP-4》中定義了 BGP MP 標準。支持 MP 的 BGP Router 又稱為 MP-BGP Router(多協議 BGP 路由器)。
BGP MP 的實現思路是,在 Update Msg 的 TLV 編碼格式的基礎上,對 NLRI 字段進行擴展,添加了協議類型字段和子網前綴字段,用來描述不同協議類型和路由類型信息。同時,為了區分 NLRI 中的多種協議類型和路由類型,還分別引入了 AFI(Address Family Identifier,地址族標識)和 SAFI(Subsequent Address Family Identifier,子地址族標識)的概念。
通過這樣的方式,BGP MP 的可擴展性得到了極大的增強,使得 BGP 已經不僅僅是一個單純的動態路由協議,而是可以被設計用于支持一些新型的應用場景,例如:IPv6 單播地址族、MPLS VPN 地址族、EVPN VxLAN 地址族等等。
更具體的,MP-BGP 支持了以下多種協議類型:
IPv4 地址族:用于路由 IPv4 地址,是 BGP 的最原始地址族。
IPv6 地址族:用于路由 IPv6 地址。
VPNv4 地址族:用于 MPLS VPN 的 IPv4 路由。
VPNv6 地址族:用于 MPLS VPN 的 IPv6 路由。
L2VPN EVPN 地址族:用于 EVPN 的路由。
IPv4 Flow Label 地址族:用于標識 IPv4 Flow 的標簽路由。
IPv6 Flow Label 地址族:用于標識 IPv6 Flow 的標簽路由。
以及支持了下列多種路由類型:
Unicast(單播路由類型):表示路由信息的目的地址只有一個。
Multicast(多播路由類型):表示路由信息的目的地址有多個。
Flow(流路由類型):它是一種帶有源地址和目的地址的路由類型,用于 MPLS 標簽轉發流量工程。
下圖為一個 MPLS VPN 場景中的 BGP MP Update Msg 示例。
?
BGP Link-state
BGP-LS(BGP Link-state)是一種網絡拓撲信息提取技術,用于匯總跨域(Area)或跨 AS 間的若干個 IGP 網絡拓撲信息并上報給集中控制器。
BGP-LS 最初在 RFC 7752 中被定義,是一個可選的、非必需傳遞的 BGP 擴展。擴展了 BGP 使其可以攜帶與 SR 和性能參數相關的附加信息。BGP-LS 標準包含兩部分:
BGP NLRI
BGP Path Attribute
在 BGP-LS 誕生之前,路由器可以通過使用 IGP 路由協議(e.g. OSPF、IS-IS)來收集網絡的拓撲信息。這種拓撲信息提取方式,存在以下幾點不足:
IGP 協議將各個 Area 的拓撲信息單獨上送給上層控制器,在跨 IGP Area 的場景中,控制器無法得到完整的拓撲信息,所以也無法計算出跨 Area 的端到端最優路徑;
要求控制器支持 IGP 協議及其算法;
控制器需要支持不同的 IGP 協議,導致控制器對拓撲信息的分析處理過程比較復雜。
BGP-LS 就是為了解決上述問題而誕生的。通過 BGP-LS,會把 IGP 協議發現的拓撲信息都匯總到 BGP 協議并上報給控制器。利用 BGP 協議強大的選路和算路能力,具有了以下幾點優勢:
BGP 協議可以匯總跨 IGP AS 域的拓撲信息,直接將完整的拓撲信息上送給控制器,有利于路徑選擇和計算;
不要求控制器實現 IGP 協議及其算法;
控制器僅僅需要支持 IGP 協議即可。
BGP-LS Route Msg
BGP-LS 實現了 3 中 Routes,分別用來攜帶 Nodes、Links 和 Prefix(路由前綴)信息。3 種 Routes 相互配合,共同完成拓撲信息的提取。
Node Route
Node Route 用于記錄網絡拓撲中的節點信息。
Route 格式示例: [NODE][ISIS-LEVEL-1][IDENTIFIER0][LOCAL[as100][bgp-ls-identifier11.1.1.2][ospf-area-id0.0.0.0][igp-router-id0000.0000.0001.00]] Route 字段含義:
NODE:標識此 BGP-LS Route 是 Node Route 類型。
ISIS-LEVEL-1:標識收集拓撲信息的 IGP 協議類型為 ISIS。
IDENTIFIER0:該 IGP 協議類型中的 Node Routes 的唯一標識。
LOCAL:標識該 Node Route 為 Local Node 的信息。
AS:標識 BGP-LS 的 AS Number。
bgp-ls-identifier:標識 BGP-LS 的區域。
ospf-area-id:標識 OSPF 的區域。
igp-router-id:IGP 協議的 Router ID,由收集拓撲信息的 IGP 協議產生。
Link Route
Link Route 用于記錄兩臺設備之間的鏈路信息。
Route 格式示例: [LINK][ISIS-LEVEL-1][IDENTIFIER0][LOCAL[as255.255][bgp-ls-identifier192.168.102.4][ospf-area-id0.0.0.0][igp-router-id0000.0000.0002.01]][REMOTE[as255.255][bgp-ls-identifier192.168.102.4][ospf-area-id0.0.0.0][igp-router-id0000.0000.0002.00]][LINK[if-address0.0.0.0][peer-address0.0.0.0][if-address::][peer-address::][mt-id0]] Route 字段含義:
LINK:標識此 BGP-LS Route 是 Link Route 類型。
ISIS-LEVEL-1:標識收集拓撲信息的 IGP 協議類型為 ISIS。
IDENTIFIER0:該 IGP 協議類型中的 Node Routes 的唯一標識。
LOCAL:標識該 Node Route 為 Local Node 的信息。
AS:標識 BGP-LS 的 AS Number。
bgp-ls-identifier:標識 BGP-LS 的區域。
ospf-area-id:標識 OSPF 的區域。
igp-router-id:IGP 協議的 Router ID,由收集拓撲信息的 IGP 協議產生。
REMOTE:標識該 Route 的對端節點的信息。
if-address :Local 接口地址。
peer-address:Remote 接口地址。
mt-id:在 IGP 協議中用于標識接口所綁定的拓撲。
Prefix Route
Prefix Route 用于記錄 IP 可達的網段信息。
Route 格式示例: [IPV4-PREFIX][ISIS-LEVEL-1][IDENTIFIER0][LOCAL[as100][bgp-ls-identifier192.168.102.3][ospf-area-id0.0.0.0][igp-router-id0000.0000.0001.00]][PREFIX[mt-id0][ospf-route-type0][prefix192.168.102.0/24]] Route 字段含義:
IPV4-PREFIX:標識此 BGP-LS Route 是 Prefix Route 類型,并且是 IPv4 Prefix Route,此外還支持 IPV6-PREFIX。注意,路由器不能本地產生 IPv6 地址前綴路由,但可以處理來自其他廠商的 IPv6 地址前綴路由。
ISIS-LEVEL-1:標識收集拓撲信息的 IGP 協議類型為 ISIS。
IDENTIFIER0:該 IGP 協議類型中的 Node Routes 的唯一標識。
LOCAL:標識該 Node Route 為 Local Node 的信息。
AS:標識 BGP-LS 的 AS Number。
bgp-ls-identifier:標識 BGP-LS 的區域。
ospf-area-id:標識 OSPF 的區域。
igp-router-id:IGP 協議的 Router ID,由收集拓撲信息的 IGP 協議產生。
PREFIX:標識一條 IGP Route。
mt-id:在 IGP 協議中用于標識接口所綁定的拓撲。
ospf-route-type:標識 OSPF 的路由類型。
Intra-Area;
Inter-Area;
External 1;
External 2;
NSSA 1;
NSSA 2。
prefix:標識 IGP Route 的前綴地址。
BGP-LS 應用示例
IGP Area 內的網絡拓撲信息提取
如下圖所示。A、B、C、D 之間通過 IS-IS 協議實現 IP 可達,并且同屬于 Area10,都是 Level-2 設備。
在這種情況下,只需要 A、B、C 和 D 中的任何一臺網絡設備部署 BGP-LS feature(特性)并與控制器建立了 BGP-LS 鄰居關系便可提取出整個網絡的拓撲信息。
在 HA 場景中,會選擇兩臺或以上的設備來實施。由于網絡拓撲信息是相同的,所以它們之間可以互為備份。
IGP Area 間的網絡拓撲信息提取
如下圖所示。A、B、C、D 之間通過 IS-IS 協議實現 IP 可達。其中,A、B 和 C 屬于 Area10,D 屬于 Area20。A、B 是 Level-1 設備,C 是 Level-1-2 設備,D 是 Level-2 設備。
雖然網絡拓撲跨越了 Area10 和 Area20 這 2 個域,但 BGP-LS 支持提取整個網絡的拓撲信息,所以依舊只需要一臺網絡設備部署了 BGP-LS feature 并與控制器建立 BGP-LS 鄰居關系便可。
同樣,HA 場景中,可以使用 2 臺及以上的設備進行實施,它們互為備份。
EGP AS 間拓撲信息提取典型組網 1
如下圖所示。A 和 B 同屬 AS 100,兩者之間建立 IGP IS-IS 鄰居關系,并且 A 作為 AS 100 內部的一臺非 BGP 設備。B 和 C 之間建立 EBGP 連接。
在這種情況下,由于(未使能 BGP-LS 的)BGP 協議本身不能提取網絡拓撲信息,所以在 AS 100 內的設備和在 AS 200 內的設備上收集的拓撲信息不同(都只能收集各自 AS 域的拓撲信息),所以此時要求至少 AS 100 和 AS 200 兩個 AS 中都至少有一臺設備使能 BGP-LS 特性并都與控制器建立 BGP-LS 鄰居關系。
每個 AS 中有兩臺或以上設備與控制器相連則可以保證 HA。
EGP AS 間拓撲信息提取典型組網 2
EGP AS 間拓撲信息提取典型組網 2
若網絡中存在兩臺控制器,分別與兩個 AS 中的設備相連,如下圖所示,此時若想兩臺控制器上都能收集到整個網絡的拓撲信息,則需要兩臺控制器之間建立 BGP-LS 鄰居關系或與控制器相連的 B 和 C 之間建立 BGP-LS 鄰居關系。 此時,為了減少與控制器連接的數量,可以選擇一臺(或幾臺)設備作為 BGP-LS 反射器,需要與控制器建立 BGP-LS 鄰居的設備都與反射器建立鄰居關系。
BGP-LS 在 SR TE 中的應用
在 SR TE 應用場景中,需要在數據庫中儲存 Node、Link、Prefix、SR Policy、Ingress/Egress Node(端節點)等一系列數據,用于 SDN Controller 進行路徑計算和驗證。
在 RFC4655 中,提出了 SR-PCE(SDN 控制器)組件,它具有整個網絡的拓撲和鏈路狀態信息數據庫的全局視圖。SR-PCE 通過 BGP-LS 獲取所需要的信息(Node、Link、Prefix、SR Policy 等),以構建其 SRTE 數據庫,以此計算出 SRTE 所需的域間路徑。
每個 Area 的 Edge Router 都需要與 SR-PCE 建立 BGP-LS 對等互連,提供網絡拓撲信息和鏈路狀態信息,包括:IGP 度量、TE 度量、管理組、SRLG 等。 每個 Area 的本地信息通常來自 IGP(也可以是 BGP)協議,IGP 將本地信息匯總到 BGP-LS,然后通過 BGP NRLI(網絡層可達性信息)傳遞給 SR-PCE。
審核編輯:劉清
-
交換機
+關注
關注
21文章
2637瀏覽量
99535 -
OSPF協議
+關注
關注
0文章
17瀏覽量
9381 -
BGP
+關注
關注
0文章
83瀏覽量
15327 -
WAN接口
+關注
關注
0文章
10瀏覽量
6811 -
TCP通信
+關注
關注
0文章
146瀏覽量
4221
原文標題:網絡協議:BGP 邊界網關協議
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論