1. 程式人生 > 實用技巧 >BGP的反射器和聯盟

BGP的反射器和聯盟

BGP反射器

IBGP全互聯的問題

為了實現路由資訊的互動,BGP要求一個AS內的所有BGP Speaker相互形成IBGP全互連,導致IBGP的會話數是n(n-1)/2,而這一要求使得IBGP的擴充套件成為了一個很大的問題

IBGP全互聯問題解決方案

 路由反射 (RFC 2796)
 降低對指定路由器IBGP路由通告機制的限制,允許將從IBGP對等體接收到的更新資訊傳給某些IBGP對等體 打破傳統IBGP水平分割的限制
 聯盟 (RFC3065)
 將大的AS分成若干小的AS,而小AS之間建立EBGP對等體關係

BGP路由反射器(Route Reflector)

 在AS200裡,有三臺路由器分別為RTA,RTB和RTC。在預設的情況下,如果RTA收到一條外部的路由更新,並且該路由被RTA選舉為最佳路由,則RTA肯定會把該路由通告給RTB以及RTC。由於RTB和RTC互為IBGP對等體,所以不會把從IBGP學習到的路由通告給其它IBGP對等體。

 如果該通告原則可以被放鬆,允許RTC可以把從RTA學習到的IBGP路由通告給其它IBGP對等體的話,這樣將可以取消RTA與RTB之間的IBGP會話,RTC就是BGP路由反射器。

不同角色的對等體

 一個BGP Speaker通告一條IBGP路由到另外一個IBGP對等體的操作。而這樣的一個BGP Speaker通常被稱為路由反射器(Route Reflector, RR),這樣的一條IBGP路由被稱為反射路由。IBGP對等體可以有三種角色:
• 路由反射器 (Route Reflector)
• 客戶機 (Client)
• 非客戶機 (Non-Client)
 路由反射器和它的客戶機組成一個叢集(Cluster)。路由反射器在客戶機之間傳遞(反射)路由資訊,所以客戶機之間不需要建立BGP連線。

 既不是反射器也不是客戶機的BGP路由器被稱為非客戶機(Non-Client)。非客戶機與路由反射器之間,以及所有的非客戶機之間仍然必須建立全連線關係。

總結對等體之間的關係
• Client只需維護與RR之間的IBGP會話。
• Non-Client與Non-Client之間需要建立IBGP全互連。
• RR與Non-Client之間需要建立IBGP全互連。
• RR與RR之間需要建立IBGP的全互連。

路由反射宣告原則 (1)

 從非客戶機IBGP對等體學到的路由,釋出給此RR的所有客戶機
 從EBGP對等體學到的路由,釋出給所有的非客戶機和客戶機

路由反射宣告原則 (2)

 從客戶機學到的路由,釋出給此RR的所有非客戶機和客戶機(發起此路由的客戶機除外)
 從EBGP對等體學到的路由,釋出給所有的非客戶機和客戶機

路由反射簇 (Cluster)

• 當一個AS記憶體在多臺RR為Client提供冗餘時,RR間的路由更新很有可能會形成環路,為防止該現象,引入了Cluster的概念

什麼是簇?

 通過4位元組的Cluster_ID來標識Cluster,通常會使用Loopback地址作為Cluster_ID。
 一個Cluster裡可以包括一個或多個RR;一個Client可以同時屬於多個Cluster。
 通常,一個客戶的簇只擁有一個RR,並由RR的BGP Router-id去標識該簇。有時,為了防止單點失效,在單一簇裡引入多個RR,如圖中的備份RR組網。

路由反射環路防止機制 - Originator_ID

• Originator_ID屬性用於防止在反射器和客戶機/非客戶機之間產生環路。
• Originator_ID屬性長4位元組,可選非過渡屬性,屬性型別為9 ,是由路由反射器(RR)產生的,攜帶了本地AS內部路由發起者的Router ID。
• 當一條路由第一次被RR反射的時候,RR將Originator_ID屬性加入到這條路由,標識這條路由的始發路由器。如果一條路由中已經存在了Originator_ID屬性,則RR將不會建立新的Originator_ID。
• 當其它BGP Speaker接收到這條路由的時候,將比較收到的Originator_ID和本地的Router ID,如果兩個ID相同,BGP Speaker會忽略掉這條路由,不做處理。

