Механизм балансировки ECMP позволяет устанавливать в FIB несколько маршрутов к одному префиксу, при этом маршруты должны иметь "равнозначную стоимость". В протоколе BGP равнозначность маршрутов определяется разделом 9.1.2.2. "Breaking Ties (Phase 2)" RFC 4271 "A Border Gateway Protocol 4" (https://datatracker.ietf.org/doc/html/rfc4271). С точки зрения ECMP маршруты считаются равными если они совпадают до шага (e) включительно. Этот алгоритм, называемый также BGP best path selection, указывает на предпочтение меньшего количества AS в атрибуте AS_PATH (за исключением случаев использования AS_SET). При этом в большинстве реализаций BGP проверяется не только длины AS_PATH, но и консистентность присутствующих в них ASN. Данный аспект не позволяет использовать ECMP балансировку для префиксов, полученных из разных AS, несмотря на одинаковую длину AS_PATH в маршрутах.
Такой сценарий приведен в другом RFC 7938 "Use of BGP for Routing in Large-Scale Data Centers" (https://datatracker.ietf.org/doc/html/rfc7938), раздел 6.2 "BGP ECMP over Multiple ASNs" которого описывает необходимость функционала, позволяющего балансировать трафик при наличии разных ASN в AS_PATH. Этот функционал называется BGP multipath relax.
Посмотрим как это работает на примере топологии из четырех EBGP peer'ов:
со следующей конфигурацией:
sw1#sh run ip maximum-paths 8 ! hostname sw1 ! interface GigabitEthernet1/0/1 ip address 192.168.0.0 255.255.255.254 exit ! interface GigabitEthernet1/0/2 ip address 192.168.0.2 255.255.255.254 exit ! interface loopback1 ip address 10.0.0.1 255.255.255.255 exit ! ! router bgp 65001 bgp router-id 10.0.0.1 address-family ipv4 unicast exit ! neighbor 192.168.0.1 remote-as 65002 address-family ipv4 unicast exit exit ! neighbor 192.168.0.3 remote-as 65003 address-family ipv4 unicast exit exit exit ! ! end
sw2#sh run hostname sw2 ! interface GigabitEthernet1/0/1 ip address 192.168.0.1 255.255.255.254 exit ! interface GigabitEthernet1/0/2 ip address 192.168.0.4 255.255.255.254 exit ! interface loopback1 ip address 10.0.0.2 255.255.255.255 exit ! ! router bgp 65002 bgp router-id 10.0.0.2 address-family ipv4 unicast exit ! neighbor 192.168.0.0 remote-as 65001 address-family ipv4 unicast exit exit ! neighbor 192.168.0.5 remote-as 65004 address-family ipv4 unicast exit exit exit ! ! end
sw3#sh run hostname sw3 ! interface gigabitethernet1/0/1 ip address 192.168.0.6 255.255.255.254 exit ! interface gigabitethernet1/0/2 ip address 192.168.0.3 255.255.255.254 exit ! interface loopback 1 ip address 10.0.0.3 255.255.255.255 exit ! ! router bgp 65003 bgp router-id 10.0.0.3 address-family ipv4 unicast exit ! neighbor 192.168.0.2 remote-as 65001 address-family ipv4 unicast exit exit ! neighbor 192.168.0.7 remote-as 65004 address-family ipv4 unicast exit exit exit ! ! end
sw4#sh run hostname sw4 ! interface gigabitethernet1/0/1 ip address 192.168.0.7 255.255.255.254 exit ! interface gigabitethernet1/0/2 ip address 192.168.0.5 255.255.255.254 exit ! interface loopback 1 ip address 10.0.0.4 255.255.255.255 exit ! interface loopback 2 ip address 172.16.0.1 255.240.0.0 exit ! ! router bgp 65004 bgp router-id 10.0.0.4 address-family ipv4 unicast network 172.16.0.0 mask 255.240.0.0 exit ! neighbor 192.168.0.4 remote-as 65002 address-family ipv4 unicast exit exit ! neighbor 192.168.0.6 remote-as 65003 address-family ipv4 unicast exit exit exit ! ! end
В таблице bgp sw1 видим два маршрута к анонсируемой sw4 подсети 172.16/12, полученные от sw2 и sw3:
sw1#sh ip bgp BGP routing table information for VRF default BGP table version is 2, local router ID is 10.0.0.1 Status codes: * - valid, > - best, i - internal, s - suppressed, m - ECMP Origin codes: i - IGP, e - EGP, ? - incomplete Path type: a - aggregate Network Nexthop Metric LocPrf Weight Path *> 172.16.0.0/12 192.168.0.1 0 100 0 65002 65004 i * 172.16.0.0/12 192.168.0.3 0 100 0 65003 65004 i
однако в таблицу маршрутизации установлен только один из них:
sw1#sh ip route bgp
Maximum Parallel Paths: 8 (8 after reset)
Load balancing: src-dst-mac-ip
Load balancing hash Salt value: 0
Load balancing hash Seed value: 0
IP Forwarding: enabled
Codes: > - best, C - connected, S - static,
R - RIP,
O - OSPF intra-area, OIA - OSPF inter-area,
OE1 - OSPF external 1, OE2 - OSPF external 2,
B - BGP, i - IS-IS, L1 - IS-IS level-1,
P - PBR
L2 - IS-IS level-2, ia - IS-IS inter area
[d/m]: d - route's distance, m - route's metric
B 172.16.0.0/12 [20/0] via 192.168.0.1, 04:06:31, gi1/0/1
Второй маршрут не может быть добавлен в ECMP группу так как AS_PATH содержит разные ASN: 65002 и 65003.
Включим multipath relax:
sw1(config)#router bgp sw1(router-bgp)#bgp bestpath as-path multipath-relax This action will reset all neighbor connections and clear BGP routing table. Would you like to continue? (Y/N)[N] Y 28-May-2026 07:40:58 %BGP-I-ADJCHANGE: Neighbor 192.168.0.1 Down 28-May-2026 07:40:58 %BGP-I-NOTIFICATION: Sent to neighbor 192.168.0.1 Cease (Administrative Shutdown) 28-May-2026 07:40:58 %BGP-I-ADJCHANGE: Neighbor 192.168.0.3 Down 28-May-2026 07:40:58 %BGP-I-NOTIFICATION: Sent to neighbor 192.168.0.3 Cease (Administrative Shutdown) sw1(router-bgp)#28-May-2026 07:40:58 %BGP-I-ADJCHANGE: Neighbor 192.168.0.1 Up 28-May-2026 07:40:58 %BGP-I-ADJCHANGE: Neighbor 192.168.0.3 Up
и снова посмотрим таблицы bgp и маршрутизации:
sw1(router-bgp)#do sh ip bgp
BGP routing table information for VRF default
BGP table version is 3, local router ID is 10.0.0.1
Status codes: * - valid, > - best, i - internal, s - suppressed, m - ECMP
Origin codes: i - IGP, e - EGP, ? - incomplete
Path type: a - aggregate
Network Nexthop Metric LocPrf Weight Path
*> 172.16.0.0/12 192.168.0.1 0 100 0 65002 65004 i
*m 172.16.0.0/12 192.168.0.3 0 100 0 65003 65004 i
sw1(router-bgp)#do sh ip ro bgp
Maximum Parallel Paths: 8 (8 after reset)
Load balancing: src-dst-mac-ip
Load balancing hash Salt value: 0
Load balancing hash Seed value: 0
IP Forwarding: enabled
Codes: > - best, C - connected, S - static,
R - RIP,
O - OSPF intra-area, OIA - OSPF inter-area,
OE1 - OSPF external 1, OE2 - OSPF external 2,
B - BGP, i - IS-IS, L1 - IS-IS level-1,
P - PBR
L2 - IS-IS level-2, ia - IS-IS inter area
[d/m]: d - route's distance, m - route's metric
B 172.16.0.0/12 [20/0] via 192.168.0.1, 00:01:32, gi1/0/1
B 172.16.0.0/12 [20/0] via 192.168.0.3, 00:01:32, gi1/0/2
Как видим теперь маршрут 172.16.0.0/12 via 192.168.0.3 также установлен в таблицу маршрутизации.
Механизм multipath relax поддерживается как в GRT (как в приведенном примере) так и VRF:
sw1(config)#ip vrf test sw1(config-vrf)#router bgp sw1(router-bgp)#vrf test sw1(router-bgp-vrf)#bgp bestpath as-path multipath-relax This action will reset all neighbor connections and clear BGP routing table. Would you like to continue? (Y/N)[N]
Примечание: функционал доступен начиная с версии ПО 6.6.11
