天天看點

BGP外部網關協定(一)

自治系統as是指同一個技術管理機構管理、使用統一選路政策的一些路由的集合。

不同as通過as号區分,as号取值範圍1~65535,其中64512-65535是私有as号。iana負責as号的分發。

中國電信163as号:4134

中國電信cn2as号:4809

中國網通as号:9929

bgp是一種實作自治系統as之間的路由可達,并選擇最佳路由的距離矢量路由協定。

bgp能承載大批量的路由資訊,能夠支撐大規模網絡。

bgp使用過tcp作為其傳輸層協定(端口号179),提高可靠性。

bgp是外部路由協定,用來在as之間傳遞資料,對穩定性要求非常高,是以tcp協定的可靠性保證了bgp的穩定性。

bgp的對等體之間必須邏輯上連通,并進行tcp連接配接,目的端口179,本地端口任意。

bgp對等體和igp對等體不同,bgp對等體(peer)是指使用tcp建立連接配接的兩端,而非與igp同概念的直連鄰居,隻需要tcp能建立連接配接,不一定必須是直連。

bgp本身隻是負責控制路由,資料轉發依然依靠靜态或igp路由。

bgp支援無類别域間路由cidr。

路由更新時,bgp隻發送更新的路由,大大減少了bgp傳播路由所占用的帶寬,适用于在internet上傳播大量路由資訊。

bgp是一種增強的距離矢量路由協定,從設計上避免了環路的發生。

as之間:bgp通過攜帶as path資訊标記途徑的as,帶有本地as号的路由将被丢棄,進而避免域間産生環路。

as内部:bgp在as内學習到的路由不會通告給as内的bgp鄰居,避免as内産生環路。

bgp提供了豐富的路由政策,能夠對路由實作靈活的過濾和選擇。

bgp提供了防止路由震蕩的機制(路由衰減),有效提高了internet網絡的穩定性。

bgp易于擴充,能夠适應網絡新的發展。主要通過tlv進行擴充。

bgp按照運作方式分為ebgp和ibgp

ebgp

運作與不同as之間的bgp稱為ebgp。為了防止as間産生環路,當bgp裝置接收ebgp對等體發送的路由時,會将帶有本地as号的路由丢棄。

ibgp

運作于同一as内部的bgp稱為ibgp。為了防止as内部産生環路,bgp裝置不将從ibgp對等體學習到的路由通告給其他ibgp對等體,并與所有ibgp對等體建立全連接配接。為了解決ibgp對等體的連接配接數量太多的問題,bgp設計了路由反射器和bgp聯盟。

bgp的router id是一個用于辨別bgp裝置的32位值,通常是ipv4位址的形式,在bgp會話建立時發送的open封包中攜帶。對等體之間建立bgp會話時,每個bgp裝置都必須有唯一的router id,否則對等體之間不能建立bgp連接配接。

bgp的router id在bgp網絡中必須是唯一的,可以采用手工配置,也可以讓裝置自動選取。預設情況下,bgp選擇裝置上的loopback接口的ipv4位址作為bgp的router id。如果裝置上沒有配置loopback接口,系統會選擇接口中最大的ipv4位址作為bgp的router id。一旦選出router id,除非發生接口位址删除等事件,否則即使配置了更大的位址,也保持原來的router id。

bgp對等體的建立、更新和删除等互動過程主要有5種封包、6種狀态機和9個原則。

open封包:用于協商bgp對等體的各項參數,主要包括bgp版本 、as号等資訊,建立bgp對等體連接配接。open是tcp連接配接建立後發送的第一個封包。

update封包:用于在對等體之間交換路由資訊。連接配接建立後,有路由需要發送或者路由變化時,發送update通告對端可達或者撤銷路由資訊及路徑屬性。

notification封包:用于中斷bgp連接配接。當bgp在運作中發現錯誤時,發送notification封包通告bgp對端,随後與之相關的鄰居關系将被關閉。

keepalive封包:用于保持bgp連接配接。( 保活)。定時發送keepalive封包以保持bgp對等體關系的有效性。響應收到的正确的open封包

route-refresh封包:用于在改變路由政策後軟複位bgp路由表請求對等體重新發送路由資訊。隻有支援路由重新整理(route-refresh)能力的。

::: hljs-center

BGP外部網關協定(一)

:::

idle狀态是bgp初始狀态。

在idle狀态下,bgp拒絕鄰居發送的連接配接請求。隻有在收到本裝置的start事件後,bgp才開始嘗試和其它bgp對等體進行tcp連接配接,并轉至connect狀态。

