在cisco路由上,BGP选择最佳路由的步骤如下:
一般认为BGP路由决策有如下11步:
第1步首选权重最高的路由(权重是一种cisco专用的属性,只用于当前路由器)。
第2步如果权重相同,则选择本地优先级最高的路由(本地优先级用于AS内部)。
第3步如果本地优先级相同,则选择当前路由器通告的路由(在bgp表中,当前路由器通告的路由的一下跳为0.0.0.0)。
第4步如果没有当前路由器通告的路由,则选择AS路径最短的路由。
第5步如果AS路径长度相同,则选择源头编码最小的路径。(IGP<EGP<不完全)。
第6步如果源码相同,则选择MED最小的路径(MED将在自主系统之间交换)。除非配置了bpp always-compare-med,否则仅当所有被考虑的路由的邻接AS都相同时,才比较MED.
备注:Internet工程任务小组(IETF)最近就bgp MED做出决定,对于没有MED的路由将其MED值设置为无穷大,这使得这种路由被选中的可能性最小。运行cisco ios软件的bgp路由器默认为,对于没有MED的路由,将其MED值视为0,这使得这种路由被选中的可能性最大。要配置路由器,使之遵循IETF标准,可使用路由器配置命令bgp bestpath med missing-as-worst。
第7步如果MED相同,则外部路径(EBGP)优先于内部路径(IBGP)。
第8步如果同步被关闭,使得只有内部路径,则选择经过最近的IGP邻居的路径。
这里有个插曲,如果BGP在开启负载均衡的情况下,前8步,还无法比较出最优的路径,则进行负载,默认没有开启,则直接比较一下步。
第9步对于EBGP路径,选择最老的路由,以最大限度地降低路由翻滚的影响。
第10步首选邻居BGP路由器ID最小的路由。
这里也有个插曲,如果BGP中存在RR,选择cluster-list最短的,如同AS_PATH属性。
第11步如果BGP路由器ID相同,则选择邻居IP地址最小的路由。
只有最佳路由被加入到路由表中,并被传播给BGP邻居。
简单解释
第1步查看权重,对于非当前路由器通告的路由,权重默认被设置为0,(cisco)。
第2步比较本地优先级,对于所有的网络,本地优先级都默认为100。仅当网络管理员将权重或本地优先级设置为非默认值时,这两步才有用。
第3步查看当前AS中的网络。路由器优先选择自己加入到BGP表中的路由,而不是从其他BGP路由器那里收到的路由。
第4步选择经过的自主系统数最少的路径,这是BGP选择路径时使用得最多的准则。如果管理员不想使用经过的自主系统数最小的路径,则应操纵权重或优先级,以改变bgp选中的出站路径。
第5步查看路由是如何进入bgp的。进入方式通常是通过network命令(源头编码为i)或通过重分发(源头编码为?)。
第6步查看MED,以确定邻居AS希望将分组发送到哪里。默认情况下,Cisco IOS将MED设置为0。因此,除非邻居AS的管理员使用MED来操纵路径,否则MED不影响路径选择。
如果多条路径经过的自主系统数相同,则最常用的决策步骤是第7步:从EBGP邻居那里获悉的路由优先于IBGP邻居那里获悉的路径。AS中的路由器更愿意使用ISP链路前往某个网络,而不是使用内部链路来前往位于AS另一边的IBGP邻居。
如果AS路径相同,且路由器没有可用于前往目标网络的EBGP邻居(只有IBGP邻居),则通过最快的路径前往最近的出口是合理的。第8步查找最近的IBGP邻居,最近的含义取决于IGP度量值。
这里有个插曲,如果BGP在开启负载均衡的情况下,前8步,还无法比较出最优的路径,则进行负载,默认没有开启,则直接比较一下步。
如果AS路径相同,且所有IBGP邻居的成本相同或所有可用于前往该网络的邻居都是EBGP邻居,则选择最老的路径(第9步)。与EBGP邻居之间的会话不太可能是同时建立的,通常有一个会话先于其他会话建立;经由最老的邻居的路径被视为最稳定的,因为该邻居正常运行的时间最长。
如果所有上述条件都相同,则选择这样的路径:第10步,经由BGP路由器ID最小的邻居。
这里还有个插曲,如果有RR的存在,则选择cluster-list最短的。
如果BGP路由器ID也相同(如经由同一台BGP路由器),则执行第11步:选择邻居IP地址最小的路由。