FAQ-如何理解BGP的路由负载分担与隧道负载分担

发布时间:  2014-06-29 浏览次数:  118 下载次数:  1
问题描述
如何理解BGP的路由负载分担与隧道负载分担,maximum load-balancingtunnel select-seq load-balance-number命令分别适合什么场景
处理过程

根因
解决方案

【原理描述】

关于BGP路由的负载分担,可以从三个层面来理解:

一是BGP路由表层面,通过BGPmaximum load-balancing命令控制最多有XBGP等价路由可以下发给IP表。(等价路由的选取见特性手册,在此不再解释)。这里只关注下发给IP路由表的路由个数,这X条路由迭代出的实际出接口有可能是相同的,并不是最终指导底层转发的负载分担个数。

二是IP路由表层面,也可以说是下一跳迭代的层面,即下发到IP表的这XBGP路由,根据其原始下一跳(Original nexthop)能迭代出Y个实际下一跳和出接口。这里跟BGP配置的负载分担数没有关系,只关注每条BGP路由的原始下一跳能迭代到几个实际下一跳和出接口。

三是FIB层面,即根据迭代的结果进行汇总,下发给FIBFIB针对相同前缀掩码的路由,对下一跳、出接口、LspToken、标签、bgpkey等均相同的路由进行合并,这才是最终指导底层转发的真正的负载分担数。

本案例主要关注前两个层面。

 

【举例】

BGP从不同邻居收到3123.1.1.1/32路由。因为配置了配置了maximum load-balancing 2,所以只有前2条路由带select标记,可以下发给IP路由表。

<RouterA>display bgp routing-table 123.1.1.1 32

 

 BGP local router ID : 1.1.1.2

 Local AS number : 100

 Paths:   3 available, 1 best, 2 select

 BGP routing table entry information of 123.1.1.1/32:

 From: 1.1.1.1 (1.1.1.1)

 Route Duration: 00h01m47s

 Relay IP Nexthop: 12.3.3.1

 Relay IP Out-Interface: Ethernet2/0/0.3

 Original nexthop: 1.1.1.1

 Qos information : 0x0

 AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255

 Not advertised to any peer yet

 

 BGP routing table entry information of 123.1.1.1/32:

 From: 2.2.2.1 (2.2.2.1)

 Route Duration: 00h01m47s

 Relay IP Nexthop: 12.1.1.1

 Relay IP Out-Interface: Ethernet2/0/0.1

 Original nexthop: 2.2.2.1

 Qos information : 0x0

 AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, select, active, pre 255, not preferred for peer address

 Not advertised to any peer yet

 

 BGP routing table entry information of 123.1.1.1/32:

 From: 3.3.3.1 (3.3.3.1)

 Route Duration: 00h01m47s

 Relay IP Nexthop: 12.1.1.1

 Relay IP Out-Interface: Ethernet2/0/0.1

 Original nexthop: 3.3.3.1

 Qos information : 0x0

 AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, active, pre 255, not preferred for peer address

 Not advertised to any peer yet

 

IP路由表中因为IGP路由1.1.1.1/32Ethernet2/0/0.1Ethernet2/0/0.3两个出接口,2.2.2.1/32Ethernet2/0/0.1Ethernet2/0/0.2Ethernet2/0/0.4三个出接口,因此IP路由表中123.1.1.1/32会显示5条表项。

<RouterA>display ip routing-table

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

 

        1.1.1.1/32  OSPF    10   10          D   12.3.3.1        Ethernet2/0/0.3

                    OSPF    10   10          D   12.1.1.1        Ethernet2/0/0.1

        2.2.2.1/32  ISIS-L1 15   10          D   12.1.1.1        Ethernet2/0/0.1

                    ISIS-L1 15   10          D   12.2.2.1        Ethernet2/0/0.2

                    ISIS-L1 15   10          D   12.4.4.1        Ethernet2/0/0.4

      123.1.1.1/32  IBGP    255  0          RD   1.1.1.1         Ethernet2/0/0.3

                    IBGP    255  0          RD   1.1.1.1         Ethernet2/0/0.1

                    IBGP    255  0          RD   2.2.2.1         Ethernet2/0/0.1

                    IBGP    255  0          RD   2.2.2.1         Ethernet2/0/0.2

                    IBGP    255  0          RD   2.2.2.1         Ethernet2/0/0.4

