BGP路由器將路由通告給鄰居後,每一個BGP鄰居都會進行路由優選,路由選擇有三種狀況
① 該路由是到達目的地的惟一路由,直接優選
② 對到達同一目的地的多條路由,優選優先級最高的
③ 對到達同一目的地且具備相同優先級的多條路由,必須用更細的原則去選擇一條最優的
通常來講,BGP計算路由優先級的規則以下
① 丟棄下一跳不可達的路由
② 優選Preference_Value值最高的路由(私有屬性,僅本地有效)
③ 優選本地優先級(Local_Preference)最高的路由
④ 優選手動聚合>自動聚合>network>import>從對等體學到的
⑤ 優選AS_Path短的路由
⑥ 起源類型IGP>EGP>Incomplete
⑦ 對於來自同一AS的路由,優選MED值小的
⑧ 優選從EBGP學來的路由(EBGP>IBGP)
⑨ 優選AS內部IGP的Metric最小的路由
⑩ 優選Cluster_List最短的路由
⑪ 優選Orginator_ID最小的路由
⑫ 優選Router_ID最小的路由器發佈的路由
⑬ 優選具備較小IP地址的鄰居學來的路由node
Preference_Value是BGP的私有屬性(華爲私有屬性),Preference_Value至關於BGP選路規則中Weight值,僅在本地路由器生效。Preference_Value值越大,越優先,默認缺省值爲0 只能改變本身的入向選路
默認狀況下華爲這邊會選擇router ID小的做爲本身的最優下一跳網絡
<R1>display bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 8 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 44.44.44.44/32 2.2.2.2 0 100 0 200i * i 3.3.3.3 0 100 0 200i
① 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)app
[R1]display ip ip-prefix 44 Prefix-list 44 Permitted 0 Denied 0 index: 10 permit 44.44.44.44/32 [R1]
② 建立路由策略ide
# route-policy 44 permit node 10 ---這個就是咱們須要進行關聯的方式 if-match ip-prefix 44 ---這個就是咱們的條件 apply preferred-value 200 ---這個就是咱們動做 #
③ 在BGP視圖下面進行調用oop
[R1-bgp]peer 3.3.3.3 route-policy 44 import 只能調用在入方向
④ 驗證(現象就是R1到達咱們44.44.44.44的路由下一跳指向的就是R3)學習
[R1]display bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 7 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 44.44.44.44/32 3.3.3.3 0 100 200 200i * i 2.2.2.2 0 100 0 200i [R1]
小結:Pre-Value最大,Preference_Value值越大,越優先,默認缺省值爲0設計
Local_Pref屬性僅在IBGP鄰居之間有效,不通告給其餘AS。它代表路由器的BGP優先級,用於判斷流量離開AS時的最佳路由。通常用來控制我本區域流量怎麼出去,默認狀況下Local-Pref值爲100 該數值越大 優先級越高
① 匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)3d
[R3]display ip ip-prefix 44 Prefix-list 44 Permitted 0 Denied 0 index: 10 permit 44.44.44.44/32 [R1]
② 建立路由策略code
# route-policy 44 permit node 10 ---這個就是咱們須要進行關聯的方式 if-match ip-prefix 44 ---這個就是咱們的條件 apply local-preference 200 ---這個就是咱們動做 #
③ 在BGP視圖下面進行調用router
[R3-bgp]peer 1.1.1.1 route-policy 44 export
此時在BGP裏面調用的時候,能夠調用在咱們3個方向上面
第一個方向:在R3的G0/0/0接口上進行調用,但這個調用的話,只能在G0/0/0的import方向
第二個方向:在R3的G0/0/1接口的進行調用,但這個調用的話,只能在G0/0/1的export方向
第三個方向:在R1的G0/0/1接口的進行調用,但這個調用的話,只能在G0/0/1的import方向
不能調用在R4的export方向上面(由於Local-preference只能在本AS內進行傳遞的)
聚合路由的優先級:手動聚合>自動聚合
自動聚合
只能對引入import-route的BGP路由進行聚合 若是說經過import-route到BGP的話,此時它的屬性是 ?
手動聚合
手動聚合能夠在BGP路由表中的路由進行聚合 若是說經過咱們network宣告到咱們BGP當中的話 此時它的屬性是 i(能夠對引入路由和network宣告路由都生效)
若是BGP路由表中既有引入的路由又有network宣告的路由時,只能採用手動聚合實現
驗證手動聚合大於自動聚合
R4上面的44.44.44.44的路由條目他是network宣告的 此時自動聚合識別不了,我能夠在R4上面進行修改咱們44網段的起源屬性,經過咱們前綴列表和router-policy,應用在咱們R4的一個出方向上面 R2就能夠對44.44.44.44路由進行自動聚合 R3上面開啓的是手動聚合(手動聚合能夠對network宣告的路由和經過路由引入宣告的路由進行聚合)由於R1這邊收到從R2這邊自動聚合的條目和R3這邊手動聚合條目,因此說 R1這邊到達這條聚合路由的下一跳就是R3
① 默認狀況下,BGP是沒有開啓自動聚合的
② 自動聚合只對引入的路由生效,對network路由不生效
③ 配置自動聚合後,成員明細路由將被抑制掉
④ 發現這些明細前面打了一個S(Suppressed)
⑤ 其餘路由器學習到的就是自動聚合的路由
① 在R1設備上建立loopback接口,用前綴列表匹配R1的loopback接口,將其引入到BGP協議中
[R1]display ip ip-prefix 1 Prefix-list 1 Permitted 3 Denied 10 index: 10 permit 100.100.2.0/24 index: 20 permit 100.100.3.0/24 index: 30 permit 100.100.4.0/24
② 建立路由策略
[R1]display route-policy 1 Route-policy : 1 permit : 10 (matched counts: 16) Match clauses : if-match ip-prefix 1
③ 在BGP視圖下面進行調用
# bgp 100 import-route direct route-policy 1 summary automatic 開啓咱們自動聚合(注意啊,必定是對引入的路由進行聚合,network進來的路由是不生效的) # return
④ 在R1查看實驗現象
[R1]display bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 9 Network NextHop MED LocPrf PrefVal Path/Ogn *> 100.0.0.0 127.0.0.1 0 ? s> 100.100.2.0/24 0.0.0.0 0 0 ? s> 100.100.3.0/24 0.0.0.0 0 0 ? s> 100.100.4.0/24 0.0.0.0 0 0 ? [R1]
因此R2這邊學習到的路由就是咱們聚合的路由
<R2>display bgp routing-table BGP Local router ID is 2.2.2.2 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 5 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 100.0.0.0 1.1.1.1 100 0 ? <R2>
在R1設備在自動手動聚合路由 刪除自動聚合的命令
① detail-suppressed
注意:後面的detail-suppressed參數是把明細給抑制,若是不加的話,會把明細路由和聚合路由都傳過去
[R1-bgp]aggregate 100.100.0.0 16 detail-suppressed
② as-set
as-set信息在避免路由環路時很重要,由於它記錄了被聚合路由所通過的AS
[R1-bgp]aggregate 100.100.0.0 16 as-set
③ Suppress-policy
關鍵字suppress-policy能產生聚合路由,但抑制指定路由的通告,可使用route-policy和if-match子句有選擇的抑制一些具體路由,其餘具體路由仍被通告(抑制聚合中的某些路由)
④ Origin-policy
使用關鍵字origin-policy僅選擇符合route-policy的具體路由來生成聚合路由(只要有這條路由信息,我才能產生聚合路由)
若是路由聚合後攜帶全部明細路由通過的AS信息,當明細路由發生頻繁震盪時,聚合路由也可能受其影響頻繁刷新。所以,聚合路由是否攜帶丟失的AS_Path信息,須要設計者綜合考慮網絡環境
把4.4.4.4的路由在RT4發佈給RT2的時候,把屬性更改成incomplete(也就是引入的方式)看下RT1到達4.4.4.4的路徑選擇
R1默認狀況下根據13條選路原則,會選擇router id較小的進行選路,咱們讓前3條選路原則不變,我能夠改變第四條選路原則,由於默認狀況下,R4的44.44.44.44/32經過network方式發佈到咱們的BGP裏面的,它的默認起源屬性是network(也就是咱們的i) 我能夠改變R2發往R1的起源屬性 那R1變成經過import學習到的路由
1.匹配44.44.44.44的條目 ---方法就是acl或者前綴列表(建議用它)
[R2]display ip ip-prefix 44 Prefix-list 44 Permitted 2 Denied 1 index: 10 permit 44.44.44.44/32
2.建立路由策略
[R2]display route-policy Route-policy : 44 permit : 10 (matched counts: 1) Match clauses : if-match ip-prefix 44 Apply clauses : apply origin incomplete
3.在BGP視圖下面進行調用
# bgp 100 router-id 2.2.2.2 peer 1.1.1.1 as-number 100 peer 1.1.1.1 connect-interface LoopBack0 # ipv4-family unicast undo synchronization peer 1.1.1.1 enable peer 1.1.1.1 route-policy 44 export # return [R2-bgp]
注意:
① 能夠調用在R2的export出方向(G0/0/0)
② 能夠調用在R2的import方向(G0/0/1)
③ 能夠調用在R1的import方向(G0/0/0)
④ 能夠調用在R4的export方向上(G0/0/1)
收到同一條路由裏面AS路徑最短的優先
RTA從RTB收到100.0.0.0/24的路由時,AS_Path爲(2,4),RTA從RTC收到100.0.0.0/24的路由時,AS_Path爲(3,5,4)。規定AS_Path越短(記錄的AS編號越少),路徑越優,所以RTA會優選從RTB收到的100.0.0.0/24的路由
AS路徑屬性能夠防止BGP環路
以RTE爲例,經過BGP發佈100.0.0.0/24的路由,路由可能經過RTE->RTB->RTC->RTD->RTE造成環路。爲了防止環路的產生,RTE在收到RTD發來的路由時會檢查AS_Path(該路由攜帶的)屬性,若是發現該路由的AS_Path中包含本身的AS號,則丟棄該路由
R1這邊默認狀況下根據13條選路原則,會選擇router id較小的進行選路,咱們讓前4條選路原則不變,改變第5條選路原則,在R2發往R1的44.44.44.44網段路由的時候 我能夠增長一些AS-path屬性進來,能夠經過一下兩種方式進行增長
① Additive:Append to original As Number追加as-path屬性 在原有的基礎上進行增長
② Overwrite:Overwrite original As Number覆蓋as-path屬性 把原有的AS-path給直接弄沒
[R2]display ip ip-prefix 44 Prefix-list 44 Permitted 4 Denied 2 index: 10 permit 44.44.44.44/32
2.建立路由策略
[R2]display route-policy 44 Route-policy : 44 permit : 10 (matched counts: 2) Match clauses : if-match ip-prefix 44 Apply clauses : apply as-path 1000 2000 3000 additive
3.在BGP視圖下面進行調用
# bgp 100 router-id 2.2.2.2 peer 1.1.1.1 as-number 100 peer 1.1.1.1 connect-interface LoopBack0 peer 3.3.3.3 as-number 100 peer 3.3.3.3 connect-interface LoopBack0 peer 24.1.1.4 as-number 200 # ipv4-family unicast undo synchronization network 22.22.22.22 255.255.255.255 peer 1.1.1.1 enable peer 1.1.1.1 route-policy 44 export peer 1.1.1.1 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 next-hop-local peer 24.1.1.4 enable # return [R2-bgp]
注意:
① 能夠調用在R2的export出方向(G0/0/0)
② 能夠調用在R2的import方向(G0/0/1)
③ 能夠調用在R1的import方向(G0/0/0)
④ 能夠調用在R4的export方向上(G0/0/1)
Origin屬性定義路徑信息的來源,標記一條路由是怎麼成爲BGP路由的
Origin的3種屬性
① i 代表BGP路由經過network命令注入
② e 代表BGP路由是從EGP學來的,EGP協議在現網中很難見到,但能夠經過路由策略將路由的Origin屬性修改成e
③ ? 即Incomplete代表BGP路由經過其它方式學到路由信息,如使用import命令引入的路由
3種Origin屬性的優先級爲:i>e>Incomplete(?)因此network宣告的路由大於經過import-router引入的路由
MED(Multi-Exit-Discriminator)屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS不會再將其通告給任何其餘第三方AS,用於判斷流量進入AS時的最佳路由
當一個運行BGP的路由器經過不一樣的EBGP鄰居得到目的地址相同但下一跳不一樣的多條路由時,在其它條件相同的狀況下,將優先選擇MED值較小者做爲最佳路由,其默認值爲0。 MED值較小者做爲最佳路由,其默認值爲0
[R2]display ip ip-prefix 44 Prefix-list 44 Permitted 5 Denied 2 index: 10 permit 44.44.44.44/32
2.建立路由策略
[R2]display route-policy 44 Route-policy : 44 permit : 10 (matched counts: 3) Match clauses : if-match ip-prefix 44 Apply clauses : apply cost 1000 #
3.在BGP視圖下面進行調用
bgp 100 router-id 2.2.2.2 peer 1.1.1.1 as-number 100 peer 1.1.1.1 connect-interface LoopBack0 peer 3.3.3.3 as-number 100 peer 3.3.3.3 connect-interface LoopBack0 peer 24.1.1.4 as-number 200 # ipv4-family unicast undo synchronization network 22.22.22.22 255.255.255.255 peer 1.1.1.1 enable peer 1.1.1.1 next-hop-local peer 3.3.3.3 enable peer 3.3.3.3 next-hop-local peer 24.1.1.4 enable peer 24.1.1.4 route-policy 44 import # return [R2-bgp]
注意:
① 能夠調用在R2的export方向(G0/0/0)
② 能夠調用在R2的import方向(G0/0/1)
③ 能夠調用在R1的import方向(G0/0/0)
④ 能夠調用在R4的export方向(G0/0/1)
根據選路原則,RTA會優選從EBGP鄰居學來的路由
由於R2能夠從R4收到44網段ebgp的路由條目 R2也能夠從R3收到IBGP的條目(由於我R2和R3創建的是IBGP的BGP關係)若是說前面7條選路原則是同樣的話 會比較咱們的第8條選擇的原則 因此R2到達44網段的路由要的是EBGP傳遞過來的
[R2]display bgp routing-table BGP Local router ID is 2.2.2.2 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 6 Network NextHop MED LocPrf PrefVal Path/Ogn *> 44.44.44.44/32 24.1.1.4 0 0 200i * i 3.3.3.3 0 100 0 200i [R2]
經過調整OSPF Cost,使RTA選擇R3路徑訪問44.44.44.44/32
將R1的G0/0/0接口的ospf開銷修改成2
# interface GigabitEthernet0/0/0 ip address 12.1.1.1 255.255.255.0 # return [R1-GigabitEthernet0/0/0]ospf cost 2 [R1]display ip routing-table 44.44.44.44 Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Table : Public Summary Count : 1 Destination/Mask Proto Pre Cost Flags NextHop Interface 44.44.44.44/32 IBGP 255 0 RD 3.3.3.3 GigabitEthernet 0/0/1
查看R1得BGP路由表
[R1]display bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 6 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 44.44.44.44/32 3.3.3.3 0 100 0 200i * i 2.2.2.2 0 100 0 200i
[R1]
默認狀況下 若是前面全部的選路原則都不變的話 那麼會選擇一個router ID較小的做爲本身的選路方式
<R1>display bgp routing-table BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 6 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 44.44.44.44/32 2.2.2.2 0 100 0 200i * i 3.3.3.3 0 100 0 200i <R1>