爲了實現路由信息的交互,BGP要求一個AS內的全部BGP Speaker相互造成IBGP全互連,致使IBGP的會話數是n(n-1)/2,而這一要求使得IBGP的擴展成爲了一個很大的問題ide
路由反射 (RFC 2796)
下降對指定路由器IBGP路由通告機制的限制,容許將從IBGP對等體接收到的更新信息傳給某些IBGP對等體 打破傳統IBGP水平分割的限制
聯盟 (RFC3065)
將大的AS分紅若干小的AS,而小AS之間創建EBGP對等體關係oop
在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的全互連。編碼
從非客戶機IBGP對等體學到的路由,發佈給此RR的全部客戶機
從EBGP對等體學到的路由,發佈給全部的非客戶機和客戶機code
從客戶機學到的路由,發佈給此RR的全部非客戶機和客戶機(發起此路由的客戶機除外)
從EBGP對等體學到的路由,發佈給全部的非客戶機和客戶機blog
• 當一個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屬性長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是可選非過渡屬性,屬性類型編碼爲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本身同樣,此時便忽略該路由更新it
一個AS中可能存在多個簇(Cluster)。各個RR之間是IBGP對等體的關係,一個RR能夠把另外一個RR配置成本身的客戶機或非客戶機。所以能夠靈活的配置AS內部簇與簇之間的關係。
聯盟經過把大的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號所組成。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-CONFED來防止子AS間的路由環路。
聯盟內的AS-PATH屬性變化:
聯盟內的EBGP會話
子AS號被添加到AS-PATH中的AS-CONFED-SEQUENCE前面
聯盟內的IBGP會話
不修改AS-PATH
外部BGP會話
子AS號從AS-PATH中清除,而大AS號被添加到AS-PATH前面