今天看到一条关于BGP水平分割问题的讨论。
主要症结在这个地方:
同样是水平分割,在BGP和IGP中都有;那么:
IGP的水平分割: 从某个接口上学习来的路由信息将不再从该接口上通告出去。就是从那个口进来的不再从这个口出去。
BGP的水平分割: 从任何IBGP邻居学来的路由信息都不再向任何IBGP路由器转发。说白了就是死胡同,不再管了。
于是,有人就问了,既然同样是水平分割,为什么标准不同?
IGP还能向其他的路由器发送更新,难道是BGP多虑了?如果BGP是对的,那么IGP这样做就不会引起环路吗?
问题答案:
会!IGP这样做依然存在环路!只不过,这个环路是大网络的环路,所以IGP采用其他方式解决这个问题,比如RIP的16跳(不然如果一个水平分割都全部搞定,RIP也不需要16跳这个设置了);原因是IGP的水平分割只是防止区域网络(比如相邻的路由器)这种小范围内的问题,如果网络大了,互联复杂,依旧可能产生环路。
而这样的情况对于BGP这种携带了如此核心和大规模路由的协议来说是无法容忍的。这点不需要多做解释了。
因此BGP采用如此残酷版本的水平分割自有他的道理。
我想,很多教材都没有很好的解释这一点,这将导致很多初学者混淆水平分割的概念。
换句话说,BGP的这个分割是不是水平分割,字面上也是值得商榷的。