路由反射環路防止機制 - Cluster_List

 Cluster_List是可選非過渡屬性,屬性型別編碼為10
 Cluster_List由一系列的Cluster_ID組成,描述了一條路由所經過的反射器路徑,這和描述路由經過的As路徑的AS_Path屬性有相似之處。Cluster_List由路由反射器產生
 Cluster_List只在AS內部傳播,從EBGP對等體收到的含有Cluster_List的路由將被丟棄。
 當RR在它的客戶機之間或客戶機與非客戶機之間反射路由時,RR會把本地Cluster_ID新增到Cluster_List的前面。如果Cluster_List為空,RR就建立一個
 當RR接收到一條更新路由時,RR會檢查Cluster_List。如果Cluster_List中已經有本地Cluster_ID,丟棄該路由;如果沒有本地Cluster_ID,將其加入Cluster_List,然後反射該更新路由
 Cluster_List只被RR用來檢測路由環路,不是RR的客戶機和非客戶機不會檢測該屬性。
Cluster list與Originator ID的相同與不同
 相同:它們都是防止AS內部的環路
 不同:Originator ID就是在發起該路由的路由器發現收到了一條路由資訊(該路由資訊裡面的originator ID就是這臺路由器),此時路由器便會忽略該路由這樣達到防環作用
 CLUSTER list是RR產生的,是通過RR來防止路由環路的。當RR發現收到的路由更新裡面的cluster ID和RR自己一樣,此時便忽略該路由更新

AS內多個簇

一個AS中可能存在多個簇(Cluster)。各個RR之間是IBGP對等體的關係,一個RR可以把另一個RR配置成自己的客戶機或非客戶機。因此可以靈活的配置AS內部簇與簇之間的關係。

層次化路由反射

BGP聯盟

聯盟通過把大的AS分成多個更小的自治系統來解決IBGP全互連的問題,這些自治系統叫做成員自治系統或子自治系統。成員自治系統之間使用EBGP會話,因此它們不需要全互連。然而,在每一個成員AS中,仍然要求IBGP全互連。

聯盟術語

 聯盟通過把大的AS分成多個更小的AS來解決IBGP全互連的問題,這些自治系統叫做成員AS。因為成員AS之間使用EBGP會話,它們之間不需要全互連。然而在每一個成員AS中,IBGP全互連的要求仍然適用。
 聯盟中的EBGP會話和常規的EBGP會話有所不同。為了區分它們,這種型別的EBGP會話叫做聯盟內的EBGP會話。與普通EBGP會話區別就發生在當通過會話傳播路由的時候,聯盟內的EBGP會話在一方面遵循路由通告的部分IBGP規則,在另一方面又遵循路由通告的部分EBGP規則。如:在傳送更新的時候,NEXP_HOP、MED和LOCAL_PREF被保留,而AS-PATH被修改。
 對於外部鄰居來說(聯盟外的的對等體),成員AS拓撲是不可見的。也就是說,在發向EBGP鄰居的更新訊息中,已經剝去了聯盟內被修改的AS_PATH。從其他的自治系統來看,聯盟就像單個AS一樣。
 每個成員AS中,IBGP全連線是需要的。路由反射也可以被部署。部署聯盟的一個明顯優勢就是其成員AS不需要使用相同的IGP。每個成員AS不需要向其他成員AS通告自己的內部拓撲。不過,當使用不同的IGP時,每一個成員AS內必須保證BGP下一跳的可達性。

AS-Path回顧

當前,AS_PATH屬性被定義為公認必遵屬性,該屬性由AS號所組成。AS_PATH屬性欄位由三元組所組成:
Path Segment Type, Path Segment Length, Path Segment Value
在BGPv4裡,path segment type欄位是由1位元組長的數值所組成,主要是標識AS_PATH的不同型別:

 Value     Segment Type
      1       AS_SET: 由一系列AS號無序地組成,包含在UPDATE訊息裡。
      2       AS_SEQUENCE: 由一系列AS號順序地組成,包含在UPDATE訊息裡。
      3       AS_CONFED_SEQUENCE: 在本地聯盟內由一系列成員AS號按順序地組成,包含在UPDATE訊息中,只能在本地聯盟內傳遞。
      4       AS_CONFED_SET: 在本地聯盟內由一系列成員AS無序地組成,包含在UPDATE訊息中,同樣只能在本地聯盟內傳遞。

AS_Path變化過程

聯盟內採用AS-CONFED來防止子AS間的路由環路。
聯盟內的AS-PATH屬性變化:
 聯盟內的EBGP會話
 子AS號被新增到AS-PATH中的AS-CONFED-SEQUENCE前面
 聯盟內的IBGP會話
 不修改AS-PATH
 外部BGP會話
 子AS號從AS-PATH中清除,而大AS號被新增到AS-PATH前面

聯盟與反射的比較