BGP是一个路径矢量路由协议,它的工作就是在自主系统间交换路由信息,以便发现访问互联网某处数据的最有效路径。如何选择最佳路径进行路由?思科无边界网络为我们揭示了BGP的14条选路原则:

BGP的选路原则:前提(路由的下一跳可达、关闭同步、路由没有被惩罚、前缀没有被入境路由策略拒绝),具体原则如下:

        1:weight先比较管理权重(越大越优先),这个参数本地有效。虽然Weight属性是Cisco私有的,但是很多厂商也是内置该属性(但无法显示及修改),这样就保证了本地始发的路由是最优先的,因为本地始发路由的Weight为32768,从其他BGP Peer学习过来的路由的Weight为0.

        2:local-pref本地首选项(越大越优先),这个参数在本AS内传递。Local Preference属性只能在IBGP Peer之间传递,如果在EBGP Peer之间收到的路由的路径属性中携带了Local Preference,则会触发Notifacation报文,造成会话中断。

        3:路由器本地始发的路径优先。本地始发的路径特点是next-hop为0.0.0.0,weight为32768。可以使用不同的方式比如network或redistribute等,那么这些方式之间是存在优先顺序的原则:network>redistribute>aggregate,但该原则是不会作为BGP路由选路策略的。

        4:具有最短AS-path路径(就是AS-PATH中AS最少的优先)的路由优先。但是可以配置bgp bestpath as-path ignore来忽略这一步。注意:在做聚合路由时,使用as-set后产生的AS-Path列表中的{}里的AS号长度只算一个AS号的长度;而在联盟内的AS-Path列表中的()的AS号长度不做计算依据!不同方向的route-map对于插入的AS号的位置是不同的。

         5:比较origin属性,具有最低origin源码。三种不同的Origin属性的优先顺序:IGP>EGP>incomplete,Origin属性会一直在BGP路由中携带。很少使用设置Origin属性作为BGP路由选路策略。

          6:评估MED(MED值最小的路径胜出)。默认情况下,只比较来自同一AS的BGP路由的MED值(就是AS-sequence中第一个AS相同才比较)。命令bgp always-compare-med对于所有路径都比较MED,不考虑他们是否来自同一个AS。如果使用了这个选项要在AS内都这么配置(避免路由选择环路)。(任何开头为as-confed-sequence的都被忽略比较MED值,如果配置了bgp always-compare-med那么会进行比较)。

           MED备注:Cisco建议在所有新网络部署中均启用bgp deterministic-med命令。对于现有的网络,必须同时在所有路由器上部署此命令,或者逐步部署此命令,但要注意避免可能出现的内部 BGP (iBGP) 路由环路。当BGP收到多个通往特定目标的路由时,它会按收到路由的相反顺序列出它们(从最新到最旧).然后,BGP 按以下顺序成对比较路由:从最新的条目开始,并向最旧的条目移动(从列表顶部开始,向下移动)。 例如,将 entry1 与 entry2 进行比较。 随后,将这两个中的较好者与 entry3 进行比较,依此类推。当启用bgp deterministic-med命令时,会打乱这个顺序将来自同一个自治系统的路由分组到一起,然后比较每一组的最佳条目。Show ip bgp 可以看出效果。

            如果激活了bgp bestpath med confed命令只有AS-Confed-sequence的路径才比较MED值。如果一条路径包含了任何外部自制系统,那么就不进行比较。

         7:EBGP优于IBGP;EBGP优于联邦EBGP(联邦eBGP和联邦iBGP不具有可比性,不比较。因为联邦ebgp和联邦ibgp都被看做内部路径没有差别)。如果都是EBGP对等体收到的条目或者都是从IBGP对等体收到的条目或者分别从联邦EBGP和联邦IBGP对等体收到的条目则继续向下一步进行。