7.BGP发布路由的策略

  BGP发布路由时采用如下策略:  

·     存在多条有效路由时,BGP发言者只将最优路由发布给对等体。如果配置了advertise-rib-active命令,则BGP发布IP路由表中的最优路由;否则,发布BGP路由表中的最优路由。

·     BGP发言者只把自己使用的路由发布给对等体。

·     BGP发言者会将从EBGP获得的路由发布给它的所有BGP对等体(包括EBGP对等体和IBGP对等体)。

·     BGP发言者会将从IBGP获得的路由发布给它的EBGP对等体,但不会发布给它的IBGP对等体。

·     会话一旦建立,BGP发言者将把满足上述条件的所有BGP路由发布给新对等体。之后,BGP发言者只在路由变化时,向对等体发布更新的路由。

8.BGP负载分担

  BGP可以通过如下两种方式实现负载分担:

·     基于迭代路由实现负载分担

·     通过改变BGP选路规则实现负载分担

  1)基于迭代路由实现BGP负载分担

  由于BGP协议本身的特殊性,它产生的路由的下一跳地址可能不是当前路由器直接相连的邻居。常见的一个原因是:IBGP之间发布路由信息时不改变下一跳。这种情况下,为了能够将报文正确转发出去,

  路由器必须先找到一个直接可达的地址(查找IGP建立的路由表项),通过这个地址到达路由表中指示的下一跳。在上述过程中,去往直接可达地址的路由被称为依赖路由,BGP路由依赖于这些路由指导报文转发。

  根据下一跳地址找到依赖路由的过程就是路由迭代。

  目前系统支持基于迭代的BGP负载分担,即如果依赖路由本身是负载分担的(假设有三个下一跳地址),则BGP也会生成与依赖路由数量相同的下一跳地址来指导报文转发。需要说明的是,

  基于迭代的BGP负载分担并不需要命令配置,这一特性在系统上始终启用。

  2)通过改变BGP选择规则实现负载分担

  在实现方法上,BGP的负载分担与IGP的负载分担有所不同:  

·     IGP(如RIP、OSPF)是通过协议定义的路由算法,对到达同一目的地址的不同路由,根据计算结果,将度量值(metric)相等的路由进行负载分担,选择的标准很明确(按metric)。

·     BGP本身并没有路由计算的算法,它只是一个选路的路由协议,因此,不能根据一个明确的度量值决定是否对路由进行负载分担,但BGP有丰富的选路规则,可以在对路由进行一定的选择后,有条件地进行负载分担,也就是将负载分担加入到BGP的选路规则中去。

  采用本方式进行负载分担时,BGP不再按照选路规则选择路由,当路由同时满足如下条件时,即在这些路由间进行负载分担:  

·     ORIGIN属性、LOCAL_PREF属性和MED属性完全相同。

·     AS_PATH属性满足如下要求:

           只要配置了balance as-path-neglect命令,则AS_PATH属性可以不同。

           如果配置了balance as-path-relax命令,但未配置balance as-path-neglect命令,则AS_PATH属性内容不同但长度相同的路由之间能够形成BGP负载分担。

           如果未配置balance as-path-neglect和balance as-path-relax命令,则要求AS_PATH属性也必须相同。

·     路由下一跳的IGP路由的Metric值满足如下要求:

           若未配置bestroute igp-metric-ignore命令,则路由下一跳的IGP的Metric值必须相同。

           配置了bestroute igp-metric-ignore命令后,不同路由下一跳的IGP Metric值不同也能形成BGP负载分担。

·     同为标签路由(具有对应MPLS标签值的路由)或同为非标签路由。

  

  在上图中,Router A和Router B是Router C的IBGP对等体。当Router D和Router E同时向Router C通告到达同一目的地的路由时,如果用户在Router C上配置了进行负载分担的BGP路由条数为2,

  则当这两条路由满足负载分担条件时,Router C就把这两条路由同时加入到转发表中,实现BGP路由的负载分担。Router C只向Router A和Router B转发一次该路由,该路由的属性按照如下方法确定:  

·     如果未配置balance as-path-neglect和balance as-path-relax命令,形成负载分担的路由的AS_PATH属性相同,则发布路由的AS_PATH属性就为该值;如果配置了balance as-path-neglect或balance as-path-relax命令,

  形成负载分担的路由的AS_PATH属性不同,则发布路由的AS_PATH属性为最佳路由的AS_PATH属性。

