前面一章我们学习了BGP的路由产生方式以及查看路由表信息。BGP自身并不会发现并计算产生路由。BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体。那BGP向邻居通告路由时遵循哪些原则呢?
BGP通告遵循以下原则:
-
只发布最优且有效路由。 -
从EBGP对等体获取的路由,会发布给所有对等体。 -
从IBGP对等体获取的路由,不会发送给IBGP对等体。 -
BGP同步原则
一、只发布最优且有效(即下一跳地址可达)路由
在BGP路由表中同时存在以下两个标志的路由为最优、有效:
-
* : 代表有效 -
> : 代表最优
因为BGP是将IGP路由导入BGP,就有可能在AS内部通过OSPF等多个路径学习到通一条路由,但是只会将最优路由通告
二、从EBGP对等体获取的路由,会发布给所有对等体
从EBGP对等体获取的BGP路由,会发布给所有EBGP、IBGP对等体。
三、从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体。
第三条原则:从IBGP对等体获取的BGP路由,不会再发送给其他IBGP对等体。该条原则也被称为IBGP水平分割。这条是为了防止IBGP邻居互相通告导致产生环路。
由于IBGP只能传递一跳路由,因此可以通过IBGP全互联,AS内都通过IGP建立IBGP邻居,可以非直连,一跳到达即可。还需要配置IBGP本地出口指定到达目标路由通过自身转发。
四、BGP同步原则
当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,该条规则也被称为BGP同步原则。
BGP路由黑洞,在AS内部通过IBGP建立邻居可以非直连,中间路由无法学习到目标网段,虽然基于TCP可以建立邻居但是数据包需要从物理链路传输,而且路由器基于路由表转发,没有路由条目则会丢弃,因此产生路由黑洞。
解决方法:
-
IGP与BGP同步(已经淘汰) -
AS内部建立IBGP全互联都学习到BGP路由。 -
使用MPLS标签隧道转发。
综合来说如果是AS内部有多出口可以建立IBGP全互联来实现。
总结:BGP路由只通告有效最优路由给邻居。EBGP邻居会发送路由给所有邻居,因为可能产生环路而不会再发送给IBGP邻居,如果AS内部有多出口这种可以建立IBGP全互联。
如果对文章感兴趣欢迎微信搜索公众号:不喜欢热闹的孩子
本文由 mdnice 多平台发布