为什么要使用BGP?

BGP是怎么来的?为什么要使用BGP?

路由协议的分类

分类 包含协议 说明
IGP:用于域(AS)内路由选择。 RIP 距离矢量协议,多用于小型网络。
ISIS 链路状态协议,多用于运营商网络。
OSPF 链路状态协议,多用于企业中大型网络。
EIGRP CISCO私有路由协议,增强型距离矢量协议。
EGP:用于域(AS)间路由选择。 EGP BGP的前身,目前已经不再使用。
BGP 事实上目前唯一的域间路由选择协议。

在这里插入图片描述

ISPA和ISPB通过一条高速链路连接在一起,两个ISP想把各自的路由通告给对方。

区域间为什么不使用RIP协议?

ISPA和ISPB的边界路由设备必须有一个同步的过程,也就是说当R1和R2在建立邻居的时候,需要把自己的整个路由表传输给对方。而传统的RIP协议是使用UDP作为自己的传输协议的,这个协议的最大缺点就是不可靠,不适合传输大量的数据。

缺省情况下,RIP协议的路由更新报文的发送间隔为30秒,这样如果ISPA和ISPB的路由表非常大(达到100000条),30秒得时间间隔尚且不够完成路由的通告,这样整个高速链路就完全为RIP通告服务,而不能转发其他数据了。

解决区域间的问题思路

路由传递,一些路由数据的丢失,造成这个问题的主要原因是RIP使用的基础是UDP,UDP的特点不可靠。那如果采用TCP,TCP的特点就在于可靠。这样就解决了路由数据丢失的问题。

其次,由于RIP每隔30秒就会同步一次路由表,在之前路由条数相对比较少的情况下,尚可应付。现在面对规模如此巨大的路由表,难免不可支撑。这个问题也好解决,那就取消每隔30秒全量同步路由的机制,改为增量通告规则:如果路由没有变化,则不发任何通告;如果是路由增加,则通告给对方增加的路由;如果是路由删除,则通告给对方删除的路由;如果是路由修改,则首先通告一个路由删除,再通告一个路由增加。

这就是BGP协议的由来。在RIP协议上加以优化和改进。

那么采用TCP是怎么设计的?

  • TCP面向连接,基于TCP的协议必然有一个先建立连接的过程。要先建立连接,两端的设备就必须先互相知道对方的IP地址,并且路由可达。那么是采用静态配置的方式,还是动态建立连接的方式呢?BGP采用的是静态配置的方式,只要双方指定的地址路由可达,就可以建立连接。这样做有以下好处:可以与对端设备用任何IP地址建立邻居,而不限于某个固定接口的IP。这样,我们就可以采用环回地址而非直连接口地址建立BGP邻居,两台设备之间如果主链路中断了,只要有备份链路存在,就可以把流量切换到备份链路上,保持邻居不断,增加了BGP连接的稳定性。可以跨越多台设备建立邻居。由于是静态配置的方式,不一定只有直连设备才能建立BGP邻居,只要双方指定的地址路由可达(通过IGP或者静态路由),就可以建立邻居,这在AS内部建立IBGP连接时,就不用所有设备之间都建立IBGP连接。IBGP会在本期后面内容中提及。

  • 知道对方IP地址后,BGP会通过发送open报文来进行邻居的建立。如果连接不能建立,说明对端设备状态不正常,于是会等待一段时间再进行连接的建立,这个过程一直重复,直到建立连接。

  • 连接建立后,就可以进行路由表的同步了,BGP通过发送update报文进行路由表的同步。

  • 路由表同步完成后,并不是马上拆除这个连接,因为随时有可能会有路由的更新或者删除,建立TCP连接是一个非常耗费资源的过程,所以BGP通过定期发送keepalive报文进行TCP连接的维持,这样就可以不用重新建立连接,立刻就可以进行路由更新。

  • 如果经过一段时间(一般是3个keepalive报文发送周期)还没有收到对方的keepalive报文时,我们就认为对方出现了问题,于是可以拆除该TCP连接,并且把从对方收到的路由全部删除。

举例说明

在这里插入图片描述

