且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《OSPF和IS-IS详解》一2.5 路径决策过程

更新时间:2022-09-18 21:41:21

本节书摘来异步社区《OSPF和IS-IS详解》一书中的第2章,第2.5节,作者: 【美】Jeff Doyle 译者: 孙余强 责编: 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 路径决策过程

BGP设计与实现
BGP经过一个复杂的算法来决定***路径并更新BGP RIB和IP RIB。正如前面所提到的,BGP是一个策略工具。它的重要性通过BGP利用属性和其他参数来选择***路径的过程最能说明。

当存在多条到达特定目的地的有效的BGP路径时,IOS将会根据收到它们的相反顺序列出这些路径。也就是说,最新的路径将被列在最开始,而最老的路径则被列在末端。在命令show ip bgp的输出中,最新的路径被列在最上面,而最老的路径被列在最下面。对于给定的一个目的地,为了选择***路径,BGP通常使用顺序比较的方法。它指定第一条路径(最新的路径)作为当前的***路径,然后比较当前的***路径和列表中的下一条路径,直到比较到有效路径列表的末端。例如,BGP顺序接收到3条路径——1、2和3——BGP首先比较路径3(最后接收到的)和路径2。接着,得出的***路径再与路径1(最早接收到的)相比较。这样,第二次比较得出的***路径就成为到达目的地的最终的***路径。

如果一条路径满足下列任一条件,那么它在***路径选择过程中就不是有效的候选者:

  • 路径的下一跳不可达;
  • 路径未同步,但同步功能被启用了;
  • 路径被入境BGP策略所拒绝,并且路由器配置了入境温和重置(soft reset);
  • 路由被惩罚(dampened)。

当前,Cisco IOS软件的路径选择有13步(www.cisco.com/warp/customer/459/25.shtml)。每一步都会被顺序评估,直到找到一条优选路径为止:

1.WEIGHT是首先考虑的参数。WEIGHT值最高的路径优先。WEIGHT是Cisco专有的参数,并且对配置这个参数的路由器来说是本地有效的。默认条件下,本地始发的路径具有相同的WEIGHT值(即32768),所有其他的路径的WEIGHT值为0。

2.LOCAL_PREF值最高的路径优先。Cisco IOS软件中,LOCAL_PREF的默认值为100。

3.基于始发地(origination)评估路由,路由器本地始发的路径优先。依次降低的优先级顺序是:default-originate(针对每个邻居配置)、default-information-originate(针对每种地址簇配置)、network、redistribute、aggregate-address。

4.评估AS_PATH的长度,AS_PATH列表最短的路径优先。但是,可以通过配置bgp bestpath as-path ignore(隐藏的命令)来跳过这一步。

在评估路径长度时,记住以下要点:

  • 一个AS_SET被计数为1,而不管“set”中包含多少个自治系统;
  • AS_CONFED_SEQUENCE不包括在AS_PATH长度中。

5.这一步评估路由的ORIGIN属性,ORIGIN类型最低的路径优先。IGP低于EGP,EGP低于INCOMPLETE。

6.评估MED。MED值最小的路径胜出。默认条件下,只有在两条路径的第一个(邻近的)AS相同的情况下才会进行比较操作;任何联盟子自治系统都被忽略。换句话说,对于多条路径,只有在AS_SEQUENCE中的第一个AS相同的情况下,才会比较MED;任何打头的AS_CONFED_SEQUENCE都将被忽略。如果激活了bgp always-compare-med,那么对于所有路径都将比较MED,而不考虑它们是否来自于同一个AS。如果你使用了这个选项,就应该在整个AS中都这么做,以避免路由选择环路。

注意以下MED的更改选项:

  • 配置了bgp deterministic-med后,不管收到前缀的顺序如何,MED比较的结果都是一致的。在这种配置下,所有的路径都将基于邻近的编组。在每一个AS组内,根据MED的大小对路径进行排序。MED值最小的路径被选为该组的***路径。最终的***路径是所有选出的路径中具有最小MED值的路径(译者注:这句话值得商榷,参见Cisco文 档http://www.cisco.com/en/US/tech/tk365/technologies_tech_
    note09186a0080094925.shtm1)。如果存在MED,那么这是一种建议的配置。
  • 如果激活了bgp bestpath med-confed,对于所有只包含AS_CONFED_SEQUENCE的路径来说才比较MED,也就是说,这些路径是始发于本地联盟的。注意,如果一条路径包含了任何外部的自治系统,那么这条路径就不参与比较,而它的MED在联盟内部被传递时不被改变。
  • 如果接收到的路径没有MED,就把它的度量指定为0,除非激活了bgp bestpath missing- as-worst,在这种情况下,这些路径的度量值被指定为4 294 967 294(最大值)。这主要是考虑到对旧标准的兼容性。

7.外部BGP(eBGP)路径优于内部BGP(iBGP)路径。包含AS_CONFED_SEQUENCE的路径对于联盟来说是本地的,因此被看作是内部路径。在路径选择过程中,联盟外部(Confederation External)路径和联盟内部(Confederation Internal)路径没有差别。

8.BGP优先选择到BGP下一跳的IGP度量最低的路径。这一步使得本地拓扑信息被考虑进去。

9.如果配置了maximum-paths [ibgp]n,这里的n在2~6之间,并且存在多条等价成本的路径(对于多条路径,以上1~6步的比较结果都相同,而且AS_PATH也相同),那么BGP会在IP路由选择表中插入最多n条接收到的路径。这就激活了BGP多路径负载分担(multipath load sharing)特性。如果没有使用可选关键字ibgp,那么多路径特性就仅仅应用于eBGP路径,或来自于同一个邻居AS或子AS的联盟外部路径。当不激活这一选项时,它的默认值为1。

10.当两条路径都是外部路径时,BGP将优先选择最先收到的路径(最老的路径)。这一步能最小化路由抖动,因为新路径即使在基于另外的决策准则(在第11、12和13步中讲述)下是优先的路径,也不会替代老路径。

如果以下任一条件为真,这一步将会被忽略:

  • 启用了bgp bestpath compare-routerid命令;
  • 多条路径具有相同的路由器ID,因为这些路由都是从同一台路由器接收过来的;
  • 当前没有***路径。缺乏当前***路径的例子发生在正在通告***路径的邻居失效的时候。

11.BGP优先选择来自于具有最低的路由器ID的BGP路由器的路由。路由器ID是路由器上的最高IP地址,并且优选环回地址。也可以通过bgp router-id命令静态地设定路由器ID。如果路径包含RR属性,那么在路径选择过程中,就用ORIGINATOR_ID来替代路由器ID。

12.如果多条路径的始发路由器ID或路由器ID相同,那么BGP将优选CLUSTER_LIST长度最短的路径。这种情况仅仅出现在BGP RR的环境中。当一个客户与其他簇中的RR或客户形成对等关系时,该客户可以使用CLUSTER_LIST长度来选择***路径。为了采用这一步,客户必须能感知RR特定的BGP属性。

13.BGP优选来自于最低的邻居地址的路径。这是BGP的neighbor配置中所使用的IP地址,并且它对应于与本地路由器建立TCP连接的远端对等体。