Механизм балансировки 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