天天看點

02-BGP選路原則和屬性詳解--weight

在IGP時代我們都知道,比如說ospf,鍊路狀态協定,在進行路由選擇的時候,比的是鍊路的耗費,哪條鍊路耗費小則會更優先,如果兩個鍊路耗費是一樣的,那麼就做負載均衡。

實際上就2個原則成就了ospf---最短路徑優先的工作原理。

那如果在BGP中,有多條路由可以到達目的的時候,應當如何進行選擇呢?哪一條路徑是比較優先的呢?

來看看這11個屬性的優先級,加深記憶,最好能熟練的背下來:

<b>1 HIGHEST WEIGHT--cisco</b><b>私有屬性</b>

<b>2 HIGHEST LOCAL PRERENCE -----</b><b>公認必尊</b><b>well-known mandatory</b>

<b>3 ROUTE ORIGINATED BY THE ROUTER NEXT HOP=0.0.0.0 * -----</b><b>公認必尊</b><b>well-known mandatory</b>

<b>4 SHORTEST AS PATH * -----</b><b>公認必尊</b><b>well-known mandatory</b>

<b>5 LOWEST ORIGINATED IGP&amp;gt;EGP&amp;gt;INCOMPLETE * -----</b><b>公認必尊</b><b>well-known mandatory</b>

<b>6 LOWEST MED</b>

<b>7 EBGP PATH OVER IBGP PATH</b>

<b>8 PREFER THE PATH THROGH THE CLOSEST IGP NEIGHBOR</b>

<b>9 RREFER OLDEST ROUTER FOR EBGP PATH</b>

<b>10 PREFER THE PATH WITH THE LOWEST NEIGHBOR BGP ROUTER ID</b>

<b>11 BGP LOWEST ROUTER ID</b>

<b>12 MINIMUM CLASTER LIST LENGTH</b>

在bgp中,除了有一大堆原理需要深刻了解以外,選路原則是重中之重。一定需要掌握(要想對bgp有所認識和故障排查,這裡一定是要掌握而不是了解)選路原則。

該文檔會逐一對每個屬性進行驗證.力求能達到讓我自己在心裡有數對這些概念。

Weight屬性詳解:

<b>weight隻具有本地意義 他不能被路由器傳遞隻在本路由其上有效,還有他是思科的私有屬性!他是一個之影響自己不影響别人屬性!!而在cisco中,weight屬性的優先級是最高的.在其他廠商中,從Local_pref屬性開始。</b>

<b>BGP 的weight屬性是一個本地屬性。權重這個屬性是在路由器本地配置的,不會傳播給其他任何路由器.如果有多條前往同一個目的路由器,那麼将會選擇權重高地路由優先。</b>

<b>如果路由産生的始發路由器,對于weight屬性預設會設定為32768.其他路由的權重預設為0.</b>

首先,R1在AS 100中,R2/R3/R4在AS200中,R1到R4的loopback1和loopback2有兩條路徑可以走,分别是下一跳為R2和下一跳為R3.

現在要求做兩個實驗,分别是R1到R4的兩個loopback下一跳都是R2,還有就是R1到R4的兩個loopback下一跳都是R3。通過設定bgp的weight屬性來進行路由的選擇.

實驗一,關于路由器R4的路由10.10.10.10/20.20.20.20是通過R2還有R3同時傳遞給R1的,需求:R1到R4的兩個環回口路徑要走紅色的路徑,下一跳是R2 172.16.1.2的路徑。

在R1上配置指令:neighbor x.x.x.x weight xxx

其實這樣是最簡單的配置,這樣就保證了所有從R2學到的路由對于R1來說的權重都是200.從R4學到的路由的權重都是100,200&amp;gt;100,是以要走路徑:R1-&amp;gt;R2-&amp;gt;R4

最後在R1上面clear ip bgp *,等鄰居up起來以後,再看一下路徑進行驗證:

對于走另外一條路徑,隻需要将配置稍加修改,将鄰居R3的weight設定為200,将鄰居R2的weight設定為100,那麼就可以實作走另外一條路徑了。這裡就不再贅述了。

<b>指令neighbor x.x.x.x weight xxx配置方法是種最簡單的方式,但是它并不能精确地針對某條路由實作weight值的改變,實際上當将某個鄰居的weight設定好以後,那麼這個鄰居通告過來的所有路由都會被本地路由器加上相同的weigh權重,有點一刀切的感覺。不能改變,家長制,一言堂.</b>

<b>而route-map恰恰彌補了這個缺點,它們的靈活性是neighbor weight所遠遠不及的。</b>

下面還是相同的拓撲圖,但是這次的需求是,R1到R4的10.10.10.10,走的路徑是R1-&amp;gt;R2-&amp;gt;R4.

R2到R4的20.20.20.20,走的路徑是R1-&amp;gt;R3-&amp;gt;R4.

完全是針對路由進行設定不同的weight權重。

如果要做到上述要求,需在R1上面做如下配置:

其實這些配置的意思就是:

在R1上從鄰居172.16.1.2學到的路由10.10.10.0/24,設定為weight為65535,而其他的路由設定weight為32768.

在R1上從鄰居172.16.4.2學到的路由20.20.20.0/24,設定為weight為65535,而其他的路由設定weight為32768.

那麼最後在R1上面得到的結果應該是:

10.10.10.10 next-hop 172.16.1.2 weight=65535

20.20.20.20 next-hop 172.16.1.2 weight=32768

20.20.20.20 next-hop 172.16.4.2 weight=65535

10.10.10.10 next-hop 172.16.4.2 weight=32768

下面我們來驗證一下是否如上面推測的結果一緻:

還有一點是需要注意的,就是weight屬性隻是本地有效,是以在調用route-map的時候,隻能用in的方向,用out方向是無效的,因為這個屬性不會傳遞到鄰居去的。

這裡已經顯示了route-map是多麼的靈活了,如果僅僅用指令neighbor x.x.x.x wight的話,根本就做不到對路由的區分.

是以對于不同的環境還需要靈活的運用這些選路的政策。

本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/701272

繼續閱讀