在connect狀态下,bgp啟動連接配接重傳定時器(connect retry),等待tcp完成連接配接。

如果tcp連接配接成功,那麼bgp向對等體發送open封包,并轉至opensent狀态。

如果tcp連接配接失敗,那麼bgp轉至active狀态。

如果連接配接重傳定時器逾時,bgp仍沒有收到bgp對等體的響應,那麼bgp繼續嘗試和其它bgp對等體進行tcp連接配接,停留在connect狀态。

在active狀态下,bgp總是在試圖建立tcp連接配接。

如果tcp連接配接成功,那麼bgp向對等體發送open封包,關閉連接配接重傳定時器,并轉至opensent狀态。

如果tcp連接配接失敗,那麼bgp停留在active狀态。

如果連接配接重傳定時器逾時,bgp仍沒有收到bgp對等體的響應,那麼bgp轉至connect狀态。

在opensent狀态下,bgp等待對等體的open封包,并對收到的open封包中的as号、版本号、認證碼等進行檢查。

如果收到的open封包正确,那麼bgp發送keepalive封包,并轉至openconfirm狀态。

如果發現收到的open封包有錯誤,那麼bgp發送notification封包給對等體,并轉至idle狀态。

在openconfirm狀态下,bgp等待keepalive或notification封包。如果收到keepalive封包,則轉至established狀态,如果收到notification封包,則轉至idle狀态。

在established狀态下,bgp可以和對等體交換update、keepalive、route-refresh封包和notification封包。

如果收到正确的update或keepalive封包,那麼bgp就認為對端處于正常運作狀态,将保持bgp連接配接。

如果收到錯誤的update或keepalive封包,那麼bgp發送notification封包通知對端,并轉至idle狀态。

route-refresh封包不會改變bgp狀态。

如果收到notification封包,那麼bgp轉至idle狀态。

如果收到tcp拆鍊通知,那麼bgp斷開連接配接,轉至idle狀态。

bgp裝置将最優路由加入bgp路由表,形成bgp路由。bgp裝置與對等體建立鄰劇關系後,采取以下互動原則。

從ibgp對等體獲得的bgp路由,bgp裝置隻釋出給它的ebgp對等體

從ebgp對等體獲得的bgp路由,bgp裝置釋出給它所有ebgp和ibgp對等體

當存在多條到達同一目的位址的有效路由時,bgp裝置隻将最優路由釋出給對等體

路由更新時,bgp裝置隻發送更新的bgp路由

所有ebgp對等體發送的路由,bgp裝置都會接收

所有ebgp對等體在傳遞過程中下一跳改變

所有ibgp對等體在傳遞過程中下一跳不變

預設ebgp傳遞時ttl值為1

預設ibgp傳遞時ttl值為255

直連建立對等體需要注意的點

建立ibgp對等體時要讓下一跳可達,處于邊界的ibgp對等體需要将下一跳指向自己,這樣才能建立ibgp對等體

用環回網口建立鄰居需要注意的點

需要修改更新源,預設更新源是實體接口,需要修改成環回網口,建立ibgp對等體時要保障下一跳可達,處于邊界的ibgp對等體需要将下一跳指向自己,這樣才能建立ibgp對等體

建立ebgp對等體時因為ebgp隻能傳一跳,在建立ebgp對等體時,要修改ebgp多跳的跳數為2以上才能到達對端回環網口上

為什麼使用環回網口

環回網口穩定,路由器啟動着,環回網口就不會down,而實體鍊路可能會受線路或者接口等因素的影響導緻對等體關系有問題

步驟

啟用bgp,後面跟as系統号

宣告router-id,建立鄰居關系用

宣告和誰建立鄰居關系

通告bgp路由,(network、import)

[r1]router-id 1.1.1.1 ###配置bgp的router-id

[r1-bgp] peer 2.2.2.2 as-number 100 ###指定對等體的回環口及所屬as編号

[r1-bgp] peer 2.2.2.2 connect-interface loopback 0 ###更新發送bgp封包時的接口為環回口

[r1-bgp] peer 2.2.2.2 next-hop-local ###修改該路由的下一跳指向自己,用于ibgp

[r1-bgp] peer 3.3.3.3 ebgp-max-hop 2 ###修改最大跳數值(≥2),用于ebgp

[r1] display bgp peer ###檢視bgp鄰居

[r1] display ip routing-table ###檢視bgp路由表

[r1-bgp] import-route ospf 110/direct/rip 1/isis 1 ###引入ospf /直連/rip/isis中的路由