發布時間: 2022-02-11 10:02:56
兩臺BGP路由器之間無需直連也可建立對等體關系,只要它們具備IP連通性并且可以建立TCP連接即可。BGP的這個特點使得路由的傳遞更加靈活,然而稍有不慎,這個特性也可能帶來一個麻煩,例如路由黑洞。
以圖1為例,R1、R2、R3及R7均是BGP路由器,并且按照圖示建立BGP對等體關系。AS 34567內已經部署了OSPF,使得AS內部的路由器能夠獲知到達該AS內各個網段的路由信息。R4、R5及R6并不運行BGP,只運行OSPF,得益于AS34567內運行的OSPF,R3及R7實現了IP連通性(R3及R7之間并沒有直連的物理鏈路),并且建立起了IBGP對等體關系。
圖1 BGP環境中路由黑洞的產生背景
現在R1將AS 100內的1.0.0.0/8路由發布到了BGP,然后將這條路由通告給了R3,而R3則將這條BGP路由通過IBGP連接直接通告給了R7(假設R3在將該BGP路由通告給R7時,告知了R7需經自己到達該路由所指向的目的地,為了達到這個目的,R3將該BGP路由的Next_Hop屬性值設置為它自己的地址),R7再將其通告給R2,最終R2能夠通過BGP學習到1.0.0.0/8這條來自AS 100的路由并將其加載到自己的路由表中。
現在R2收到一個去往1.0.0.0/8的數據包,它查詢路由表后發現到達該目的地的下一跳為R7,于是將數據包轉發給R7。R7收到這個數據包后也進行路由表查詢,結果發現到達該目的地的下一跳為R3,然而R3并非它的直連路由器,它意識到下一跳路由器處于一個遠端網段,因此它將繼續在自己的路由表中查詢到達R3的路由(也即遞歸查詢)。由于AS 34567內已經運行了OSPF,R7發現可以通過OSPF路由到達R3,而且下一跳是R4(假設當網絡正常時,R7選擇經R4到達R3)。如此一來R7意識到要將數據包送達1.0.0.0/8,需先將其轉發給R4。
當R4收到這個發往1.0.0.0/8的數據包時,它將在自己的路由表中查詢到達該目的網段的路由,由于該路由是在BGP中被通告的(AS 34567內運行的OSPF并不知曉到達這個目的網段的路由),而R4恰恰沒有運行BGP,至此在R4上就出現了路由黑洞,發往這個目的網段的數據包在R4這里被丟棄。同樣的問題也可能發生在R6上,當R4發生故障時,R7將會把到達1.0.0.0/8的報文轉發給R6,而后者同樣存在路由黑洞問題。
為了規避路由黑洞問題,BGP引入了同步規則(BGP Synchronization)。所謂的BGP同步規則指的是:當一臺路由器從自己的IBGP對等體學習到一條BGP路由時(這類路由被稱為IBGP路由),它將不能使用該條路由或把這條路由通告給自己的EBGP對等體,除非它又從IGP協議(例如OSPF等,此處也包含靜態路由)學習到這條路由,也就是要求IBGP路由與IGP路由同步。同步規則主要用于規避BGP路由黑洞問題。
還是以圖1為例,如果R7激活了BGP同步,那么當它收到IBGP對等體R3通告的1.0.0.0/8路由時,缺省是不會使用該路由的,當然也不會將其通告給EBGP對等體R2,只有當R7又從IGP協議(例如AS 34567中運行的OSPF)學習到1.0.0.0/8路由時,或者R7擁有到達1.0.0.0/8的靜態路由時,它才會使用這條BGP路由,并且將該BGP路由通告給R2。
此時R7的“想法”是:“我現在已經通過BGP學習到了去往1.0.0.0/8的路由,而我的路由表里又存在到達該目的網段的OSPF路由,這樣看來網絡中的設備應該都運行了OSPF,并且也都通過OSPF發現了到達該目的網段的路由,那么如果我將到達該目的網段的數據包轉發出去,這些數據包應該是可以被轉發到目的地的,因此我可以放心地使用該BGP路由并且將其通告給我的EBGP對等體了”。
在本案例中,要將R2發往1.0.0.0/8的數據包順利地轉發到目的地,可行的辦法有幾種。例如第一個辦法是在AS 34567內的所有路由器上都運行BGP,也就是讓R4、R5及R6也運行BGP。
然而由于IBGP水平分割規則的存在,我們將不得不在AS34567內實現IBGP對等體關系全互聯,從而保證BGP路由不會丟失,此時需關閉設備上的BGP同步規則。如果AS34567內的路由器數量特別大,那么IBGP全互聯的組網會給設備帶來沉重的負擔,而且該網絡的可擴展性也將受到制約。此時路由反射器及聯邦會是兩個不錯的解決方案。
第二個辦法是R3將BGP路由引入AS 34567中的OSPF,從而讓OSPF也能夠獲知到達1.0.0.0/8的路由。這樣對于R7而言這條路由也就滿足了同步規則~既從IBGP對等體學到,又從IGP協議獲知,而R4、R5及R6也能夠通過OSPF發現到達1.0.0.0/8的路由,因此路由黑洞的問題也就迎刃而解了。
當然在R3上將BGP路由引入OSPF的操作需要非常謹慎地執行,因為BGP承載的路由信息往往是巨大的,如果不做任何限制地直接將BGP路由引入一個IGP協議,帶來的影響會很大?;谏鲜龇治?,這種辦法并非在所有場景中都適用。
第三個辦法是采用MPLS。MPLS(Multi-Protocol Label Switching,多協議標簽交換)是一種標簽交換技術,簡單地說,就是在一個報文的IP頭部之前、數據幀頭部之后插入一個標簽頭部,由于IP頭部“躲藏”在標簽頭部之后,因此在數據從源被轉發到目的地的過程中,沿途的網絡設備只需根據標簽頭部中的標簽進行選路,如此一來即使轉發設備沒有到達目的網絡的路由也不會影響數據轉發,因為此時它們是基于標簽信息對報文進行選路及轉發的,而不是基于目的IP地址。
綜上所述,解決BGP路由黑洞問題的方案很多,而且都比較成熟,在諸多成熟方案可供選擇的情況下,依然激活同步規則也就顯得沒有意義了,因此在華為數通產品上,BGP同步規則缺省是被關閉的。
上一篇: Open報文
下一篇: IBGP水平分割規則