BGP(3):BGP 的路径优选

10.3 BGP 的路径优选

BGP Speaker 在收到它的邻居发送过来的路由通告(BGP Update 报文)时,除了要泛洪出去(如果需要的话),还会根据通告中的路由信息处理自己的 BGP 路由表。

对于通告信息中的“Withdrawn Routes”信息,其处理相对简单,根据“Withdrawn Routes”中的二元组“<Length, Prefix>”列表,逐个删除 BGP 路由表中的对应的路由表项即可。

对于通告信息中的 NLRI(Network Layer Reachability Information),如果对应的目的地只有1条路径,那也简单,把相应的路由信息安装进 BGP 路由表即可。

但是,如果到达同一个目的地,存在多条路径,该将哪条路径所对应的路由信息安装进 BGP 路由表呢?或者说,BGP 的最优路径规则是什么呢?

BGP 的最优路径规则,简单地说,就是比较候选路径上的相关属性及这些属性的优先级,以选出相对最优的路径。

下面我们讲述这些属性的比较规则。

  • 第1优先级:Local_Perf

BGP 选择最优路径,首先考虑是域内的最优。也就是说,两条路径,如果其中一条是域内最优的,那么 BGP 就选这条了,再也不会管整体的所谓最短路径(最小 AS 跳数)。

而 BGP 所考虑的域内最优,是基于属性 Local_Pref,如图10-18所示。

 

图10-18 基于 Local_Pref 选择最优路径

图10-18中,R1 到达 8.8.8.0/24 网段的路由有2个。

(1)A 路径:AS1(R1-R2)-AS2-AS3-AS4-AS5-AS6

(2)B 路径:AS1(R1-R3)-AS7-AS6

显然,如果如果比较 AS_Path,则 B 路径比 A 路径要优的多(因为路径短)。但是 BGP 优选路径的第1优先级规则,不是最短 AS_Path,而是 Local_Pref。

这有点出人意料,却也在情理之中。毕竟路径长度影响的是时延,而本地优先级影响的则是带宽。在绝大部分场景下,带宽的优先级要大于时延。

说明:

(1)并不是说 Local_Pref 一定要与接口带宽挂钩,只是说,绝大部分场景下,接口带宽与 Local_Pref 有着强相关性

(2)AS_Path 最短,并不意味着实际的物理距离最短,只不过两者也有着一定的强相关性罢了

  • 第2优先级:AS_Path

最短路径终于粉墨登场!如果多条候选路径的 Local_Path 的值是一样的,那么 BGP第2优先级选路的指标就是“最短路径”。这个我们不做过多解释,因为这个符合直观感受。BGP 所谓的最短路径,就是看 AS_Path 里面的 AS 数量(经过了几个 AS),如图10-19所示。 

 

图10-19 基于 AS_Path 选择最优路径

图10-19中,由于第1优先级的 Local_Perf 没有分出“胜负”,所以基于第2优先级的 AS_Path“一决雌雄”,结果 B 路径“AS1(R1-R3)-AS7-AS6”胜出。

需要说明一点,既然是最短路径,为什么选择最短的 AS 跳数(AS_Path),而不是更直接更彻底的路由器(网关)跳数?答案是做不到!

在 BGP 当前协议中,直接与路径长短属性相关的就是 AS_Path,间接相关的,或者说仅有一点点关系的是 Next_Hop。AS_Path 顾名思义,只有 AS 跳数,而没有网关跳数。而 Next_Hop,顾名思义,只有1跳而已。要想通过 Next_Hop,推导出到达目的地到底要经过多少跳,这是 BGP 协议无法承担的重任。

  • 第3优先级:MED

BGP 选择最优路径的第3优先级就是 MED,如图10-20所示。 

 

图10-20 基于 MED 选择最优路径

图10-20中 R1 到达 8.8.8.0/24 网段的路径有2个。

(1)A 路径:R1(AS1)-R2(AS2)-R4(AS3)

(2)B 路径:R1(AS1)-R3(AS2)-R4(AS3)

两个条路径的 Local_Pref、AS_Path 两个指标都一样,按照第3个指标 MED(谁小谁优先),第1条路径“R1(AS1)-R2(AS2)-R4(AS3)”胜出。

不过 MED 有个特点,那就是“只有多条路径到达同一个 AS,MED 才有意义”,如图10-21所示。 

