1.根本原因
导致路由收敛环路的根本原因是:同前缀的不同路径,比较顺序不同,最佳路径选择的结果不同——存在路径比较环路
例如Net A有三条路径a、b、c,如果存在如下关系,则可能会发生路由收敛环路
a > b,b > c,c > a
而如果不满足上述条件,三条路径相互比较,一定能够比较出优先级序列,例如
a > b,c > b,a > c,则有a > c > b
在此情况下,由于选路优先级明确,即便在收敛过程中可能会出现浮动,但是最终一定能够收敛到预测的结果
在BGP中,具体表现为AS_PATH中最近的AS不一致时,不比较MED;而AS_PATH中最近的AS相同时比较MED
当有多条路径时,可能导致某些路径比较MED值,而某些路径比较其它选路参数
2.收敛环路现象及解决办法
2.1 现象
①BGP Table Version值不断增加
and
②BGP路径不断切换,路径数量也会发生浮动
2.2 解决办法
①配置deterministic-med,防止路由比较环路的产生——推荐做法
②always-compare-med
③将MED值置为0(可以配合community使用)
3.iBGP全互联环境下的收敛环路
如上图所示,联盟内某个AS 4台设备分别收到4条相同前缀的更新,其优先情况为R1> R2 > R3,R4 > R1,R2 > R4,R3 > R4
3.1 初始情况
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
- |
100 |
1 |
10.10.10.10 |
其它设备同理,这里不一一列出,红色路径表示当前选择的最佳路径
3.2 4台设备相互发送更新后,其BGP转发表分别如下
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R2 |
100 |
2 |
2.2.2.2 |
2 |
R4 |
200 |
1 |
4.4.4.4 |
3 |
R3 |
100 |
3 |
3.3.3.3 |
4 |
- |
100 |
1 |
10.10.10.10 |
R1上选路未发生改变,下一步本地无操作
R2:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R3 |
100 |
3 |
3.3.3.3 |
2 |
R4 |
200 |
1 |
4.4.4.4 |
3 |
R1 |
100 |
1 |
10.10.10.10 |
4 |
- |
100 |
2 |
2.2.2.2 |
此时R2上的选路发生改变,R2下一步将回收向R1、R3、R4通告的更新
R3:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R2 |
100 |
2 |
2.2.2.2 |
2 |
R4 |
200 |
1 |
4.4.4.4 |
3 |
R1 |
100 |
1 |
10.10.10.10 |
4 |
- |
100 |
3 |
3.3.3.3 |
此时R3上的选路发生改变,R2下一步将回收向R1、R2、R4通告的更新
R4:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R2 |
100 |
2 |
2.2.2.2 |
2 |
R3 |
100 |
3 |
3.3.3.3 |
3 |
R1 |
100 |
1 |
10.10.10.10 |
4 |
- |
200 |
1 |
4.4.4.4 |
R4上选路未发生改变,下一步本地无操作
3.3 R2、R3的更新被回收
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
- |
100 |
1 |
10.10.10.10 |
R1上的最佳路径发生改变,R1将回收通告的更新
R2:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
R1 |
100 |
1 |
10.10.10.10 |
3 |
- |
100 |
2 |
2.2.2.2 |
R2上最佳路径发生改变,R2将通告更新
R3:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
R1 |
100 |
1 |
10.10.10.10 |
3 |
- |
100 |
3 |
3.3.3.3 |
R4:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R1 |
100 |
1 |
10.10.10.10 |
2 |
- |
200 |
1 |
4.4.4.4 |
R4上最佳路径未发生改变,下一步无操作
3.4 R1回收更新,R2、R3通告更新
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R3 |
100 |
3 |
3.3.3.3 |
2 |
R2 |
100 |
2 |
2.2.2.2 |
3 |
R4 |
200 |
1 |
4.4.4.4 |
4 |
- |
100 |
1 |
10.10.10.10 |
R1上的最佳路径发生改变,R1将通告更新
R2:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R3 |
100 |
3 |
3.3.3.3 |
2 |
R4 |
200 |
1 |
4.4.4.4 |
3 |
- |
100 |
2 |
2.2.2.2 |
R2上最佳路径未发生改变
R3:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R2 |
100 |
2 |
2.2.2.2 |
2 |
R4 |
200 |
1 |
4.4.4.4 |
3 |
- |
100 |
3 |
3.3.3.3 |
R3上最佳路径发生改变,R3将回收通告的更新
R4:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R3 |
100 |
3 |
3.3.3.3 |
2 |
R2 |
100 |
2 |
2.2.2.2 |
3 |
- |
200 |
1 |
3.3.3.3 |
R4上最佳路径发生改变,R4将回收通告的更新
3.5 R1通告更新,R3、R4回收更新
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R2 |
100 |
2 |
2.2.2.2 |
2 |
- |
100 |
1 |
10.10.10.10 |
R1上最佳路径未改变
R2:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R1 |
100 |
1 |
10.10.10.10 |
2 |
- |
100 |
2 |
2.2.2.2 |
R2上最佳路径发生改变,将回收更新
R3:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R1 |
100 |
1 |
10.10.10.10 |
2 |
R2 |
100 |
2 |
2.2.2.2 |
3 |
- |
100 |
3 |
3.3.3.3 |
R3上最佳路径发生改变,下一步无操作
R4:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R1 |
100 |
1 |
10.10.10.10 |
2 |
R2 |
100 |
2 |
2.2.2.2 |
3 |
- |
200 |
1 |
3.3.3.3 |
R4上最佳路径发生改变,将通告更新
3.6 R2回收更新,R4通告更新
R1:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
- |
100 |
1 |
10.10.10.10 |
R2:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
R1 |
100 |
1 |
10.10.10.10 |
3 |
- |
100 |
2 |
2.2.2.2 |
R3:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R4 |
200 |
1 |
4.4.4.4 |
2 |
R1 |
100 |
1 |
10.10.10.10 |
3 |
- |
100 |
3 |
3.3.3.3 |
R4:
Path |
Next Hop |
AS_PATH |
MED |
RID |
1 |
R1 |
100 |
1 |
10.10.10.10 |
2 |
- |
200 |
1 |
4.4.4.4 |
此时情况与(3)完全相同,收敛环路发生
3.7 小结
iBGP全互联网络存在路由收敛环路的风险,但是其发生概率相对较小,尤其是在非联盟环境中,由于MED之后将比较iBGP与eBGP通告的更新(eBGP由于iBGP),当AS_PATH不同时,这往往会导致设备优选eBGP通告的更新,进而防止收敛环路发生
而在联盟内由于联盟内iBGP与联盟内eBGP优先级相同,此时路由会收到下一跳IGPmetric或RID的影响,导致收敛环路发生的概率上升
4.RR环境下clients之间的收敛环路
如上图所示
R2收到更新为Net A,AS_PATH 200 400,MED 10,R2的RID为22.22.22.22
R3收到更新为Net A,AS_PATH 300 400,MED 5,R3的RID为33.33.33.33
R4收到更新为Net A,AS_PATH 300 400,MED 6,R4的RID为4.4.4.4
三条更新如果直接比较有如下关系:
R2 > R3,R3 >R4,R4 > R2,存在路由比较环路
在该环境下,R2、R3、R4分别将更新通告给R1,R1选择最优路径进行通告,依次下去,将产生路由收敛环路,这里不再详细分析
与iBGP全互联相比,这里区别在于:
①选路由中间设备RR完成
②RR上当MED无法比较出最优路径时,往往比较下一跳IGP开销或RID,而不存在eBGP由于iBGP的比较关系
5.RR网络的收敛环路
如上图所示
R2收到更新为Net A,AS_PATH 200 400,MED 10
R3收到更新为Net A,AS_PATH 300 400,MED 5
R4收到更新为Net A,AS_PATH 300 400,MED 6
R1上如果同时收到3条更新,IGP metric分别为
to R2:15
to R3:20
to R4:11
R8上入股同时收到3条更新,IGP metric分别为
to R2:20
to R3:25
to R4:6
三条更新如果在R1或R8上直接比较有如下关系:
R2 > R3,R3 >R4,R4 > R2,存在路由比较环路
在该环境下同样存在路由收敛环路,这里不再详细分析
6.Confederation环境下的路由收敛环路
如上图所示,R5、R6通告的更新内容与之前几个案例中相同,联盟内同一子AS中建立全互联iBGP会话,由于联盟内的子AS其长度为0,因此实际上该环境与RR网络中是相同的(R1在R2、R3中只选择最优的路径通告给R8,整体上讲,两个子系统都只将本地选择的最佳路径通告给另一个子系统),这里同样不再做详细分析
注意:
在上例与RR网络的收敛案例中,通过修改IGP metric确实也可以解决出现的问题,但是笔者认为,为了解决根本问题,还是应当配置deterministric-med这样的命令,一方面保证选路的合理性(相比较于always-compare-med),另一方面确保网络环境变化时的适用性