为什么不用IGP替代BGP?

  1. IGP的能力限制

    IGP处理路由的条目有限,而目前internet上核心路由器的路由表已经超过10万条。假如没有IBGP,那么这些路由只能采取重分发的方式直接导入到IGP中,

    这样做的缺点很明显:
    第一,IGP协议的作者并没有打算让IGP来处理如此大量的路由,IGP本身也无法处理这样大的路由数量;

    第二,如果非要让IGP来处理,那么根据IGP的处理原则,假如这10万路由中任何一条路由发生变化,那么运行IGP的路由器就不得不重新计算路由,更为严重的是,假如其中某一条路由出现路由抖动的情况,例如端口反复UP/DOWN,这会导致所有的IGP路由器每时每刻都不得不把10万条路由重新计算一遍,这种计算量对于绝大多数路由器来说是无法负担的(链路状态路由协议的泛洪机制)。

    另外对于运行RIP V1的路由器来说,10万条路由的定期更新,这根本就是无法接受的事情(RIP的跳数限制也不现实),除去带宽占用率不谈,我想,也只有少量高端设备能够有这样的性能吧。例如:AS100----AS200---AS300,假定AS100/200/300各有100台路由器,而AS100中有1W条路由要传递要AS300中,而AS200的路由器不需要学习AS100的路由。如果没有IBGP的话,那么这1W条路由都必须被重分发到AS200的IGP中去,这样的话,相当于AS200中所有的100台路由器都增加了1W条路由。如果利用IBGP的话,那么AS200中只有运行IBGP的路由器会学习到这1W条路由,其它运行IGP的路由器都不会学习到这1W条路由。并且由于BGP的路由控制能力大大强于IGP的路由控制能力,因此运行IBGP的路由器比运行IGP的路由器能更好的对这1W条路由做一些路由策略的处理,从而保证整个AS内部的路由器学习到的路由数目可以控制在可接受的范围之内(IGP为保持链路状态数据一致,不能对import方向做控制)。

  2. 路由环路的问题。

    BGP是靠路由属性来防止路由环路的,例如AS_PATH属性,假如说没有IBGP协议,那么当所有BGP路由重分发到IGP中后,路由属性必然丢失,这就破坏了BGP的路由环路防止机制,产生了路由环路的隐患。

  3. 补充:IGP对于路由进入没有一个流量控制功能,如果遇到大量的外部路由注入,那么会产生过载。而BGP是基于TCP,可以很好的进行流控。

为什么不用BGP替代IGP?

  1. IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找。
  2. BGP协议本身实际上并不发现路由,BGP将路由发现的工作全部移交给了IGP协议,它本身着重于路由的控制。因此,如果没有IGP,那么BGP也就毫无用处了。
  3. 补充:因为BGP相对缓慢的keep-alive timer,检测到邻居从UP到DOWN,要接近2分钟。而ISIS则只需要10-30s左右

EBGP与IBGP的区别:

  1. 路由环路的避免措施不一样,IBGP强制规定ibgp speaker不允许把从一个ibgp邻居学习到的前缀传递给其它ibgp邻居,因此IBGP要求逻辑全连接。EBGP没有这样的要求,EBGP对路由环路的避免是通过AS_PATH属性来实现的。
  2. 使用的BGP属性不同,例如IBGP可以传递LOCAL_PREF(本地优先属性),而EBGP不行。
  3. IBGP有同步的要求,而EBGP没有同步的要求
  4. IBGP不需要IBGP邻居之间有物理连接,只需要逻辑连接即可,而EBGP下一般情况下都要求EBGP邻居之间存在物理连接。

来自誉天教育论坛 docomo

Leo.lu整理补充