天天看點

HCNP Routing&Switching之BGP路由屬性和優選規則

HCNP Routing&Switching之BGP路由屬性和優選規則

BGP路由優選的首要條件是對應路由的下一跳必須可達,即隻會在BGP路由表中對應路由有星号的路由上進行優選;滿足下一跳可達的前提下,首先優選首選值(Preference_Value)最高的路由(該屬性為私有屬性,僅在本地有效,一般不常修改來影響路由選路);如果首選值一樣,則對比本地優先級(Local_Preference),本地優先級最高的路由被優選;如果本地優先級一樣,則比較聚合方式,聚合方式是手動聚合大于自動聚合,大于本地network宣告,大于引入宣告,大于從鄰居學習到的路由;如果聚合方式一樣,則比較AS_Path長度,AS_Path最短的路由被優選(這裡的AS_Path最短是指經過的as數量最少,并非as号碼長度);如果AS_Path長度一樣,則比較起源屬性,起源屬性優先級是本地宣告大于引入宣告;如果起源屬性也一樣,則比較來自同一AS的路由,優選MED最小的路由;如果MED也一樣,則比對鄰居類型,鄰居類型優選順序是EBGP類型鄰居大于IBGP類型鄰居;如果鄰居類型也一樣,則優選AS内部IGP的開銷最小的路由;即比較去往對應下一跳的開銷;去往對應下一跳開銷小的路由被優選;

  前文我們了解了BGP防環機制和路由聚合相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15458110.html;今天我們來聊一聊BGP路由屬性和選路規則相關話題;

  BGP路由屬性

  先來看一看BGP路由表

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:BGP路由表主要顯示了BGP路由,其中主要由路由狀态代碼,目标網絡位址,下一跳,med屬性值,本地優先級,路由首選值,以及路由的AS_path和起源屬性組成;狀态代碼中,星号(*)表示該路由可用,如果沒有星号,表示該路由不可用,一般情況不可用的BGP主要有下一跳位址不可達,即沒有去往下一跳的路由;其次還有可能是對應路由已經在IGP路由裡學習到了,因為IGP路由的優先級要比BGP高,是以在ip路由表裡存在的就是IGP路由,而對于BGP來說,就不可用(因為有IGP路由更優);大于号(>)表示最優路由,即當一個網絡有多個下一跳時,首選的路由;d表示,抑制,懲罰;即對應路由有懲罰機制;BGP路由是有懲罰機制的,如果一條路由不穩定,一會好,一會不好,此時對應路由就可能被懲罰(如果開啟了懲罰機制);即懲罰一段時間不可用,等懲罰時間過去以後,對應路由才會從抑制狀态變為可用;s表示抑制,即該路由不被通告給其他鄰居;隻存在本地bgp路由表中;起源屬性(Origin),i表示本地宣告,即network宣告的路由;?表示導入外部路由,即引入宣告的路由;e表示從egp學習到的(BGP前身,目前已被淘汰);起源屬性優先級是本地宣告大于引入 宣告;

  BGP路由屬性分類

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:BGP路由屬性主要從公認屬性和可選屬性分類,其中公認屬性中又分必選和可選;可選屬性中有分可過渡和非過渡;公認必遵表示所有BGP都可以識别的屬性,并且是必須存在Update消息中的;比如起源屬性,as_path,下一跳這些屬性就是所有BGP路由器在更新消息中必須要有的屬性;換句話說這些屬性是不可省略,必須存在;公認任意就是指所有bgp路由器都可以識别,當不要求必須存在update消息中,即這些屬性可以存在,也可以不存在,取決對應路由的需求,不是必須強制要求存在update消息中;比如本地優先級,自動聚合;可選過渡是指不被所有BGP路由器識别,如果無法識别,對應屬性是可以正常傳遞給鄰居的;比如手動聚合,團體屬性;可選非過渡是指不能被所有BGP路由器識别,如果不能識别,則對應屬性丢棄(隻是對應路由的對應屬性丢棄,并不是對應路由被丢棄);比如med,med就類似ospf裡的開銷,這個屬性在bgp裡是私有屬性,是以不是被所有BGP路由器識别(華為是med,思科是metric,但兩者作用都是一樣的);

  BGP路由屬性圖解

  1、PrefVal:優選值,數字越大越優先;預設0;私有屬性,主要作用是定義本地路由的優先級,作用範圍隻限于本地有限,不傳遞給鄰居;

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:當去往同一網絡有多個下一跳時,我們可以通過調整很優選值來影響去往對應網絡的路由;如上所示,我們希望RTA去往RTD經過RTC,那麼我們可以将RTA去往RTC的首選值調大;

  2、Origin:起源屬性,主要用來描述對應BGP路由的産生方式;

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:起源屬性優先級順序是,本地通過network宣告的路由,要優于引入宣告的路由;

  3、AS_Path:AS路徑,主要用來描述BGP路由在傳輸的路徑中所經曆的AS的清單;該屬性會在EBGP傳遞時更新(即傳遞給EBGP鄰居時,會在對應路由更新中加上自己所在AS的号碼),同時AS_Path這個屬性也是EBGP防環的一個屬性,即丢棄AS_Path屬性中包含本端as号的路由;該屬性是數量越少越優先(一個as我們可以了解為RIP裡的跳數,經過多跳數越小,對應路由就越優);as_path除了能夠防止as間環路,同時它也可以用作路由過濾,比如as_path filter;

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,針對as100去往RTA,如果從RTA--->RTB--->RTD--->AS100,那麼對于AS100收到的路由更新中對應AS_path的值為65201,65223,65101;如果從RTA--->---RTC--->AS100,對應as100收到RTA的路由更新中as_path的值為65330,65101,相對于上面的路由,對應AS_Path的長度要略小,是以as100去往RTA會經過RTC到達RTA,而不會走經過RTD,RTB在到達RTA; 

  4、Next Hop下一跳,主要用來描述對應去往目标網絡的下一跳屬性 ,即發出路由更新的路由器(更新源);

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上所示,RTD釋出路由更新,對應下一跳就會是本地出接口ip位址(如果是實體口建立鄰居),而對應IBGP類型鄰居,預設更新不會更改更新源,即RTC收到RTD的路由更新,對應下一跳還是RTD,即RTC向EBGP發送對應路由更新,其下一跳不會更改為RTC,而還是RTD;對于RTB收到RTC的路由更新,因為RTB和RTA是EBGP鄰居,是以RTB收到RTC的路由更新以後,會把對應的下一跳修改為自己,然後再傳遞出去;同樣的道理,RTA收到RTB的路由更新,因為RTA和RTF或RTE是IBGP鄰居,是以RTA收到RTB的路由更新以後,向鄰居傳播時,它不會更改更新源,即下一跳位址還是會是RTB;是以我們在RTF看到去往8.0.0.0/24的路由裡,對應下一跳屬性會是RTB的接口位址;

  5、Local-Preference:本地優先級,該屬性值在IBGP鄰居傳遞,數字越大越優先,預設是100;主要用于控制流量怎樣流出AS,即對出站路由的控制;

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,對于RTD要想去往RTA的路由,我們可以在RTC或RTB上更改本地優先級屬性來影響RTD去往RTA的路由路徑;如果我們想要讓RTD的流量經過RTC到達RTA,那麼我可以在RTC上将對應本地優先級屬性調大,進而達到影響as65101的出站路由;

  6、MED:Multi-Exit-DISC,該屬性類似IGP裡的路徑成本(cost),主要用于差別到達同一鄰居AS的多條入口鍊路;數字越小越優先;該屬性僅在相鄰的兩個AS之間傳遞,收到此屬性的AS不會在通告給任何其他第三方AS;該屬性常用語控制流量怎樣進入AS,即控制AS入站路由;

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,我們想要控制AS65330的入站路由,我們可以在RTB和RTC上修改med的值,如果我們希望AS65101和AS65330之間的流量走RTB,我們可以将RTC的med調大,或者降低RTB的med值,進而讓RTA學習到的路由對應下一跳為RTB;預設情況下,不允許對比來自不同AS鄰居的路由資訊中的med值,除非能夠确認不同AS采用了同樣的IGP路由選擇方式,我們可以使用指令compare-different-as-med來比較不同AS鄰居的MED值;如下所示

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:針對192.10.0.0/16這個網絡來說,它從as500和as600發送的MED不會被as700作為選路對比條件;因為med隻會被來自同一AS到達多個相鄰鄰居入站路由對比條件;像這種不同AS是不被采用;當然如果能夠确定AS500和as600都是使用相同的IGP路由協定(比如都是用ospf作為IGP路由協定)和路由選擇方式(路由政策等),那麼我們也可以使用指令compare-different-as-med來對比來自不同AS中med的值;

  BGP路由優選規則

  BGP選路規則分三種情況

  1、如果該路由到達目的地的路由是唯一的,則直接優選;

  2、如果達到同一目的地的多條路由,優選優先級最高的,即比較優先級,優先級最高被優選;

  3、如果達到統一目的地的且具有相同優先級的多條路由時,則使用如下更細的原則比較

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:BGP路由優選的首要條件是對應路由的下一跳必須可達,即隻會在BGP路由表中對應路由有星号的路由上進行優選;滿足下一跳可達的前提下,首先優選首選值(Preference_Value)最高的路由(該屬性為私有屬性,僅在本地有效,一般不常修改來影響路由選路);如果首選值一樣,則對比本地優先級(Local_Preference),本地優先級最高的路由被優選;如果本地優先級一樣,則比較聚合方式,聚合方式是手動聚合大于自動聚合,大于本地network宣告,大于引入宣告,大于從鄰居學習到的路由;如果聚合方式一樣,則比較AS_Path長度,AS_Path最短的路由被優選(這裡的AS_Path最短是指經過的as數量最少,并非as号碼長度);如果AS_Path長度一樣,則比較起源屬性,起源屬性優先級是本地宣告大于引入宣告;如果起源屬性也一樣,則比較來自同一AS的路由,優選MED最小的路由;如果MED也一樣,則比對鄰居類型,鄰居類型優選順序是EBGP類型鄰居大于IBGP類型鄰居;如果鄰居類型也一樣,則優選AS内部IGP的開銷最小的路由;即比較去往對應下一跳的開銷;去往對應下一跳開銷小的路由被優選;如果去往對應下一跳的開銷一樣,則比較cluster_list,優選cluster_list最短的路由,如果cluster_list長度一樣,則優選orginator_Id最小的路由;cluster_list和orginator_id這個是路由反射器中的屬性,目前不特别介紹;如果上述屬性都一樣,則比較router-id,優選router-id最小的路由器釋出的路由;如果router-id也一樣,則優選ip位址最小的鄰居學習到的路由;

  從上面的BGP路由優選規則來說,BGP不管怎樣它都會選出一條最優的路由來,在BGP裡沒有等價路由;預設情況下BGP是不允許有負載分擔的,即負載分擔的功能是關閉的;當然如果在滿足上述前9條規則的前提下,且AS_Path是一模一樣(當然AS_Path不一樣,我們也可以使用指令忽略AS_Path不一樣的情況,強制開啟負載分擔;在bgp程序模式下使用load-balancing as-path-ignore來忽略as_path不一樣的情況;),我們可以視為對應路由為等價路由;可以使用指令開啟BGP負載分擔功能(在bgp程序下使用maximum load-balancing 2開啟負載分擔,預設隻允許1路負載,最大支援8路負載);

  BGP聚合方式對選路的影響

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:預設情況下,如果手動聚合和自動聚合開啟了,對同一網絡路由的聚合如果不是一樣,則手動聚合和自動聚合不沖突;如果自動聚合和手動聚合,聚合後的路由一模一樣,則手動聚合優先級高于自動聚合;如上圖所示在RTB上開啟了自動聚合,同時也手動聚合200.0.0.0/24;此時手動聚合和自動聚合後的路由一模一樣,則優先通告手動聚合後的路由,對于自動聚合的路由不會通告給任何鄰居;

  鄰居類型對BGP選路的影響

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,對于RTA來說,它從RTC通過EBGP學習到達200.0.0.0/24網絡,同時也從RTB通過IBGP學習到達200.0.0.0/24的路由;此時RTA會優選通過EBGP鄰居類型學習到的200.0.0.0/24的路由;原因很簡單,因為RTB和RTA是IBGP鄰居;即在同一AS内;那麼對于同一AS内的路由器來說,路由更新隻傳遞一跳,如果RTB從内部其他路由器學習到200.0.0.0/24的路由,此時是不會發送給RTA的;是以RTB能夠學習到達200.0.0.0/24網絡的路由,肯定是從其他AS學習過來的;這樣一來,RTA從其他as直接學習到達200.0.0.0/24網絡的路由,肯定優于RTB從其他AS學習到達200.0.0.0/24網絡路由後,再次傳遞給RTA;是以BGP選路原則中對于同一目标網絡來說,從EBGP鄰居學習到的路由要優于從IBGP鄰居學習到的路由;

  AS内部IGP開銷對BGP選路的影響

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,針對200.0.0.0/24網絡來說,RTA通過BGP能夠學習到達200.0.0.0/24網絡的下一跳有兩個;在其他條件都一樣的情況下,此時内部asIGP的開銷是可以作為BGP選路的一個評判标準;如圖RTA如果走RTB,則對應鍊鋸的帶寬為50M,而走RTC則對應鍊路帶寬為100M;很明顯走RTC的鍊路更優;是以在其他條件都一樣的情況下,對比去往對應下一跳的開銷就作為選路的标準;即as内部IGP開銷越小,對應鍊鋸就更優,對應的BGP路由也就更優;

  Router-ID與IP位址對BGP選路的影響

HCNP Routing&Switching之BGP路由屬性和優選規則

  提示:如上圖所示,如果在優選值,本地優先級,聚合方式,as_path,起源屬性,med以及内部IGP開銷對比都一樣的情況下;此時會對比對應路由的router-id;即發送對應路由的路由更新路由器id,router-id最小被優選;如圖,對于RTA去往200.0.0.0/24的路由來說,在RTA的BGP路由表中會有三個下一跳,一個是RTC,兩個為RTB(RTB和RTA建立兩個鄰居,是以對應下一跳也會有兩個);首先在三個下一跳中對比router-id,router-id小者被優選;是以RTC不會被優選(router-id大于RTB);但對于RTA來說,下一跳為12網段和21網段的router-id都是同一路由器,是以router-id一樣;此時比較ip位址,ip位址最小的被優選;是以對于RTA去往200.0.0.0/24網絡的的最優路由是下一跳為10.1.12.2,而非10.1.21.2;原因就是10.1.12.2小于10.1.21.2;

作者:Linux-1874

出處:https://www.cnblogs.com/qiuhom-1874/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.