<RouterA>display ip routing-table 123.1.1.1 32 verbose

Route Flags: R - relay, D - download to fib

------------------------------------------------------------------------------

Routing Table : Public

Summary Count : 2

 

Destination: 123.1.1.1/32

     Protocol: IBGP            Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 1.1.1.1          Neighbour: 1.1.1.1

        State: Active Adv Relied      Age: 00h00m42s

          Tag: 0                 Priority: low

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x1

 RelayNextHop: 12.3.3.1         Interface: Ethernet2/0/0.3

     TunnelID: 0x0                  Flags: RD

 RelayNextHop: 12.1.1.1         Interface: Ethernet2/0/0.1

     TunnelID: 0x0                  Flags: RD

 

Destination: 123.1.1.1/32

     Protocol: IBGP            Process ID: 0

   Preference: 255                   Cost: 0

      NextHop: 2.2.2.1          Neighbour: 2.2.2.1

        State: Active Adv Relied      Age: 00h00m42s

          Tag: 0                 Priority: low

        Label: NULL               QoSInfo: 0x0

   IndirectID: 0x2

 RelayNextHop: 12.1.1.1         Interface: Ethernet2/0/0.1

     TunnelID: 0x0                  Flags: RD

 RelayNextHop: 12.2.2.1         Interface: Ethernet2/0/0.2

     TunnelID: 0x0                  Flags: RD

 RelayNextHop: 12.4.4.1         Interface: Ethernet2/0/0.4

     TunnelID: 0x0                  Flags: RD

 

  

理解了BGP路由负载分担的基本原理,不难推出以下结论:

1)即使BGP没有配置maximum load-balancing,但其原始下一跳根据IGP路由能迭代出多个下一跳和出接口,最终在FIB表也可以负载分担。

2)同理,即使BGP配置了maximum load-balancing,即使存在多条BGP等价路由,但如果迭代出的都是同一个下一跳和出接口,最终在FIB表仍只有一个下一跳和出接口。

 

【隧道负载分担】

公网路由根据原始下一跳做IP迭代,来自CE的私网路由或本地交叉的私网路由也是做IP迭代。远端交叉的私网路由,因为需要穿越公网隧道,因此需要根据原始下一跳做隧道迭代,原理与上述的第二个层面类似。IP迭代是迭代IGP路由,隧道迭代是迭代LSP

因为缺省情况下远端交叉路由不做隧道负载分担,所以如果想做隧道负载分担,需要配置隧道策略指定隧道负载分担数。

例如:

ip vpn-instance vpna

 ipv4-family

  route-distinguisher 1:1

  tnl-policy a

  vpn-target 1:1 export-extcommunity

  vpn-target 1:1 import-extcommunity

#

bgp 100

 ipv4-family vpn-instance vpna

  maximum load-balancing 2

#

tunnel-policy a

 tunnel select-seq lsp load-balance-number 3

 

根据此例的配置,tunnel select-seq指定了lsp,所以私网路由只允许迭代LDP LSP。如果根据原始下一跳迭代不到LDP LSP,路由不会活跃,也就不能成为等价路由。

BGP层面,BGP配置了maximum load-balancing 2,意思是最多会把2BGP等价路由下发给IP路由表。

在下一跳迭代的层面,因为配置了tunnel select-seq lsp load-balance-number 3,如果存在多条FEC与原始下一跳相同的Ingress LSP,则会从中最多选出3条做隧道负载分担。

例如:BGPr1r2两条远端交叉的私网等价路由下发给IP路由表,r1迭代到1LDP LSPr2迭代到4LDP LSP(因为超过了隧道策略指定的负载分担数只能从中选3条),那么隧道负载分担的结果就是r1生成1条表项,r2生成3条表项,一共下发1+3=4条表项给FIB

 

至此,maximum load-balancingtunnel select-seq load-balance-number命令分别适合什么场景的问题就很容易回答了。

如果多条BGP路由形成等价路由,那么希望有几条等价路由下发给IP表,通过配置maximum load-balancing来控制。而每条远端交叉路由希望能迭代到几条隧道,则由隧道策略中的tunnel select-seq { gre | lsp | cr-lsp } * load-balance-number <number>命令来控制。

END