什麼是 BGP?
BGP是一種用於在路由域之間交換NLRI(Network Layer Reachability Information)的路由協定。由於不同的管理機構控制著各自的路由域,因此這些路由域通常被稱為AS。目前,Internet是一個由多個互連的AS組成的大型網路。 BGP作為Internet的外部路由協議,廣泛應用於ISP(Internet Service Provider)之間,用於在AS之間交換可達路由訊息,建立AS間路徑,防止路由環路,並在AS之間應用路由策略。 BGP有三個早期版本:BGP-1、BGP-2、BGP-3,目前使用的版本是BGP-4。
為什麼我們需要 BGP?
內部網關協定 (IGP) 旨在提供單一路由域內(而非域間)的可及性資訊。因此,BGP 應運而生,並發展成為合適的域間路由協定。
網路上通常使用以下類型的IGP:
距離向量協議,例如路由資訊協定 (RIP)
鏈路狀態協議,例如開放最短路徑優先 ( OSPF ) 和中間系統到中間系統 ( IS-IS )
雖然這些協定的設計目的不同,行為特徵也各有不同,但都是用於在路由域內提供一條最優路徑,不適合域間路由。例如,域間路由協定應該能夠提供廣泛的策略控制,因為不同的域通常需要不同的路由策略和管理策略。
BGP被設計為一種域間路由協議,其目標是實現策略控制和可擴展性,但由於BGP和IGP適用的場景不同,因此BGP無法取代IGP。
當 BGP 運作時,如果它在 AS 內部,則稱為內部 BGP(IBGP);當 BGP 運作時,如果它在 AS 之間,則稱為外部 BGP(EBGP),如圖 1 所示。
BGP 運作模式
BGP 如何運作?
BGP 訊息交換中的角色
Speaker:發送 BGP 訊息的路由設備稱為 BGP 發言人。發言人接收或產生新的路由訊息,然後將路由資訊發佈給其他 BGP 發言人。 BGP 發言人收到來自其他AS 的路由後,將該路由與本地路由進行比較,如果該路由比本地路由更好或為新路由,則將該路由發布給除發布該路由的BGP 發言人之外的所有其他BGP 發言人。
對等體(Peer):互相交換訊息的 BGP 發言人稱為對等體。
BGP 訊息
BGP透過傳送五種類型的訊息來運作:Open、Update、Notification、Keepalive和Route-refresh。
Open:TCP連線建立後發送的第一個訊息,用於建立BGP鄰居關係。對等體收到Open訊息後,本端與對等體協商成功,對等體發送Keepalive訊息確認並維持鄰居關係。之後對等體之間可以互動Update、Notification、Keepalive、Route-refresh等訊息。
Update:此類型的訊息用於對等體之間交換路由資訊。 Update訊息可以通告多條具有相同屬性的可達路由,也可以用來刪除多條不可達路由。
通知:如果 BGP 偵測到錯誤,它會向其對等體發送通知訊息。然後 BGP 連線會立即斷開。
Keepalive:BGP定期向對等體發送Keepalive訊息,保證BGP連線的有效性。
Route-refresh:這種類型的訊息用於請求對等體重新發送所有可達路由到本地設備。
BGP 處理
由於BGP使用TCP作為傳輸層協議,所以對等體之間必須先建立TCP連接,然後才能建立BGP對等體關係。對等體之間透過交互Open訊息協商參數,建立BGP對等關係。對等體關係建立後,BGP對等體之間交換BGP路由表。 BGP透過Keepalive訊息來維護對等體之間的BGP連線。 BGP不會定期更新路由表,而是在BGP路由發生變化時透過Update訊息逐步更新路由表。如果BGP偵測到錯誤(例如收到錯誤訊息),則會傳送Notification訊息報告錯誤,並隨之拆除BGP連線。對等體關係建立的過程如圖1所示。
同伴关系建立过程
BGP 有限狀態機
BGP 有限狀態機(FSM)有六種狀態:空閒(Idle)、連線(Connect)、活動(Active)、開啟發送(Open-Sent)、開啟確認(Open-Confirm)和已建立(Established)。
其中Idle、Active、Established是BGP對等關係建立過程中常見的狀態。
在空閒狀態下,BGP 拒絕所有連線要求。空閒是 BGP 的初始狀態。
在Connect狀態下,BGP決定TCP連線建立後的後續操作。
在 Active 狀態下,BGP 嘗試建立 TCP 連線。 Active 是 BGP 的中間狀態。
在 Open-Sent 狀態下,BGP 等待來自對等體的 Open 訊息。
在 Open-Confirm 狀態下,BGP 等待通知或 Keepalive 訊息。
在 Established 狀態下,BGP 對等體可以交換 Update、Route-refresh、Keepalive 和 Notification 訊息。
只有當BGP對等體雙方都處於Established狀態時,BGP對等體關係才能建立,雙方透過發送Update訊息來交換路由資訊。
BGP 屬性
BGP屬性(也稱為BGP路由屬性)是描述特定BGP路由的一組參數,BGP可以根據這些屬性來過濾並選擇路由。 BGP路由屬性分為四種:
公認強制屬性:該類別屬性是所有BGP設備都能辨識的屬性,在Update訊息中必須攜帶該屬性,如果沒有該屬性,路由資訊就會出現錯誤。
眾所周知的自由選擇:所有 BGP 路由器都可以識別此類屬性。它是可選的,因此不一定在更新訊息中攜帶。
可選傳遞:表示AS之間的傳遞屬性,即使BGP設備不支援該類型的屬性,該設備也會接收攜帶該屬性的訊息,並將該訊息通告給其他對等體。
可選非過渡:如果 BGP 裝置不支援此類屬性,則該裝置將忽略它並且不會將攜帶該屬性的訊息通告給其他對等體。
一些常見的BGP路由屬性如下:
Origin是眾所周知的必選屬性,它定義了路徑資訊的來源,並識別了一條路由如何成為BGP路由。 Origin屬性值可以是IGP、EGP、Incomplete。
AS_Path是眾所周知的必選屬性,它按照向量順序記錄了一條路由從本端到目的地所經過的所有AS的編號。
Next_Hop 是一個眾所周知的強制屬性。
MED(Multi-Exit-Discriminator)是可選的非過渡屬性,只在兩個相鄰的AS之間傳遞,接收該MED屬性的AS不會將該屬性通告給第三個AS。
Local_Pref 是一個眾所周知的可自由選擇的屬性,用於指示路由設備上 BGP 路由的優先權。它僅在 IBGP 對等體之間有效,並且不會通告給其他 AS。
BGP 如何處理路由?
下圖顯示了 BGP 如何處理路由。 BGP 路由可以從其他協定匯入,也可以從 BGP 對等體學習。可以設定 BGP 路由匯總以減少路由表的大小。此外,可以設定路由策略並將其套用於路由匯入、接收或通告,以過濾路由或修改路由屬性。
BGP 路由處理
路由導入
BGP本身無法發現路由,所以需要從其他路由協定引入路由,例如IGP路由或是靜態路由,並儲存到BGP路由表中。引入的路由可以在AS內部傳播,也可以在AS之間傳播。
BGP 可以在匯入或網路模式下匯入路由。導入模式允許 BGP 按協定類型匯入路由,例如RIP、OSPF、IS-IS、靜態和直連路由。網路模式將具有指定前綴和遮罩的路由導入 BGP 路由表,比導入模式更精確。
路線選擇
當到相同目的地存在多條路由時,BGP會透過路由原則進行路由選擇,例如,在Graceful Down狀態(SRv6 TE Policy處於延遲刪除狀態)的SRv6 TE Policy中,優先選擇不迭代的路由;在設備與RPKI伺服器對接的場景下,依照BGP起源AS驗證結果依Valid、Not Found、Invalid降序排列的路由;無誤碼的路由。
路由匯總
BGP 路由表的大小通常會隨著網路規模的擴大而增加。為了減少路由表的大小,可以使用路由匯總。
路由聚合就是將多條路由聚合成一條聚合路由,聚合後BGP只會向BGP對等體發佈聚合路由,而不會發佈所有的特定路由。 BGP支援兩種類型的路由匯總:
自動聚合:對BGP引入的路由生效,配置自動聚合後,參與聚合的特定路由將被抑制。 BGP依照自然網段對路由進行聚合(例如10.1.1.1/32和10.2.1.1/32被聚合到10.0.0.0/8,該位址為A類位址),然後只向BGP對等體發送聚合路由。
手工聚合:對本地的BGP路由生效,手工聚合可以控制聚合路由的屬性,決定設備是否發布特定的路由。
IPv4 支援自動匯總和手動匯總,而IPv6僅支援手動匯總。
BGP 路由通告
BGP採用以下策略來發布路由:
當有多條有效路由時,BGP發言者只向其對等體通告最優路由。
BGP 發言人將從 EBGP 對等體學到的路由通告給其他 BGP 對等體,包括 EBGP 對等體和 IBGP 對等體。
BGP 發言人不會將從 IBGP 對等體學到的路由通告給其他 IBGP 對等體。
BGP發言者是否將從IBGP對等體獲得的路由通告給它的EBGP對等體取決於BGP-IGP同步狀態。
一旦建立連接,BGP 發言人就會向新的對等體通告可以通告的最佳 BGP 路由。
BGP 支援哪些擴充功能?
BGP-4只管理IPv4單播路由訊息,在使用其他網路層協定(如IPv6、組播協定)的應用中,作用有限。
為了支援多種網路層協議,IETF(Internet Engineering Task Force)定義了邊界網關協議多協議擴展(MP-BGP),對BGP-4進行了擴展,使支援BGP擴展的路由器能夠與不支援BGP擴展的路由器進行通訊。
MP-BGP作為BGP-4的增強,為多種協定提供路由訊息,例如IPv6(BGP4+)、組播等。
MP-BGP同時維護單播和組播路由訊息,將資訊儲存在不同的路由表中,以將單播路由資訊與組播路由資訊區分開來。
MP-BGP支援單播和多播,並為它們建立不同的網路拓撲。
BGP-4支援的大多數單播路由策略和設定方法都可以套用於組播,並可以根據這些路由策略來維護單播和組播路由。
BGP使用地址族來區分不同的網路層協議,地址族的取值請參閱相關標準。 MP-BGP支援多種擴展,例如VPN擴展、IPv6擴展等,這些擴展都在相應的位址族視圖下配置。
BGP-IPv4單播位址族用於維護公網BGP鄰居,傳遞公網IPv4路由訊息,同時傳遞公網標籤IPv4路由,此功能主要應用於跨域BGP/MPLS IP VPN OptionC或跨域BGP/MPLS IPv6 VPN OptionC場景。
BGP-IPv6單播位址族主要負責維護公網IPv6 BGP對等體,傳遞公網IPv6路由訊息,在6PE場景下傳遞標籤IPv6路由。
群播相關的位址族視圖,例如BGP-IPv4群播位址族視圖、BGP-MVPN位址族視圖、BGP-IPv6 MVPN位址族視圖、BGP-MDT位址族視圖等,可傳遞AS間的路由訊息,主要應用於MBGP、BIER、NG MVPN、BIERv6、Rosen MVPN等。
VPN相關的位址族視圖主要套用於BGP/MPLS IP VPN、VPWS、VPLS,例如BGP-VPNv4位址族視圖、BGP-VPNv6位址族視圖、BGP-VPN實例視圖、BGP多實例VPN實例檢視、BGP-L2VPN -AD位址族視圖、BGP-L2VPN-AD位址族視圖等。
EVPN相關的位址族視圖,例如BGP-EVPN位址族視圖、BGP多實例EVPN位址族視圖等,主要用於設定BGP EVPN對等體,適用於EVPN VPLS、EVPN VPWS、EVPN L3VPN等。 EVPN是一種用於二層網路互通的VPN技術,與BGP/MPLS IP VPN類似,它引入了新的NLRI類型EVPN NLRI,定義了新的BGP EVPN路由類型,用於實現二層網路不同站點間的MAC位址學習和發布。
BGP IPv4 SR策略位址族視圖和BGP IPv6 SR策略位址族視圖主要套用於Segment Routing MPLS(SR-MPLS)和Segment Routing IPv6(SRv6)。
與流相關的位址族視圖,例如BGP-Flow位址族視圖、BGP-Flow VPNv4位址族視圖、BGP-Flow VPNv6位址族視圖、BGP-Flow VPN實例IPv4位址族視圖、BGP-Flow VPN實例IPv6位址族視圖等,主要用於防禦DoS/DDoS攻擊,提升網路的安全性和可用性。
BGP標籤位址族視圖和BGP標籤VPN實例IPv4位址族視圖主要用於採用BGP標籤分發方案的營運商配置。
BGP-LS位址族視圖主要用於匯總使用IGP收集到的拓撲訊息,並傳送給上層控制器。
XCDN的CDN加速服務使用了BGP、精品BGP、CN2 GT、CN2 GIA 等多種優化網路為您提供更優質的服務。