这是一个典型的BGP应用组网。图中,有3个AS,AS之间运行BGP协议。 AS65008域内运行OSPF协议。R1和R5上只运行BGP协议,R2和R4上运行OSPF和BGP协议,R3上只运行OSPF协议。这里先解释下EBGP和IBGP。

EBGP:运行于AS之间两台设备的BGP关系。如图中R1和R2、R4和R5

IBGP:运行于AS内部两台设备的BGP关系。如图中R2和R4

AS内部不是有IGP么,为什么还要建立IBGP关系?

这是因为如果R2和R4之间不建立BGP关系,那么如果R1要把路由传递给R5,经过AS65008时,就只能把BGP路由引入到IGP中,通过IGP进行传递。而把数以10万计的BGP路由引入到IGP中的后果是灾难性的。所以上图中,R2和R4之间建立了IBGP的关系。值得一提的是,如上文所提及,由于BGP是通过静态配置的方式建立TCP连接,所以并非只能在两台直连的设备上建立BGP关系,如上图,R2和R4间通过OSPF路由可达,可以建立IBGP关系。

如果R2和R4之间不建立IBGP会怎么样?答案是:数据包却无法传递给R4、R5。

这里,我们对路由的传递过程和数据包的传递过程分别进行分析。

路由的传递过程

在这里插入图片描述

R1―R2:由于两台设备直连,并且建立EBGP关系,R1可以直接发送update报文至R2。

R2―R4:两台路由非直连,但是两台路由建立了IBGP关系,R2将update报文发送给R4。即该update报文的目的IP是R4,于是R2查询自己的路由表,由于域内运行了OSPF协议,通过OSPF,R2查询到去R4的下一跳是R3,于是将该update报文发给R3,R3收到该报文后,虽然没有运行BGP协议,但是根据报文的目的IP,将该update报文发送给R4。

R4―R5:同样,两台设备直连,并且建立EBGP关系,R4可以直接发送update报文至R5。

这样,路由的传递就完成了。

数据包的传递过程

在这里插入图片描述

R5―R4:R5发送的数据包,源IP是R5,目的IP是R1,于是R5查询路由表,因为从R4收到一条R1的路由,该路由的下一跳标识为R4。于是将数据包发送给R4。

R4―R2:当R4收到从R5发过来的数据包时,该数据包的源IP是R5,目的IP是R1。于是,R4查询路由表,发现去往R1的路由下一跳是R2(我们假定R2上配置了peer next-hop-local命令),由于下一跳非直连,于是R4查询去R2的下一跳。由于域内运行了OSPF,R4发现,去R2的下一跳是R3,于是将数据包发给了R3。当R3收到该数据包时,由于数据包的目的IP是R1的IP,但是R3并没有运行BGP,所以R3上没有R1的路由。于是R3将该数据包丢弃。

这就是经常说到的数据层面的“路由黑洞”。

peer next-hop-local命令一般在ASBR(Autonomous System Boundary Router)上配置。 当设备通过EBGP邻居学到路由再转发给其他IBGP邻居时,默认不修改下一跳,但其EBGP邻居发来的路由的下一跳都是其EBGP邻居的Peer地址,本端对等体所属AS域内的IBGP邻居收到这样的路由后,由于下一跳不可达导致路由无法活跃。 因此,需要在ASBR上对IBGP邻居配置peer next-hop-local命令,使得发给IBGP邻居的路由的下一跳是其自身的地址,IBGP邻居收到这样的路由后(由于域内都配置了IGP)发现下一跳可达,路由即为活跃路由。

解决路由黑洞的几个方法

1:根据BGP同步机制将BGP路由引入到IGP中。(S系列交换机缺省不启用BGP同步机制,但可以通过命令synchronization命令启用),这个方案的弊端上文已经说明。

2:物理全连接:以上图为例,如果AS65008内三台设备均通过物理线路连接起来,则R4可以直接将数据包发送给R2,而不需要通过R3转发。这个方案的弊端在于物理线路的铺设非常麻烦。

3:逻辑全连接:以上图为例,如果AS65008内三台设备均启用BGP进程,并且两两建立IBGP连接,则R3上也有R1的路由。可以成功转发数据。这个方案的弊端在于如果设备数量非常多,大量IBGP的连接难于管理。

猜你喜欢

转载自blog.csdn.net/annita2019/article/details/126103978