天天看点

《BGP设计与实现》一2.5 路径决策过程

本节书摘来自异步社区《bgp设计与实现》一书中的第2章,第2.5节,作者【美】randy zhang , micah bartell,更多章节内容可以访问云栖社区“异步社区”公众号查看

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的更改选项:

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连接的远端对等体。

继续阅读