如图,R1通过12.1.1.1和R2的12.1.1.2建立ebgp关系,在R1上import-route direct后,在R2上查看bgp路由,为什么“12.1.1.0”这条路由是不可用呢(路由条目前边没有*)
Q1: R2通过哪几个途经学习到12.1.1.0/24?
2个。
Q2: 哪2个?
第1个:直连路由(Directed Route),配置R2 G0/0/0接口IP = 12.1.1.2/24由系统自动创建的。
12.1.1.0/24----G0/0/0 ---- Directed Route (AD =0)
第2个:BGP路由,通过eBGP进程学习到的。
12.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =20)
R2负责管理路由表传达室老头,看到上面2个条目,毫不犹豫将
12.1.1.0/24----G0/0/0 ---- Directed Route (AD =0)
放入路由表,用于packet的路由转发。
Q3: 为什么选择1而不是2(BGP)呢?
很简单,因为1的AD = 0 <2的AD=20。
谁的AD(Administrative Distance)值小,谁优先。这也是题主关心的为何2不可用的原因。
Q4: 为何其它4条路由进入R2路由表,并可用?
10.1.0.0/24----next-hop 12.1.1.1 ---- eBGP (AD =20)
10.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =20)
10.1.2.0/24----next-hop 12.1.1.1 ---- eBGP (AD =20)
10.1.3.0/24----next-hop 12.1.1.1 ---- eBGP (AD =20)
除了BGP这唯一的途经,还有其它途经学习到它们吧?
没有了。
既然没有了,它们就直接进入路由表,并处于可用状态。
Q5: 如果将直连路由的AD从默认的0修改成20,eBGP从默认的20改成0,会发生什么?
12.1.1.0/24----G0/0/0 ---- Directed Route (AD =20)
12.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
接下来会发生意想不到的灾难。
很显然,
12.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
进入全局路由表。
但是,不要高兴太早。
BGP需要周期性60秒发送hello,当BGP需要发送hello报文时,需要查询peer = 12.1.1.1路由的。
传达室老头拿着next-hop = 12.1.1.1,在路由表查询,结果返回值如下:
12.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
哈哈,发生了loop,因为BGP 永远无法知道从哪一个接口离开。BGP的hello报文发不出去。 连续三次hello = 180秒发不出去,BGP进程就会因为timeout而Reset。
BGP进程Reset,会自动触发BGP路由的撤销(Withdraw)。
Q6: 此时R2路由表还有几条路由,它是谁?
唯一的一条:
12.1.1.0/24----G0/0/0 ---- Directed Route (AD =20)
其它的路由,都被BGP撤销了。
Q7: R2还可以建立eBGP?
可以的,只要Q6这一条路由即可。
Q8: R2的eBGP成功建立,此时路由表有几条路由?
10.1.0.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
10.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
10.1.2.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
10.1.3.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
12.1.1.0/24----next-hop 12.1.1.1 ---- eBGP (AD =0)
Q9: R2能通信吗?
不能。
Q10: R2的BGP会再次Reset吗?
会的。
每180秒周期性Flapping,这个网络是不可用的。
Q11: 采用默认的AD值,R2的BGP会Reset吗?
不会。
原文始发于微信公众号(车小胖谈网络):为什么BGP “12.1.1.0” 这条路由不可用?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论