1.BGP路由同步概念
BGP協議規定:一個運行BGP協議的路由器不會把從內部對等體(IBGP鄰居)得知的路由信息通告給外部對等體(EBGP鄰居),除非該路由信息也能通過IGP得知。若BGP路由器能通過IGP得知該路由信息,則可認為路由能在AS之間傳播,內部通達已有保證。
首先,RTB通過EBGP鄰居關系,獲得了去往AS100的路由信息,例如,去往AS100中的10.1.1.1/24,RTB會把這樣的路由信息通告給RTE,RTE收到從RTB通告來的去往自治系統AS100的路由信息10.1.1.1/24。對于RTE來說,它在考慮是否把這樣的路由信息通告給它的EBGP鄰居RTF時,就需要考慮同步問題。這里的同步是指:RTE如果能通過IGP(內部網關協議,如OSPF協議)獲得去往10.1.1.1/24的路由,我們就認為EGP(外部網關協議,如BGP協議)和IGP同步。在同步情況下,RTE可以將路由信息10.1.1.1/24通告給RTF。否則,不能通告。
通過上面的敘述,相信大家應該知道什么是BGP同步了。那么BGP的設計者們為什么要做這樣一個規定呢?為什么要引入BGP同步的概念呢?
下面我們來說說BGP同步存在的重要性和它所解決的關鍵問題。
2.BGP路由同步的重要性
依然用上面的例子來解釋,如果RTE不考慮同步問題,直接將路由信息10.1.1.1/24 通告給RTF,那么RTF的路由表中就會記錄一條去往10.1.1.1/24的路由信息,下一跳是指向RTE的。這樣問題就會出現:RTF有一去往10.1.1.1/24的數據包,RTF通過查看路由表,把這一數據包轉發給RTE。如果沒有同步,RTE的路由表中也會有去往10.1.1.1/24的表項,但是這一表項的下一跳是直接指向RTA的S0接口的(這里的原因參見BGP的下一跳屬性)。在不同步的情況下,RTE是無法直接去往此路由的下一跳的(因為路徑中途的路由器RTD、RTC都沒有去往10.1.1.1/24的路由)。這里有個概念叫下一跳不可達,就是指這種情況。
那么,講到這里,聰明的讀者是不是明白了呢?BGP強調同步的原因就是要保證下一跳可達。用上面的例子來說,就是RTE在考慮把去往10.1.1.1/24的路由信息通告給RTF時,就需要考慮它去往10.1.1.1/24的下一跳是否可達(這里的下一跳就是指RTA的S0接口,此接口是AS200和AS300去往AS100的入口)。如果這個入口都不可達,更不要說訪問其內部了。所以下一跳是否可達的問題是一個關鍵性問題,BGP強調同步,就是要求RTE所在自治系統的IGP協議能夠實現下一跳可達。如果IGP找到了去往下一跳的路由,那么RTE就得到了兩個去往10.1.1.1/24的路由。一個是:通過BGP獲得的,這個路由的下一跳不可達。另一個是:通過IGP獲得的,這一個下一跳可達(關于為什么BGP獲得的路由下一跳不可達,而IGP獲得的路由下一跳可達,這個問題需要大家對BGP的下一跳屬性做進一步了解,這里不再敘述)。
3.BGP的路由可達和不可達問題
關于下一跳可達和不可達問題,下面做進一步說明。依然用上面的例子。因為在BGP系統中的下一跳是以自治系統為單位的(這一點在BGP的下一跳屬性中,有詳細敘述)。這樣,就會有這樣的問題存在,RTE的路由表中有去往10.1.1.1/24的路由,但是下一跳卻在很遠的地方,以至于下一跳不可達。但是對于IGP來說就不會有這樣的問題出現。這都是因為各自下一跳的定義不同造成的(關于下一跳的定義,我們就不討論了,BGP的設計者這樣定義,也是經過綜合考慮和選擇的)。既然BGP發現的路由有下一跳不可達的問題存在,我們就要解決這樣的問題,BGP同步就是解決的方法。
當然同步是可以選擇的。在華為3Com3Com路由器上,同步是可以被取消的。取消了同步之后,路由器通告路由時,就不再考慮同步問題了,直接將自己的路由信息通告給EBGP鄰居。但是這樣就會出現下一跳不可達的問題。所以,我們在取消同步之前就要考慮好如何處理可能出現的下一跳不可達問題。對于上面例子中的情況來說:RTE所在的自治系統里所有的路由器都要知道如何去往RTA的S0接口。只要滿足了下一跳可達,取消同步也是可以的。
取消同步以后,滿足下一跳可達的方法有很多,需要視具體網絡拓撲情況而定。就上面例子來說,可以由RTB將BGP路由引入IGP中,當然這樣的做法一般不采用,應為BGP的路由信息量很大,對于IGP來說負擔太重。另外,我們可以在RTC、RTD、RTE上增加靜態路由,同時在RTA上也增加靜態路由。這種辦法看起來很笨,也不是最理想的辦法。最后,BGP可以通過命令來強制修改下一跳,在RTE上將去往10.1.1.1/24的下一跳強制修改為RTE自身的接口,同時,需要RTD、RTC的路由表中有去往10.1.1.1/24的路由。這也不是最理想的解決方法。因為可能還是需要借助于靜態路由。其實,對于上面例子的拓撲結構,主要是:IBGP鄰居不是直接的連接關系,而是TCP連接。BGP路由協議在這樣的拓撲結構上的下一跳可達問題,一直沒有理想的解決方案。如果這種情況的網絡不是很復雜,還是可以勉強解決的(上面已經介紹了幾種解決方法)。但是一旦網絡復雜了,解決起來就很困難了。所以,在網絡設計時,一定要注意避開這種情況。IBGP鄰居盡量直接連接。這個問題的徹底解決是在BGP和MPLS聯手以后的事情。以后有機會大家再學習!
4、小結
BGP下一跳屬性規定:BGP路由的下一跳是以自治系統為單位的。這樣就引出了BGP路由下一跳不可達的問題,為解決路由下一跳不可達的問題,BGP協議引入了同步概念。同步也是可以通過命令取消的,只要能保證路由的下一跳可達,就可以了。