BGP路由反射器与联盟

发布于:2023-01-04 ⋅ 阅读:(336) ⋅ 点赞:(0)

在一个大型的AS当中受到iBGP水平分割(从iBGP的邻居接收到的路由不能再传递给其他的iBGP邻居)的影响,将会造成BGP的路由无法通过iBGP邻居接收。解决办法有三种:

  1. 建立全互联的iBGP邻居

  2. 路由反射器

  3. BGP的联盟

由于 BGP基于TCP连接,每建立一个BGP邻居就需要一个TCP连接,这样会极大地消耗CPU资源。TCP连接数可以通过一个公式:n(n-1)/2来计算。例如在AS内有10个路由器,那么将会有45个连接数。在大型的BGP网络中一般不采用全连接方式,通常会采用路由反射器和联盟来解决。

路由反射器

路由反射器相关角色

如下图,在一个AS内部关于路由反射器有以下几种角色:

  • 路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。

  • 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。

    #将对等体作为路由反射器的客户配置示例:

    [HUAWEI] bgp 100

    [HUAWEI-bgp] peer 10.1.1.2 as-number 100

    [HUAWEI-bgp] ipv4-family unicast

    [HUAWEI-bgp-af-ipv4] peer 10.1.1.2 reflect-client

  • 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。

  • 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。

  • 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。

路由反射器原理

同一集群内的客户机只需要与该集群的RR直接交换路由信息,因此客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量。如上图所示,在AS65000内一台设备作为RR,三台设备作为客户机,形成Cluster1。此时AS65000中IBGP的连接数从配置RR前的10条减少到4条,不仅简化了设备的配置,也减轻了网络和CPU的负担。

RR突破了“从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。”的限制,并采用独有的Cluster_List属性和Originator_ID属性防止路由环路。RR向IBGP邻居发布路由规则如下:

  • 从非客户机学到的路由,发布给所有客户机。

  • 从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。

  • 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。

Cluster_List属性

Cluster_List为可选非过度属性。路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。

  • 当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。

  • 当RR接收到一条更新路由时,RR会检查Cluster List。如果Cluster List中已经有本地Cluster ID,丢弃该路由;如果没有本地Cluster ID,将其加入Cluster List,然后反射该更新路由。

Originator_ID属性

Originator ID为可选非过度属性。Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。

  • 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。

  • 当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。

备份路由反射器

为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。

如上图所示,路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster ID(缺省情况下,每个路由反射器使用自己的Router ID作为集群ID)。

  • 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。

  • RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。

  • RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。

BGP联盟

联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。配置联盟后,原AS号将作为每个路由器的联盟ID。这样有两个好处:一是可以保留原有的IBGP属性,包括Local Preference属性、MED属性和NEXT_HOP属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子AS号等信息的操作。

如下图所示,AS100使用联盟后被划分为3个子AS:AS65001、AS65002和AS65003,使用AS100作为联盟ID。为了实现路由的传递和数据包的转发,如果采用逻辑全连接,则需要10个IBGP连接;如果使用联盟则仅需要2个IBGP连接和2个EBGP连接即可。因此使用联盟不仅简化了设备的配置,也减轻了网络和CPU的负担。而AS100外的BGP设备因为仅知道AS100的存在,并不知道AS100内部的联盟关系,所以不会增加CPU的负担。

# 为联盟体配置子自治系统配置示例:

<HUAWEI> system-view

[HUAWEI] bgp 65001

[HUAWEI-bgp] confederation id 100

[HUAWEI-bgp] confederation peer-as 65002 65003

路由反射器和联盟的比较如下表所示:

路由反射器

联盟

不需要更改现有的网络拓扑,兼容性好。

需要改变逻辑拓扑。

配置方便,只需要对作为反射器的设备进行配置,客户机并不需要知道自己是客户机。

所有设备需要重新进行配置。

集群与集群之间仍然需要全连接。

联盟的子AS之间是特殊的EBGP连接,不需要全连接。

适用于中、大规模网络。

适用于大规模网络。


网站公告

今日签到

点亮在社区的每一天
去签到