图10-21 目的地是不同 AS 的 MED

图10-21中 R1 到达 8.8.8.0/24 网段的路径有2个。

(1)A 路径:R1(AS1)-R2(AS2)-R4(AS3)

(2)B 路径:R1(AS1)-R3(AS3)-R4(AS3)

图10-21与图10-20最大的不同是:前者的“R2、R3”分属不同的 AS,而后者的“R2、R3”属于同1个 AS。这就造成了图10-21中,无法根据 MED 来选择哪条路径更优。

当然,即使是属于同1个 AS,如果多条候选路径的 MED 相同(Local_Perf、AS_Path 这两个参数的值也得相同),也无法选出哪条路径最优。

此时,只能依赖第4个参数。

  • 第4优先级:路由来源

BGP 选择最优路径所依据的前3个参数(Local_Perf、AS_Path、MED)都是路径的属性,第4个参数,则与路径属性无关,而与路由的来源有关。所谓路由来源,就是1个路由器所收到的路由信息,是通过 eBGP 路由通告还是 iBGP 路由通告。

BGP 的选路规则是:eBGP 的路由优于 iBGP 的路由,如图10-22所示。

   

 

图10-22 基于路由来源选择最优路径

图10-22中,R1、R2 分别与 R4 组建了 eBGP peer,R1 与 R2 组建了 iBGP peer。R1 通过 eBGP 和 iBGP 学习到了2条路由。

(1)路由 A(路由来源 eBGP):Dst = 8.8.8.0/24,Next_Hop = R4

(2)路由 B(路由来源 iBGP):Dst = 8.8.8.0/24,Next_Hop = R4

表面上看这两2路由没有任何区别,仅仅是来源不同。但是两条路由所经历的的网关跳数,其实是不一样的。

(1)路由 A 的跳数是1跳(R1-R4)

(2)路由 B 的跳数是3跳(R1-R3-R2-R4)

实际上,到达 AS 域外目的地,iBGP 学习到的路由,至少要比 eBGP 学习到的路由多1跳。所以,BGP 规定:(在其他指标都相同的情况下)eBGP 学习到的路由优于 iBGP 学习到的路由。

说明:

到目前为止,经过了4个参数的比较(Local_Perf、AS_Path、MED、路由来源),如果所选择的“最优”路径还是不止1条,那么就有2种作法。

(1)放弃比较,多条路径负载分担

(2)依据其他参数,继续比较下去

如果选择“放弃比较”,那需要 BGP 开启“负载分担”特性。但是一般来说,BGP 的“负载分担”特性都没有打开,所以绝大部分情况下,BGP 还得继续比较下去,一定要选出1个最优路径。

  • 第5优先级:路由学习时间

所谓路由学习时间,实际上指的是路由器接收 BGP 路由通告的时间。路由学习时间也不是 BGP 的路径属性,而是 BGP 程序本身记录下来的——什么时间收到了路由通告,就记录下来,作为相应路由的学习时间,如图10-23所示。 

图10-23 基于路由学习时间选择最优路径

图10-23中,如果前几个比较参数(Local_Perf、AS_Path、MED、路由来源)都相同,BGP 则会比较路由学习时间。我们假设 t1 < t2(即 t1 比 t2 更早),那么 BGP 则会选择路径“R1-R2-R4”。

BGP 选择“学习时间更早”的路由,是考虑到路由翻转。由于接口不稳定(一会 up,一会 down)等原因,BGP 的路由,就会出现路由翻转:一会增加这条路由,一会取消这条路由。而选择一个学习时间最长的路由,则这条路由出现路由翻转的概率就相对最小。

  • 第6优先级:Cluster_List

Cluster_List、Cluster ID,我们会放到10.4节再详细讲述。不过这2个概念与 BGP 最优路径选择相关,所以我们这里提前介绍一点相关的内容。

我们可以把 Cluster_List 类比为“AS_Path”,把 Cluster ID 类比为“AS ID”,这样的话,就可以理解 BGP 基于 Cluster_List 的最优路径选择规则:Cluster_List 最短者当选,所谓最短,就是 Cluster_List 里所包含的 Cluster ID 最少。

这个规则只有在 iBGP 选路时才会用到,因为 Cluster_List、Cluster ID 只与 iBGP 相关。

  • 第7优先级:下一跳的 Router ID

