BGP邊界網關協議 之三

BGP邊界網關協議 之三

BGP路由通告原則

1.一般情況下,如果BGP Speaker學到去往同一網段的路由多於一條時,只會選擇一條最優的路由給自己使用,即用來發布給鄰居,同時上送給IP路由表。但是,由於路由器也會選擇最優的路由給自己使用,所以BGP Speaker本身選擇的最優的路由也不一定被路由器使用。例如,一條去往相同網段的BGP優選路由與一條靜態路由,這時,由於BGP路由優先級要低,所以路由器會把這條靜態路由加到路由表中去,而不會選擇BGP優選的路由。

比如路由器上存在兩條去往192.168.3.0的路由,下一跳分別為10.1.1.2和10.2.2.2,BGP會根據選路原則選出最優路由(被打上“>”標記的路由),用來發布給鄰居。同時加入IP路由表,在IP路由表中會檢查是否存在一條比BGP最佳路由更好的路由條目,比如有一條到達192.168.3.0的靜態路由(靜態路由的優先級為60,而BGP的優先級為255,數值越低越好),則使用更優的路由條目,反之則把BGP最佳路由作為IP路由表的優選路由。

2.BGP Speaker從EBGP獲得的路由會向它所有BGP對等體通告(包括EBGP和IBGP)。

3.保證IBGP下一跳可達:

對於IGP,工作原理是路由器之間交換路由信息,所以任何一個路由的下一跳是宣告此路由的路由器連接接口的IP地址,這是很容易理解的。而對於BGP,則主要是用於AS之間傳遞無環路的路由信息,BGP就是把AS抽象或者濃縮成一個路由器看待,所以RTB不會修改任何路由更新裡的信息就更新給的RTA,即RTA要到達網絡192.168.1.0/24,下一跳為20.0.0.2。這裡又引入一個問題,對於RTA來說,很有可能不知道20.0.0.2的路由,這樣就會導致路由不可達。

BGP邊界網關協議 之三


BGP提供了命令,讓某些組網環境中,為保證IBGP鄰居能夠找到正確的下一跳,可以配置在向IBGP對等體發佈路由時,peer x.x.x.x next-hop-local改變下一跳地址為自身地址。 undo peer next-hop-local命令用來恢復缺省設置。缺省情況下,BGP在向EBGP對等體通告路由時,將下一跳屬性設為自身的IP地址。BGP在向IBGP對等體通告路由時,不改變下一跳屬性。

4.BGP Speaker從IBGP獲得的路由不會通告給它的IBGP鄰居。

BGP邊界網關協議 之三


如果沒有這條路由通告規則,RTC從IBGP對等體RTA學到的路由就會通告給RTD,RTD繼而會通告給RTB,RTB再把這條路由通告回RTA。這樣就在AS內形成了路由環路。所以這個通告原則也是在AS內避免路由環路的一個手段。我們可以通過使用命令dis bgp routing-table peer x.x.x.x advertised-routes可以查看向鄰居路由器發送了哪些路由,結果發現是因為沒有發送路由導致的IBGP水平分割。

有利也有弊,這條原則也帶來了新的問題:RTD無法收到來自AS 12的BGP路由。一般我們採用IBGP的邏輯全連接來解決這個問題,即在RTA-RTD、RTB-RTC之間再建立兩條IBGP連接。IBGP全互連(FULL-MESH)關係。這是解決由於IBGP水平分割帶來的路由傳遞的問題的方法之一。

這種方法的缺陷顯而易見,路由器需要去維護網絡裡的IBGP會話的開銷太大。

後續我們會介紹解決這種水平分割即路由黑洞的方法:

路由反射器(Route-Reflector)-- RFC 2796

聯盟(Confederation)-- RFC 3065

5.BGP Speaker從IBGP獲得的路由是否通告給它的EBGP對等體要依IGP和BGP同步的情況來決定

BGP邊界網關協議 之三


BGP與IGP同步的概念:BGP Speaker不將從IBGP對等體獲得的路由信息通告給它的EBGP對等體,除非該路由信息也能通過IGP獲得。

BGP的主要任務之一就是向其它自治系統發佈該自治系統的網絡可達信息。如圖所示,RTB會把去往10.1.1.0/24 的路由信息封裝在BGP報文中,通過由RTB、RTE建立的TCP連接通告給RTE,如果RTE不考慮同步問題,直接接受了這條路由信息並通告給RTF。那麼,如果RTF或RTE有去往10.1.1.0/24 的數據報文要發送,這個數據報文要想到達目的地必須經過RTD和RTC。但是,由於先前沒有考慮同步問題,RTD和RTC的路由表中沒有去往10.1.1.0/24的路由信息,數據報文到了RTD就會被丟棄。因此,BGP必須與IGP(如RIP、OSPF等)同步。也就是說,當一個路由器從IBGP對等體收到一條路由更新信息,在把它通告給它的EBGP對等體之前,要試圖驗證該目的地能否通過自治系統內部到達(即驗證該目的地是否存在於IGP發現的路由表內,非BGP路由器是否可以傳遞報文到該目的地)。若能通過IGP知道這個目的地,才會把這樣一條路由信息通告給EBGP對等體,否則認為BGP與IGP不同步,不進行通告。

解決同步問題的方法有很多,最簡單的辦法是RTB把BGP路由信息引入到IGP中,這樣就同步了。但是一般不建議這樣做,因為BGP路由表很大,引入到IGP中來會給系統帶來很大負擔,甚至導致中低端路由設備的癱瘓。其它的解決辦法如:可以在RTB上配置一條去往10.1.1.0/24的靜態路由,再把該靜態路由引入到IGP中,這樣也可以達到同步。但不論何種方法,都不適用於大規模網絡。

取消同步是有條件的。當AS中所有的BGP路由器能組成IBGP全閉合網時,才可以取消同步,即RTB-RTC、RTB-RTD、RTB-RTE、RTC-RTD、RTC-RTE、RTD-RTE都通過TCP連接建立IBGP鄰居關係。這時,數據到RTD後,由於RTB-RTD建立了IBGP鄰居,所以RTD上有去往10.1.1.0/24的從RTB學來的BGP路由,這時,通過路由迭代,RTD將數據發給RTC;同理,RTC也會把數據發給RTB。這樣,數據就不會在途中丟失了。

解決方案:(1)MPLS多協議交換;(2)Tunnel


分享到:


相關文章: