BGP:
1、基本概念
一、基於TCP 179,基於TCP的好處:面向連接的,有確認機制可靠的
二、是一種用於AS之間路由傳遞和控制的協議(AS)
三、BGP報文:
open:協商創建鄰居關係(版本,AS號,hold-time,router-id)
keepalive :週期60s發送,用來保活TCP連接
update :用來進行增量的路由更新
notification :差錯報文,在任何階段都有可能發送,一旦收到直接進入IDLE
route-refresh:向對等體發送路由更新請求
四、BGP狀態機:idle connect active opensent openconfirm established
五、BGP鄰居關係:IBGP,EBGP
2、路由更新規則
一、只將最優路由通告給對等體
二、從EBGP鄰居學來的會通告給全部鄰居關係
三、從IBGP鄰居學來的不會通告給IBGP鄰居
四、從IBGP鄰居學來的默認會通告給EBGP鄰居
從IBGP鄰居學到的路由在傳給EBGP鄰居時要根據IBGP和IGP同步的狀況來決定
同步:要向EBGP更新一條來自IBGP鄰居的路由,須要在BGP和IGP同時學到這條路由
(華爲設備默認關閉同步而且不能開啓)
3、BGP的屬性——經過更改BGP路由屬性控制路由的傳遞
一、next-hop:公認必遵屬性,必須攜帶在update中,不攜帶就會出錯
當通告給對等體一條BGP路由時,對等體會將此路由下一跳置爲對方和我創建鄰居關係的地址
從EBGP鄰居學來的路由在傳給IBGP鄰居的時候,不修改下一跳
從EBGP/IGBP學來的路由在傳給EBGP鄰居時,要修改下一跳爲本身和對方創建鄰居關係的地址
當要使用一條BGP路由時,下一跳必須可達;使用BGP路由時須要先遞歸IGP查找BGP路由的下一跳
能夠在BGP路由器上使用peer X.X.X.X next-hop-local來強制修改下一跳屬性,此命令用於將從EBGP鄰居學來的路由傳給IBGP鄰居的時候使用。
二、origin:起源屬性,公認必遵,BGP路由必須攜帶在update報文,若是不攜帶就會出錯
用來標識此路由最初是以什麼方式引入BGP的(network,import,egp)
若是是以network則標識爲 i(igp)
若是是以egp則標識爲 e(egp)
若是是以import則標識爲 ?(incomplete)
I > e > ?
能夠在整個BGP域內出入方向作修改
三、AS-path:公認必遵屬性,必須攜帶在update中,不攜帶就會出錯
用來標識路由在AS之間傳遞的時候通過了哪些AS,將通過的AS編號加入AS-path
(1)選路:優選AS-path短的BGP路由
(2)AS間防環:在從EBGP鄰居收到一條路由時會對AS-path作檢查,檢查AS-path中有沒有自身的AS號,若是有,則丟棄此路由,若是沒有則繼續使用。
能夠在AS內,AS間經過修改AS-path的長度來影響選路,只能添加已經通過的AS編號
四、Local-Preference:公認任意屬性,每一個廠商都支持,但能夠不攜帶在update報文中
默認值爲100,值越大越優先,只能在AS內部生效,不能傳出AS
用來影響AS內部路由器如何訪問其餘AS的路由
只能在IBGP鄰居的出入方向和EBGP鄰居的入方向修改
五、MED(multi-exit-disc):多出口鑑別器,可選非過渡屬性,能夠選擇性攜帶和識別,若是不識別,將不會傳遞該屬性;用於告知鄰居AS一條最好的路徑進入本AS;本質是開銷值
比較原則:越小越優先,默認爲0;
默認只能比較來自一個AS的MED值,能夠經過配置命令來比較來自不一樣AS的MED;
能夠影響鄰居AS以及他的IBGP鄰居,不能影響鄰居AS的其餘EBGP鄰居
六、community:團體屬性,可選過渡屬性,能夠選擇性識別和攜帶,若是不識別,則會將此屬性透傳給其餘設備;默認不傳遞給鄰居,必須經過配置peer X.X.X.X advertise-community來將團體屬性通告給鄰居。
做用:用來限制路由的傳遞範圍,使用公認團體屬性限制
用來標識一類具備相同特徵的路由,使用擴展團體屬性標記
公認團體屬性:internat:路由默認團體屬性,具備此團體屬性,會將路由傳遞給鄰居
No-advertise:具備此團體屬性,不會將路由傳遞給任何鄰居
No-export:具備此團體屬性,不會將路由傳出AS
No-export-subconfed:在聯盟中使用,不會傳給其餘聯盟AS
擴展團體屬性:AA:NN標識,AA通常用AS編號表示,NN表示AS內部的團體編號
4、選路原則——13條選路原則
一、比較prefrence-value,越大越優先,華爲私有屬性,只在本臺路由器上生效
二、比較local-preference,越大越優先
三、本地始發:手工聚合>自動聚合>network>import>從鄰居學到的
四、比較as-path,越短越優先
五、比較origin,i(network)>e(egp)>?(import)
六、比較MED值,越小越優先
七、EBGP鄰居>IBGP鄰居
八、優選BGP路由下一跳遞歸IGP路由開銷值小的
九、若是前八條如出一轍,則能夠實現負載分擔
AS-PATH必須嚴格一致
默認BGP路由負載分擔條目爲1
十、比較cluster-list,越短越優先
十一、比較originator-id,越小越優先
十二、比較router-id,越小越優先
1三、比較對等體的IP地址,越小越優先
5、防環機制——AS內/AS間/特殊場景
一、AS內防環:從IBGP鄰居學來的不會通告給IBGP鄰居(IBGP水平分割)
問題:AS內某些路由器學不到BGP路由
解決方法:(1)AS內部IBGP全互連
二、AS間防環:使用AS-PATH防環
三、路由反射器:(Route-Reflector)
(1)角色:反射器,客戶機,非客戶機(都是在反射器上定義的)
(2)路由傳遞原則:路由反射器打破了水平分割,非非不傳
只反射最優路由
從客戶機學來的路由會反射給客戶機和非客戶機
從非客戶機學來的路由會反射給客戶機
(3)如何在RR中規劃IBGP:
客戶機只須要和反射器創建IBGP鄰居
非客戶機須要和反射器創建IBGP鄰居
非客戶機和非客戶機之間須要全互連IGBP
(4)防環機制:
簇內防環:使用originator-id防環,此屬性是可選非過渡屬性
在RR上反射路由時,若是此屬性爲空,
則會打上本AS始發路由器的router-id
其餘路由器收到帶有originator-id的路由,
會將此屬性和本路由器router-id比較,
若是同樣,則不接受,若是不同,則接受。
簇間防環:使用cluster-list防環,此屬性是可選非過渡屬性
當RR在反射路由時,會檢查此路由有沒有cluster-list
若是沒有,則建立一個,並將自身的cluster-id寫入
(Cluster-id默認是router-id,但能夠修改)
其餘RR在接收到反射的路由時,會檢查此屬性cluster-list
若其中包含自身的cluster-id,則忽略該路由
四、BGP聯盟
(1)角色:成員AS(小AS),聯盟AS(大AS)
(2)路由傳遞原則:聯盟EBGP鄰居,聯盟IBGP鄰居
從EBGP鄰居學到的路由會傳給聯盟EBGP/聯盟IBGP
從聯盟EBGP鄰居學到的路由會傳給聯盟EBGP/聯盟IBGP/EBGP
聯盟EBGP鄰居之間傳遞路由時,下一跳不作修改
只傳遞最優路由
(3)配置原則:須要在BGP進程中指定聯盟AS的AS號
須要在BGP進程中指定聯盟EBGP鄰居的AS號
(4)防環機制:使用聯盟內有序AS防環
在路由通過聯盟AS時,會建立一個(小括號),
並在小括號裏面最前添加成員AS的AS編號
每通過一個成員AS,都會在最前面添加成員AS
在此路由出聯盟AS時,會將小括號替換成聯盟AS
中間成員AS在收到路由時,會檢查AS-path中有沒有自身as
若是有,則忽略該路由
6、BGP特性
一、路由聚合:自動聚合,手動聚合
(1)自動聚合
手動聚合
(2)路由聚合須要考慮的問題:
路由屬性的繼承問題:next-hop,自動/手動聚合至關於新引入一條路由,下一跳爲本身
Origin,自動聚合起源屬性爲?(incomplet)
手動聚合起源屬性繼承明細路由中起源屬性最劣的
As-path,自動聚合至關於新引入一條路由,AS-path沒有繼承
手動聚合中默認不繼承明細的AS-path,
(可使用as-set參數讓聚合路由的AS-path中使用{}攜帶明細路由的AS-path)
明細路由的通告問題:自動聚合的路由默認不通告明細路由
手動聚合的路由默認通告明細路由,可使用detail-suppressed抑制全部明細路由,ide