At this point, we know that DUAL finds the successor(s) for each destination and attempts to find feasible successors as well. As with successors, a router can have more than one feasible successor for a particular destination. Refer to Figure 1 for an example:
From R1’s perspective, for the 10.1.1.0/23 prefix R2 (FD=2000) is the successor, while R3 (FD=2500) and R4 (FD=2500) are not. Since both R3 (AD=1500) and R4 (AD=1500) meet the feasibility condition (AD of candidate less than FD of current successor), both R3 and R4 qualify as feasible successors. If the path via R2 becomes unavailable, both R3 and R4 become successors, and traffic for the 10.1.1.0/24 subnet would be load-shared between them.
It’s not necessarily the best backup path that’s chosen to be a feasible successor, it’s only necessary that it meet the feasibility condition. Refer to Figure 2 for an example:
As before, from R1’s perspective, for the 10.1.1.0/23 prefix R2 (FD=2000) is the successor, while R3 (FD=2500) and R4 (FD=2800) are not. Since both R3 (AD=1500) and R4 (AD=1800) meet the feasibility condition, both R3 and R4 qualify as feasible successors. If the path via R2 becomes unavailable, the best feasible successor (R3) would become the successor, and R4 would then be the sole feasible successor.
Is it possible to have a situation in which there are no feasible successors for a particular destination? Sure! The trivial case is that the routers are arranged in a daisy-chain, where there is only one possible path to the destination. In this case, there is a successor but no alternate path to check against the feasibility condition and thus no feasible successor. More interesting are topologies that offer alternate paths but have no feasible successor, such as that shown in Figure 3:
From R1’s perspective, for the 10.1.1.0/23 prefix, R2 (FD=2000) is the successor, and R3 (FD=3500) is not. Further, since R3’s AD of 2500 is not less than the FD via R2 (1500), R3 does not qualify as a feasible successor. If the path via R2 becomes unavailable, R1 will send a query to its remaining neighbors (in this case, only R3) to check the current connectivity status.