Lesson Contents
BGP routers only advertise the best path to their neighbors. When a better path is found, it replaces the current path. Advertising a path and replacing it with a new path is called an implicit withdraw.
Since we only advertise the best path, a lot of other possible paths are unknown to some of the routers. We call this path hiding.
Path hiding has a couple of disadvantages:
- You can’t use BGP multipath
- Possible sub-optimal routing
- MED oscillation
- Next hop failure means BGP has to reconverge before traffic can be forwarded again
With the BGP additional paths feature, BGP advertises multiple paths for the same prefix so we have path diversity instead of path hiding. Additional paths is an extension to BGP and it adds a unique path identifier to each path. The path ID is similar to how the RD (Route Distinguisher) works in MPLS VPN, except the path IDs can be used in any BGP address family.
This feature can only be used for iBGP and there are three steps to take to implement it:
- Configure your routers so they can send and/or receive additional paths.
- Configure a global selection criterion on the router to define which additional candidate paths should be selected next to the best path.
- To each neighbor, advertise a set or sets of additional paths that we selected as candidate paths.
For the additional path selection, there are three options:
- Best N: this is the best path and the second best path(s). The second best path(s) is chosen by eliminating the (next) best path and then selecting the next best path.
- Group-best: the set of paths that are the best paths from each AS. This is best explained with a quick example:
- AS 1 advertises three paths for prefix 1.1.1.1/32:
- One with next hop 192.168.1.1
- One with next hop 192.168.1.2
- One with next hop 192.168.1.3
- AS 2 advertises three paths for prefix 2.2.2.2/32:
- One with next hop 192.168.2.1
- One with next hop 192.168.2.2
- One with next hop 192.168.2.3
- AS 3 advertises three paths for prefix 3.3.3.3/32:
- One with next hop 192.168.3.1
- One with next hop 192.168.3.2
- One with next hop 192.168.3.3
- We choose the best path from each AS and that becomes our set. This could be:
- 1.1.1.1/32 with next hop 192.168.1.1
- 2.2.2.2/32 with next hop 192.168.2.1
- 3.3.3.3/32 with next hop 192.168.3.1
- AS 1 advertises three paths for prefix 1.1.1.1/32:
- All: all paths that have a unique next hop can be used as an additional path.
Let’s take a look at the additional paths feature in action.
Configuration
We’ll use the following topology:
We have five routers in AS 12345 where R2 is the RR (Route Reflector). R6 has a loopback interface with prefix 6.6.6.6/32 that is advertised in BGP.
Configurations
Want to take a look for yourself? Here you will find the startup configuration of each device.
R1
hostname R1
!
ip cef
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.12.1 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.13.1 255.255.255.0
!
router ospf 1
network 1.1.1.1 0.0.0.0 area 0
network 192.168.12.0 0.0.0.255 area 0
network 192.168.13.0 0.0.0.255 area 0
!
router bgp 12345
bgp router-id 1.1.1.1
neighbor 2.2.2.2 remote-as 12345
neighbor 2.2.2.2 update-source Loopback0
!
end
R2
hostname R2
!
ip cef
!
interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.12.2 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.23.2 255.255.255.0
!
interface GigabitEthernet0/3
ip address 192.168.24.2 255.255.255.0
!
router ospf 1
network 2.2.2.2 0.0.0.0 area 0
network 192.168.12.0 0.0.0.255 area 0
network 192.168.23.0 0.0.0.255 area 0
network 192.168.24.0 0.0.0.255 area 0
!
router bgp 12345
bgp router-id 2.2.2.2
neighbor 1.1.1.1 remote-as 12345
neighbor 1.1.1.1 update-source Loopback0
neighbor 1.1.1.1 route-reflector-client
neighbor 3.3.3.3 remote-as 12345
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 route-reflector-client
neighbor 4.4.4.4 remote-as 12345
neighbor 4.4.4.4 update-source Loopback0
neighbor 4.4.4.4 route-reflector-client
neighbor 5.5.5.5 remote-as 12345
neighbor 5.5.5.5 update-source Loopback0
neighbor 5.5.5.5 route-reflector-client
!
end
R3
hostname R3
!
ip cef
!
interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.13.3 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.23.3 255.255.255.0
!
interface GigabitEthernet0/3
ip address 192.168.35.3 255.255.255.0
!
router ospf 1
network 3.3.3.3 0.0.0.0 area 0
network 192.168.13.0 0.0.0.255 area 0
network 192.168.23.0 0.0.0.255 area 0
network 192.168.35.0 0.0.0.255 area 0
!
router bgp 12345
bgp router-id 3.3.3.3
neighbor 2.2.2.2 remote-as 12345
neighbor 2.2.2.2 update-source Loopback0
!
end
R4
hostname R4
!
ip cef
!
interface Loopback0
ip address 4.4.4.4 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.45.4 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.24.4 255.255.255.0
!
interface GigabitEthernet0/3
ip address 192.168.46.4 255.255.255.0
!
router ospf 1
network 4.4.4.4 0.0.0.0 area 0
network 192.168.24.0 0.0.0.255 area 0
network 192.168.45.0 0.0.0.255 area 0
!
router bgp 12345
bgp router-id 4.4.4.4
neighbor 2.2.2.2 remote-as 12345
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 next-hop-self
neighbor 192.168.46.6 remote-as 6
!
end
R5
hostname R5
!
ip cef
!
interface Loopback0
ip address 5.5.5.5 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.45.5 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.35.5 255.255.255.0
!
interface GigabitEthernet0/3
ip address 192.168.56.5 255.255.255.0
!
router ospf 1
network 5.5.5.5 0.0.0.0 area 0
network 192.168.35.0 0.0.0.255 area 0
network 192.168.45.0 0.0.0.255 area 0
!
router bgp 12345
bgp router-id 5.5.5.5
neighbor 2.2.2.2 remote-as 12345
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 next-hop-self
neighbor 192.168.56.6 remote-as 6
!
end
R6
hostname R6
!
ip cef
!
interface Loopback0
ip address 6.6.6.6 255.255.255.255
!
interface GigabitEthernet0/1
ip address 192.168.46.6 255.255.255.0
!
interface GigabitEthernet0/2
ip address 192.168.56.6 255.255.255.0
!
router bgp 6
network 6.6.6.6 mask 255.255.255.255
neighbor 192.168.46.4 remote-as 12345
neighbor 192.168.56.5 remote-as 12345
!
end
Let’s see what we have. R4 and R5 have learned about 6.6.6.6/32 from R6:
R4#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
*> 6.6.6.6/32 192.168.46.6 0 0 6 i
R5#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
*> 6.6.6.6/32 192.168.56.6 0 0 6 i
* i 4.4.4.4 0 100 0 6 i
R4 and R5 advertise 6.6.6.6/32 to R2, our route reflector:
R2#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
* i 6.6.6.6/32 5.5.5.5 0 100 0 6 i
*>i 4.4.4.4 0 100 0 6 i
R2 has both paths in its BGP table but installs the path to R4. It only advertises this best path to its clients. Let’s look at two scenarios where this might be an issue.
Load Balancing
Let’s take a look at R1:
R1#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
*>i 6.6.6.6/32 4.4.4.4 0 100 0 6 i
Since R2 only advertises its best path, R1 only knows about the path through R4. How is the next hop resolved? Let’s have a look:
R1#show ip route 4.4.4.4
Routing entry for 4.4.4.4/32
Known via "ospf 1", distance 110, metric 3, type intra area
Last update from 192.168.12.2 on GigabitEthernet0/1, 01:15:01 ago
Routing Descriptor Blocks:
* 192.168.12.2, from 4.4.4.4, 01:15:01 ago, via GigabitEthernet0/1
Route metric is 3, traffic share count is 1
4.4.4.4 resolves to R2 so R1 will never use the path through R3. Because R2 is “hiding” the path, we have two disadvantages here:
- There is no load balancing, R1 could have used R3 to get to 6.6.6.6/32.
- When next hop 4.4.4.4 fails, BGP has to reconverge before traffic can resume.
Sub-optimal Routing
Let’s check R3:
R3#show ip bgp | begin Network
Network Next Hop Metric LocPrf Weight Path
*>i 6.6.6.6/32 4.4.4.4 0 100 0 6 i
R3 also uses 4.4.4.4 as the next hop to get to 6.6.6.6. How does 4.4.4.4 get resolved?
R3#show ip route 4.4.4.4 | include via
Known via "ospf 1", distance 110, metric 3, type intra area
192.168.35.5, from 4.4.4.4, 01:13:48 ago, via GigabitEthernet0/3
* 192.168.23.2, from 4.4.4.4, 01:16:15 ago, via GigabitEthernet0/2
Also, when 4.4.4.4 fails, BGP has to reconverge. What we have seen so far is just the way it is; this is how BGP works. Can we improve it though?
Hi,
This image below of the network topology has the same IP addresses for all links, which makes it a bit confusing if you didn’t read the configurations before hand.
https://networklessons.com/wp-content/uploads/2018/03/as12345-as6-bgp-additional-path-topology.png
Hi Zain,
You are right, that doesn’t really help I just fixed this.
Rene
Hi Rene,
I have learnt lots of networking stuff in your plain way . God bless you . carry on dear .Thanks
br//zaman
Hi Rene,
For eBGP additional paths is working by default, is this correct ?
Thx…
Hi Fabio,
I’m afraid not. eBGP only advertises a single best path to its neighbors.
Rene