·     NEXT_HOP属性改变为Router C的地址,而不是原来的EBGP对等体地址。

·     其它的BGP路由属性为最佳路由的属性。

  注:BGP负载分担特性适用于EBGP、IBGP以及联盟之间。

9.大规模BGP网络所遇问题的解决方法

  在大规模BGP网络中,对等体的数目众多,路由表庞大,配置和维护极为不便。通过如下方法,可以降低管理难度,提高路由发布效率。

  1)路由聚合

  在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小BGP路由表的规模。

  路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是将所有的具体路由都通告出去。

  目前系统支持自动聚合和手动聚合方式。使用后者还可以控制聚合路由的属性,以及决定是否发布具体路由。

  2)路由衰减  

  路由发生变化时,路由协议会向邻居发布路由更新,收到路由更新的路由器需要重新计算路由并修改路由表。如果发生路由震荡,即路由不稳定,路由表中的某条路由反复消失和重现,则会消耗大量的带宽资源和CPU资源,

  严重时会影响到网络的正常工作。

  在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁。为了防止持续的路由震荡带来的不利影响,BGP使用衰减来抑制不稳定的路由。

  BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。路由每次从可达状态变为不可达状态,或者可达路由的属性每次发生变化时,BGP给此路由增加一定的惩罚值(系统固定为1000,不可修改)。

  当惩罚值超过抑制阈值时,此路由被抑制,不参与路由选择。惩罚值达到设置的上限后,不再继续增加。

  发生震荡的路由如果没有再次震荡,则路由的惩罚值会逐渐减少。每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(Half-life)。当惩罚值低于再使用阈值时,此路由变为可用路由,参与路由选择。

  3)对等体组  

  在大规模BGP网络中,对等体的数量很多,其中很多对等体具有相同的策略,在配置时会重复使用一些命令。此时,将这些对等体加入一个对等体组,可以简化配置。

  对等体组是具有某些相同属性的对等体的集合。当一个对等体加入对等体组时,此对等体将获得与所在对等体组相同的配置。当对等体组的配置改变时,组内成员的配置也相应改变。

  4)团体

  在大规模的网络中,如果通过地址前缀列表、ACL、AS_PATH等实现对路由的控制,不仅配置复杂,而且不方便维护。利用团体属性和扩展团体属性,可以提高路由策略配置的灵活度,简化路由策略的管理,从而降低维护管理的难度。

  5)路由反射器

  为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2。当IBGP对等体数目很多时,对网络资源和CPU资源的消耗都很大。

  利用路由反射可以解决这一问题。在一个AS内,其中一台路由器作为RR(Route Reflector,路由反射器),作为客户机(Client)的路由器与路由反射器之间建立IBGP连接。路由反射器从客户机接收到路由后,

  将其传递(反射)给所有其他的客户机,从而保证客户机之间不需要建立BGP连接,就可以学习到彼此的路由。

  既不是路由反射器也不是客户机的BGP路由器被称为非客户机(Non-client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。其示意图如下所示。

   

   路由反射器及其客户机形成了一个集群。通常情况下,一个集群中只有一个路由反射器,该反射器的Router ID就作为集群ID,用于识别该群。如下图所示,为了提高网络的可靠性、避免单点故障,一个集群中可以设置多个路由反射器。

  此时,集群中所有路由反射器上都需要配置相同的集群ID,以便集群具有统一的标识,避免路由环路的产生。

   

   如果配置了路由反射器后,由于组网需要在路由反射器的客户机之间又建立了全连接,则客户机之间可以直接交换路由信息,客户机到客户机之间的路由反射是没有必要的。此时,不需要修改网络配置或改变网络拓扑,

  只需在路由反射器上通过相关命令禁止其在客户机之间反射路由,就可以避免路由反射,减少占用的带宽资源。

  注:禁止客户机之间的路由反射后,客户机到非客户机之间的路由仍然可以被反射。

  6)联盟

  联盟(Confederation)是处理自治系统内部的IBGP网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的IBGP对等体建立全连接关系,子自治系统之间建立联盟内部EBGP连接关系。

    

  在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号,如上图中的AS 200就是联盟ID。

  联盟的缺陷是从非联盟方案向联盟方案转变时,要求路由器重新进行配置,逻辑拓扑也要改变。

  在大型BGP网络中,路由反射器和联盟可以被同时使用。

 

posted on 2021-12-17 16:37  星痕1216  阅读(548)  评论(0编辑  收藏  举报