BGP選路規則
醉過才知酒濃
愛過才知情重
你不能做我的詩
正如我不能做你的夢 ---胡適
一、BGP的路徑屬性介紹
二、公認強制屬性
三、如何使用本地優先順序屬性和MED屬性
四、BGP選路分流實驗
一、BGP路徑屬性介紹
1、BGP不會執行負載均衡
預設情況下,到達同一目標地址,BGP只走單條路徑,不會再多跳路徑之間執行負載均衡。
2、BGP選擇最優路徑
BGP選路需要比較路由條目中的Path Attributes;
有時候,路由器依靠預設屬性協商出來的”最優路徑“不一定是最好的路徑。
3、BGP的每條路由都帶有路徑屬性
4、BGP路徑屬性分為4類
公認強制屬性
公認自選
可選可傳遞
可選不可傳遞
5、公認屬性是所有BGP路由器都必須識別的屬性
公認強制屬性---所有BGP路由器都可以識別,且必須存在於Update訊息中。如果缺少這種屬性,路由資訊就會出錯。代表:Original,AS-Path,Next-Hop
公認任意屬性---所有BGP路由器都可以識別,但不要求必須存在Update訊息中,可以根據具體情況來決定是否新增到Update訊息中。代表:Local-Preference,Atomic-Aggregate
6、可選屬性不需要都被BGP路由器所識別
可選可傳遞屬性---BGP路由器可以選擇是否在Update訊息中攜帶這種屬性。接受者路由器如果不識別這種屬性,可以轉發給鄰居路由器,鄰居路由器可能會識別並使用這種屬性。代表Community;
可選不可傳遞屬性---BGP路由器可以選擇是否在Update訊息中攜帶這種屬性。在整個路由器釋出路徑上,如果部分路由器不能識別這種屬性,可能導致該屬性無法發揮作用。因此接受的路由器如果不識別這種屬性,將丟棄該屬性,不必轉發給鄰居路由器。代表:MED;
常見的BGP路徑屬性
屬性名稱 | 描述 | 性質 | |
Original | 起源屬性 | 公認強制 | |
AS-Path | AS路徑 | 公認強制 | |
Hext-Hop | 下一跳地址 | 公認強制 | |
MED | 多出口辨別(調整Metric值) | 可選不可傳遞 | |
Local-Pref | 本地優先順序 | 公認屬性 | |
Community | 一般團隊屬性 | 可選可傳遞 | |
Weight | 權重值(cisco私有屬性) | 可選可傳遞 |
二、公認強制屬性與其選路規則
Orignal(起源屬性)
使用network釋出的路由,起源屬性為:i
重分發到BGP中的路由,起源屬性為:?
下一調屬性(Next-Hop)
到達目標網路的下一跳地址,不一定是直連鄰居地址,只要在IGP路由中下一跳可達也可以。
如果下一跳地址不與當前路由器直連,則BGP在將資料包發往下一跳時,通常需要採用遞迴查詢在IGP路由表中查詢該下一跳地址。
一臺BGP路由器將路由傳遞給EBGP鄰居時,會將Next-hop屬性改為自己的地址,也就是和對方建立鄰居所使用的地址。而將路由傳遞給IBGP鄰居時,不會改變下一跳屬性。所以必須對IBGP鄰居強制修改next-hop屬性為本地更新源。
AS_PATH屬性
AS_Path中包含了BGP路由器到達目的地所經過的所有AS號碼的集合。
AS_Path中包含了多少個AS號碼,號碼多少,邏輯上反映了到達目的地的遠近。
AS_Path還能細分為:
AS_Sequence(有序的AS號碼,即有序號碼在AS_Path中是按一定順序排列的)
AS_SET (無序的AS號碼,即AS號碼在AS_Path中的排列是沒有順序的,通常是將多條擁有不同AS_Path的路由彙總後產生的)
當BGP路由表中到達同一目的地存在多條路徑時,會優選AS-Path最短的路徑
AS-Path屬性內的AS號碼可以重複
使用預設的AS_PATH屬性可能無法選出最優路徑
可以通過加長AS_PATH的列表長度,從而影響選擇
三、如何使用本地優先順序屬性和MED屬性
本地優先順序屬性(Local-Preference)
Local-Preference只在本AS內有效(公認任意屬性)
本地優先順序預設值都是100,越大越優先
一般用於AS內部往外部流量選擇多個ASBR或RR的時候使用(收路由用)
MED屬性(Multi-Exit-DISC)
MED是可選不可傳遞屬性,類似於Metric屬性,數值越小越優先。
向EBGP鄰居傳送時使用。
區別到達同一鄰居AS的多條入口鏈路(MED值越小,鏈路越優先)。
MED值只能在AS間傳遞
所有發給IBGP鄰居的路由MED值都為0
預設情況下,只有當去往目的地的多個下一跳EBGP鄰居為相同AS時,才比較MED值。
調整路徑屬性的方式
p prefix-list命令用來配置一個IPv4地址字首列表表項。
undo ip prefix-list命令用來刪除一個IPv4地址字首列表或其某個表項。
【命令】
ip prefix-list prefix-list-name [ index index-number ] { deny | permit } ip-address mask-length [ greater-equal min-mask-length ] [ less-equal max-mask-length ]
undo ip prefix-list prefix-list-name [ index index-number ]
# 定義一條名為p1的IPv4地址字首列表,只允許10.0.0.0/8網段的,掩碼長度為17或18的路由通過。
<Sysname> system-view
[Sysname] ip prefix-list p1 permit 10.0.0.0 8 greater-equal 17 less-equal 18
# 建立一個名為policy1的路由策略,其節點序列號為10,匹配模式為permit。定義一個if-match子句,允許下一跳地址匹配已存在的地址字首列表p1的路由資訊通過。
<Sysname> system-view
[Sysname] route-policy policy1 permit node 10
[Sysname-route-policy-policy1-10] if-match ip next-hop prefix-list p1
BGP選路規則
1、最高Local_Pref值
2、本地發起路由
3、最短AS_PATH
4、最低Origin型別
5、最小MED值
6、EBGP由於IBGP
四、BGP選路分流實驗