發布時間: 2022-02-09 13:32:27
回顧一下IGP協議的操作,以OSPF為例,當我們在兩臺直連路由器的直連接口激活OSPF后,這兩個接口就開始收發Hello報文,在通過Hello報文發現了直連鏈路上的鄰居后,一個鄰接關系的建立過程也就開始了。
IGP協議要求需要建立鄰居關系的兩臺路由器必須是直連的,然而BGP則大不相同。BGP的對等體關系并不要求設備必須直連,BGP采用TCP作為傳輸層協議,兩臺路由器只要具備IP連通性,并且能夠順利地基于TCP179端口建立連接,就可以建立BGP對等體關系,因此BGP的對等體關系是可以跨設備建立的。
我們將建立BGP鄰居關系的路由器稱為BGP對等體(Peer)。BGP有兩種對等體關系,一種是EBGP,另一種是IBGP。
1.EBGP對等體關系(External BGP Peer)
如果建立對等體關系的兩臺BGP路由器位于不同的AS,那么它們之間的關系被稱為EBGP對等體關系。
在圖1中,顯示了3個AS通過BGP對接的場景。圖中對于這3個AS內部的網絡架構只是做了一個非常簡單的描繪,實際上AS內部的網絡可能是龐大而復雜的,只不過站在BGP的視角,它并不關心AS內部的網絡結構。
在AS 100、AS 200及AS 300中,各自運行著IGP協議,目的是為了實現AS內部的路由互通,而AS之間的路由信息交互則由BGP來完成。在本例中,R1及R2運行了BGP并且兩者建立了EBGP對等體關系,同樣,R3及R4之間也建立了EBGP對等體關系。
圖1 EBGP及IBGP對等體關系
一條BGP路由在EBGP對等體之間傳遞時,會發生有趣的變化。在圖2中,描述了AS 200中的一條路由——10.1.1.0/24在EBGP對等體之間的傳遞情況。R2將AS 200中的10.1.1.0/24路由發布到了BGP,它將這條路由通過BGP通告給自己的EBGP對等體R1。
每條BGP路由都攜帶著多個屬性,這些屬性被稱為路徑屬性,其中一個非常重要的路徑屬性就是AS_Path,AS_Path是每條BGP路由都會攜帶的屬性,它描述了一條BGP路由在傳遞過程中所經過的AS的號碼。
R2將始發于AS 200的路由10.1.1.0/24通告給R1時,將該路由的AS_Path設置為200,而R1將這條路由通告給自己的IBGP對等體R3時,路由的AS_Path不發生改變。
R3將該路由通告給EBGP對等體R4時,則將路由的AS_Path修改為100 200,也就是在原有的AS_Path基礎上,插入自己所處AS的號碼,當R4收到這條BGP路由更新時,它便知道要到達該目的網段,需要經過100、200這兩個AS——您可能已經發現了,BGP路由在EBGP對等體之間的傳遞過程,很有點距離矢量路由協議的味道。
實際上如果R2及R4之間也建立EBGP對等體關系的話,那么R4將會從R2直接收到10.1.1.0/24的路由更新,而這條路由的AS_Path為200,單純從AS_Path屬性值的長度(包含的AS號碼個數)來衡量,顯然對于R4而言直接從R2到達目標網段要更“近”一點。因此,AS_Path的長度會影響路由器對BGP路徑的優選。
圖2 BGP路由在EBGP對等體之間的傳遞
另外,路由在EBGP對等體之間傳遞時,AS_Path還用于防止出現路由環路。R4從R3收到10.1.1.0/24路由后,如果它與R2之間存在EBGP對等體關系,那么它會將該路由通告給R2,此時路由的AS_Path為300 100 200,如圖7-3所示,R2從R4收到該路由后,會忽略這條路由更新,因為它在收到的路由中看到了自己本地的AS號碼,便意識到網絡中出現了環路。
通常情況下,EBGP對等體關系必須基于直連接口建立,例如本例中的R1及R2,它們是直連的,此時雙方便可使用直連接口來建立EBGP對等體關系。BGP之所以要設定這樣的規則,是因為缺省情況下,EBGP對等體之間發送的BGP協議報文的TTL值為1,這使得這些協議報文只能夠被傳送1跳。
當然,在某些特殊的場景中我們可能需要在兩臺非直連的路由器之間建立EBGP對等體關系,那么就需要修改EBGP對等體的跳數限制,通過這個操作來修改協議報文中的TTL值。
2.IBGP對等體關系(Internal BGP Peer)
如果建立對等體關系的兩臺BGP路由器位于相同的AS,那么它們之間的關系被稱為IBGP對等體關系。例如在圖7-2所描述的網絡中,AS 100內存在兩臺運行著BGP的路由器:R1及R3,由于它們同屬一個AS,因此它們之間所建立的關系為IBGP對等體關系。
同樣的,AS 200中的R2及R6也建立了IBGP對等體關系。值得注意的是,在兩臺路由器之間建立IBGP對等體關系時,并不要求它們必須直連,在本例中,AS 100里的R1和R3就并未直連,得益于AS 100中運行的IGP協議(例如OSPF等),R1及R3能夠發現到達對方的路由,從而兩者能夠借助這些路由建立TCP連接,并進一步建立IBGP對等體關系。
不同的BGP對等體關系,對路由的操作是有明顯區別的。例如BGP路由在EBGP對等體之間傳遞時,AS_Path屬性會發生改變,路由的發送方會在該條BGP路由原有AS_Path的基礎上,插入自己所處AS的號碼。而BGP路由在IBGP對等體之間傳遞時,AS_Path不會發生改變。
上一篇: IBGP水平分割規則