如果说以上参数(Local_Perf、AS_Path、MED、路由来源、路由学习时间、Cluster_ID)还是“讲道理”的话(毕竟参数值的不同,可以代表路径的优劣),那么接下来的参数跟“闭着眼随便选1个”也没有本质区别,因为这个参数是 Router ID。

BGP 的最优选路规则是:如果“Local_Perf、AS_Path、MED、路由来源、路由学习时间”这些参数的值都相同,那么下一跳的 Router ID 最小者,其所在路径为最优路径。如图10-24所示。 

 

图10-24 基于下一跳的 Router ID 选择最优路径

图10-24中,由于 R2 的 Router ID 比 R3 的小,所以 BGP 会选择路径“R1-R2-R4”。

说明:BGP的Router ID,BGP 在启用BGP协议的时候会自动赋值 Router ID,其赋值规则有2个。

(1)所有 loopback 地址中最大者为 Router ID

(2) 如果没有 loopback 接口,则所有处于 up 状态的物理接口地址最大者为 Router ID

  • 第8优先级:下一跳的 IP

“下一跳的接口 IP”这个参数,也是跟“闭着眼随便选1个”没有本质区别,其应用场景如图10-25所示。 

 

图10-25 基于下一跳 IP 选择最优路径

图10-25所描述的场景是多个接口之间创建了多条3层连接,而且其他参数(Local_Perf、AS_Path、MED、路由来源、路由学习时间、下一跳的 Router ID)都相同,此时 BGP 就根据下一跳 IP 选择最优路径,下一跳 IP 最小者当选。

对于图10-25来说,其最优路径是“R1.inf1-R2.inf1-R4”。

需要说明的是,到此为止,BGP 可能能选出1条最优路径,除非路由器接口 IP 重复。不过 IP 重复,这种异常情况,不是 BGP“最优路径规则”所要考虑的范围。

 

  • 小结

BGP 的最优路径选择规则,是将一系列的参数按照优先级排列,逐个比较,直至选出最优路径。

这一系列的参数,有2种分类方法。

(1)一种是按照参数的归属分类

(1.1)Local_Perf、AS_Path、MED、Cluster_List,属于 BGP 的路径属性

(1.2)路由来源、路由学习时间、下一跳的 Router ID、下一跳的 IP,则不属于 BGP 的路径属性

 

(2)另一种是按照是否“讲道理”来分类

(2.1)Local_Perf、AS_Path、MED、Cluster_List、路由来源、路由学习时间,这些参数是“讲道理”的,因为通过参数的比较,可以评估路径的优劣

(2.2)下一跳的 Router ID、下一跳的 IP,这2个参数是“不讲道理”的,根据它们无法评估路径的优劣。只是由于必须要选出1个“最优”路径,才不得已让这些参数“上马”。实际上它们与“闭着眼随便选1个”没有本质区别。

为什么一定要选1个“最优”路径呢?这是因为 BGP 在大部分场景下没有开启“负载分担”的特性,此时,如果到达同一个目的地存在多条路径,那 BGP 会一脸茫然。

如果开启了“负载分担”,那么 BGP 的参数是到“MED”为止。也就是说,如果根据 MED 选出了多条“最优”路径,那 BGP 也不会再比较下去,而是将这多条路径基于“负载分担”方案,当作“1”条“最优”路径。

BGP 的选路参数,对于 eBGP 和 iBGP 来说,绝大部分是相同的,只有1个例外,那就是“Cluster_List”。因为 Cluster_List 只是 iBGP 里面的一个概念。

我们将 BGP 的最优路径选择规则,总结为图10-26所示。 

 

图10-26 BGP 最优路径选择规则

我们继续将 BGP 最优路径选择规则总结为表10-4所示。

表10-4  BGP 最优路径选择规则

参数优先级

参数

参数比较规则

1

Local_Pref

Local_Pref 最大者当选

2

AS_Path

AS_Path 中包含 AS 最少者当选

3

MED

MED 最小者当选

4

路由来源

路由来源于 eBGP 者当选

5

Cluster_List

Cluster_List 中包含 Cluster_ID 最少者当选

6

路由学习时间

路由学习时间靠前者当选

7

下一跳 Router ID

下一跳 Router ID 最小者当选

8

下一跳 IP

下一跳 IP 最小者当选

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值