Introduction
This document outlines the BGP best path selection algorithm, and covers specific configuration examples on how to manipulate BGP’s best path decision based on different attributes.Initial Topology
The following topology will be referenced for the entirety of this document unless otherwise stated. EIGRP is being used as the underlying IGP for basic connectivity.
In the topology above R1 is receiving a similar BGP route (172.16.1.0/24) via R2 and R3. Prior to any user manipulation, R1 prefers the path advertised from R2 over the path advertised from R3. This can be seen in the following output:
R1#sh ip bgp
BGP table version is 2, local router ID is 13.13.13.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
* 172.16.1.0/24 13.13.13.3 0 200 300 i
*> 12.12.12.2 0 200 300 i
The '>' shown in the output above indicates that the path with a next hop of 12.12.12.2 (R2) is the current best path.
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 2
Paths: (2 available, best #2, table default)
Advertised to update-groups:
1
Refresh Epoch 1
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, valid, external
Refresh Epoch 1
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external, best
R1#
The above output further illustrates that the path with a next hop address of 12.12.12.2 is currently being chosen as 'best', as well as the BGP path attributes associated to the paths that are being compared.
Once R1 has selected the best path it performs a recursive routing lookup on the associated next hop address. In this case the next hop address is 12.12.12.2, so the lookup will result in a next hop interface of FastEthernet0/0.
R1#sh ip route 12.12.12.2
Routing entry for 12.12.12.0/24
Known via "connected", distance 0, metric 0 (connected, via interface)
Redistributing via eigrp 1
Routing Descriptor Blocks:
* directly connected, via FastEthernet0/0
Route metric is 0, traffic share count is 1
Once the lookup has been done for the Next Hop Address we now have the associated next hop interface which is installed for the CEF entry:
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 12.12.12.2 FastEthernet0/0
Determining Which Path is Best
BGP compares multiple path attributes when choosing which path is best. The list of steps that are performed in the comparison can also be found in the Best Path Selection Algorithm.The default Best Path Selection Algorithm includes the following steps:
1. Compare Weight
The path with the highest weight is preferred. If the weight is identical, move on to step 2.This path attribute is only locally significant. If you change the weight on one router, it will not affect any other router within the Autonomous System. This is a Cisco Proprietary feature.
2. Compare Local Preference
The path with the highest local preference is preferred. If the local preference is identical, move on to step 3.This path attribute is not locally significant. If you change the local preference on one router, it will affect other routers within the Autonomous System.
3. Is the Path Locally Originated?
Any path that has been originated on a local router will be preferred over any paths learned from a BGP Peer. If no locally originated prefix exists in the BGP table for the paths being compared, move on to step 4.In Cisco IOS this step is implemented by associating a weight of 32768 to any prefixes advertised into BGP on the local router.
For example, when R4 advertised the 172.16.1.0/24 prefix into BGP with the command network 172.16.1.0 mask 255.255.255.0 it automatically added a weight of 32768 to that prefix in the BGP table. This can be seen from the following output:
R4#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 2
Paths: (1 available, best #1, table default)
Advertised to update-groups:
1
Refresh Epoch 1
Local
0.0.0.0 from 0.0.0.0 (172.16.1.1)
Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best
This means that R4 will prefer its next hop address for the 172.16.1.0/24 subnet, regardless of similar paths learned via its BGP peers.
4. Compare AS Path
The path with the shortest AS Path is preferred. If the AS Path is identical in length, move on to step 5.5. Compare Origin
This step in the Best Path Selection process compares how BGP learned about a path originally. There are 3 origin codes:IGP - the path was learned by BGP via the network statement and is interior to the originating Autonomous System
INCOMPLETE - the path was learned BGP in an unknown fashion, typically via Redistribution.
IGP > INCOMPLETE
If the origin is identical, move on to step 6.
6. Compare the Multi-Exit Discrimiator (MED)
The path with the lowest MED is preferred. This check is only done if the first hop AS is identical in the paths being compared. If the first hop AS is different or the MED is identical, move on to step 7.7. Compare Neighbor Type
Paths learned from eBGP peers are preferred over paths learned from iBGP peers. If all paths were learned from the same type of peer, move on to step 8. If the best path is selected during this step, skip step 8 and move on to step 9.8. IGP Metric
BGP advertises a prefix and a next hop address with any path. The path with the lower IGP metric to the associated next hop address is preferred. If the IGP metrics are identical on all paths, move on to step 9.9. Are Multiple Paths Allowed?
BGP by default will only install one path as best. If you configure the maximum-paths command to allow more than one path to be installed, BGP will use the IGP to load balance to the associated destination prefix.At this point if the best path has not been selected, move on to step 10.
10. Compare Route Age
When both paths are learned from eBGP peers, BGP prefers the route that was learned first.The logic is that the longer a route has been in the BGP Table, the more stable that path must be. This does not apply to iBGP routes.
11. Compare Neighbor's Router-ID
Prefer the path that is learned from the peer with the lower BGP Router-ID. If the Router-ID is identical, move on to step 12.12. Compare Cluster List Length
The path with the minimum Cluster List Length is preferred. (This only comes into play in BGP Route-Reflector environments)If the Cluster List Length is identical, move on to step 13.
13. Compare the Neighbor Address
This is the catch-all rule in the best path selection process. The path with the lower peer address (the IP address configured with the neighbor statement) is preferred. You cannot configure multiple neighbors with the same IP address, so it is impossible for this step to result in a tie.Manipulating the Best Path
This section covers how to manipulate BGP Path Attributes to alter which path BGP chooses is best. The following Path Attributes will be illustrated:- Weight
- Local Preference
- AS Path
- MED
- Installing Multiple Paths
NOTE: All best path manipulation covered in this section will be done on a per neighbor basis. Altering path attributes per prefix is not discussed to reduce complexity.
In each of the following examples BGP has chosen R2 as the preferred next hop to the 172.16.1.0/24 subnet prior to any user configuration.
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 2
Paths: (2 available, best #2, table default)
Advertised to update-groups:
1
Refresh Epoch 1
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, valid, external
Refresh Epoch 1
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external, best
Manipulating WEIGHT
R1's weight can be altered to prefer the next hop address of 13.13.13.3 for the 172.16.1.0/24 prefix. The following example uses the weight keyword to do so, instead of setting the value with a route-map.On R1:
Here we configure a WEIGHT of 1 to all prefixes learned from the neighbor 13.13.13.3:R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router bgp 100
R1(config-router)#neighbor 13.13.13.3 weight 1
R1(config-router)#end
R1#
The Prefixes learned from R3 must be updated for this configuration to take affect. You can request a route refresh from R3 to accomplish this with the command clear ip bgp 13.13.13.3 soft in.
Now when BGP goes to compare the Best Path Attributes of the two known paths the first thing that is checked is weight. Since the weight of the R3 path is 1, and the weight of the R2 path is 0 (by default) R1 prefers the path with a next hop address of 13.13.13.3.
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 5
Paths: (2 available, best #1, table default)
Advertised to update-groups:
1
Refresh Epoch 2
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, weight 1, valid, external, best
Refresh Epoch 2
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external
R1#
Weight is only illustrated in the show ip bgp output when a value is present. The Path with a next hop of 12.12.12.2 does not illustrate the weight in this example because no value has been set by the user.
The next hop interface for traffic destined to the 172.16.1.0/24 prefix is now updated to FastEthernet0/1.
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 13.13.13.3 FastEthernet0/1
R1#
Manipulating LOCAL PREFERENCE
R1's local preference can be altered to prefer the next hop address of 13.13.13.3 for the 172.16.1.0/24 prefix. The following example uses a route-map to set the value.On R1:
Here we configure a Local Preference of 101 (the default is 100) to all prefixes learned from the neighbor 13.13.13.3:R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#route-map RM_LOCAL_PREF permit 10
R1(config-route-map)#set local-preference 101
R1(config-route-map)#exit
R1(config)#
R1(config)#router bgp 100
R1(config-router)#neighbor 13.13.13.3 route-map RM_LOCAL_PREF in (can only be set inbound)
R1(config-router)#end
R1#clear ip bgp 13.13.13.3 soft in
R1#
Since the weight of both paths are identical, BGP then checks the local preference to determine which path is best. Since the path learned from R3 now has a higher local preference, it is preferred:
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 3
Paths: (2 available, best #2, table default)
Advertised to update-groups:
3
Refresh Epoch 2
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external
Refresh Epoch 3
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 101, valid, external, best
R1#
The next hop interface for traffic destined to the 172.16.1.0/24 prefix is now updated to FastEthernet0/1.
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 13.13.13.3 FastEthernet0/1
R1#
Manipulating the AS PATH
R1's AS Path can be altered to prefer the next hop address of 13.13.13.3 for the 172.16.1.0/24 prefix.The following example uses a route-map to prepend additional hops onto the AS Path of the path learned from R2.On R1:
Here we configure an AS Path with 2 additional hops for all of prefixes learned from the neighbor 12.12.12.2:R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#route-map RM_AS_PATH_PREPEND
R1(config-route-map)#set as-path prepend 200 200
R1(config-route-map)#exit
R1(config)#router bgp 100
R1(config-router)#neighbor 12.12.12.2 route-map RM_AS_PATH_PREPEND in (could be done inbound or outbound)
R1(config-router)#end
R1#clear ip bgp 12.12.12.2 soft in
R1#
Now the path learned from R2 will have 2 additional hops associated to it. This will make the path from R3 more preferred since it is shorter:
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 3
Paths: (2 available, best #1, table default)
Advertised to update-groups:
4
Refresh Epoch 2
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, valid, external, best
Refresh Epoch 3
200 200 200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external
R1#
The next hop interface for traffic destined to the 172.16.1.0/24 prefix is now updated to FastEthernet0/1.
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 13.13.13.3 FastEthernet0/1
R1#
Manipulating MED
R1's MED can be altered to prefer the next hop address of 13.13.13.3 for the 172.16.1.0/24 prefix. The following example uses a route-map to set the value.On R2:
MED can only be configured outbound to influence which path is the preferred entry point into an Automonous System. We want to influence R1 to prefer the path via R3, so we configure a higher MED value to be advertised from R2 to R1 than from R3 to R1.R2#
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#route-map RM_MED permit 10
R2(config-route-map)#set metric 1 (In Cisco IOS, you use the metric keyword to alter MED for BGP)
R2(config-route-map)#exit
R2(config)#router bgp 200
R2(config-router)#neighbor 12.12.12.1 route-map RM_MED out
R2(config-router)#end
R2#clear ip bgp 12.12.12.1 soft out
R2#
Now when R1 reaches step 6 in the best path selection process, it will choose the path learned from R3 since the MED is lower (a default of 0) than what is advertised by R2:
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 3
Paths: (2 available, best #2, table default)
Advertised to update-groups:
5
Refresh Epoch 2
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, metric 1, localpref 100, valid, external
Refresh Epoch 3
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, valid, external, best
R1#
If a MED value has not been set by the BGP peer, we will not show the value of 0 in the show ip bgp output.
The next hop interface for traffic destined to the 172.16.1.0/24 prefix is now updated to FastEthernet0/1.
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 13.13.13.3 FastEthernet0/1
R1#
Installing Multiple Paths
By default BGP will only choose one path as best. If multiple paths are learned to a destination subnet the user can configure BGP to load balance with the underlying IGP.On R1:
Adjusting the number of paths that BGP is allowed to install can be done as follows:R1#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router bgp 100
R1(config-router)#maximum-paths 2
R1(config-router)#end
R1#
With this configuration in place BGP can now install 2 paths to the 172.16.1.0/24 subnet. The path that R2 and R3 advertise are identical in the best path selection process up to step 9, so they're both candidates for installation in the Routing Table.
R1#sh ip bgp 172.16.1.0/24
BGP routing table entry for 172.16.1.0/24, version 4
Paths: (2 available, best #2, table default)
Multipath: eBGP
Advertised to update-groups:
5
Refresh Epoch 4
200 300
12.12.12.2 from 12.12.12.2 (24.24.24.2)
Origin IGP, localpref 100, valid, external, multipath(oldest)
Refresh Epoch 3
200 300
13.13.13.3 from 13.13.13.3 (34.34.34.3)
Origin IGP, localpref 100, valid, external, multipath, best
R1#
Now when BGP does the recursive routing lookup for the Next Hop addresses of each path it will use both next hop interfaces to load balance traffic via the IGP (in this case EIGRP):
R1#sh ip cef 172.16.1.0/24
172.16.1.0/24
nexthop 12.12.12.2 FastEthernet0/0
nexthop 13.13.13.3 FastEthernet0/1
R1#
Now both interfaces are used to forward traffic.
No comments:
Post a Comment