EIGRP uses different K values to determine the best path to each destination:
- K1
- K2
- K3
- K4
- K5
These K values are only numbers to scale numbers in the metric calculation. The formula we use for the metric calculation looks like this:
If K5 is not equal to 0:
If you look at the formula, you can see that the bandwidth, load, delay, and reliability influence the metric. We can see what K values are enabled or disabled by default:
Router#show ip protocols
Routing Protocol is "eigrp 1"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Default networks flagged in outgoing updates
Default networks accepted from incoming updates
EIGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
EIGRP maximum hopcount 100
EIGRP maximum metric variance 1
Redistributing: eigrp 1
EIGRP NSF-aware route hold timer is 240s
Automatic network summarization is not in effect
Maximum path: 4
Routing for Networks:
1.1.1.0/24
192.168.12.0
Routing Information Sources:
Gateway Distance Last Update
192.168.12.2 90 00:14:30
Distance: internal 90 external 170
In this example where I used the show ip protocols
command, you can see which K-values are enabled by default. Only K1 and K3 are enabled by default.
Let’s walk through the different metric components to see what they are:
Bandwidth:
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
If you use the show interface FastEthernet 0/0
command, you can see the interface information. The example above only shows part of the output. You can see the bandwidth is 100000 Kbit, which is a 100Mbit interface. We can change the bandwidth of an interface:
Router(config)#interface fa0/0
Router(config-if)#bandwidth ?
<1-10000000> Bandwidth in kilobits
inherit Specify that bandwidth is inherited
receive Specify receive-side bandwidth
Router(config-if)#bandwidth 500
Bandwidth is a static value that can be changed by using the bandwidth command. Keep in mind this doesn’t change the actual bandwidth of the interface! This command is ONLY used to influence routing protocols like EIGRP. It’s not like you can slow down electric signals through a wire…if you want to limit the traffic on an interface, you’ll need QoS (Quality of Service), which is a story for another day!
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 100 usec,
Here, you see the result of changing the bandwidth on the interface. Something to remember is that EIGRP will use the lowest bandwidth in the path from A to B (since this is the bottleneck).
Load:
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
The load will show you how busy the interface is based on the packet rate and the bandwidth on the interface. This value can change over time, so it’s a dynamic value.
Delay:
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
The delay reflects the time it will take for packets to cross the link and is a static value. Cisco IOS will have default delay values for the different types of interfaces. A FastEthernet interface has a default delay of 100 usec.
Router(config)#interface fa0/0
Router(config-if)#delay ?
<1-16777215> Throughput delay (tens of microseconds)
Router(config-if)#delay 50
If you use the delay
command you can change this value to influence routing protocols like EIGRP. It doesn’t actually change the delay for this interface, but it is only used to influence routing protocols.
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 500 usec,
Above, you see the delay that I changed. EIGRP will accumulate all the delay values in the path from A to B.
Reliability:
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 500 usec,
reliability 255/255, txload 1/255, rxload 1/255
Reliability at 255/255 is 100%. This means that you don’t have issues with the physical or data-link layer. If you are having issues, this value will decrease. Since this is something that can change, it’s a dynamic value.
MTU:
Router#show interfaces fastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
Hardware is AmdFE, address is cc02.58a9.0000 (bia cc02.58a9.0000)
Internet address is 192.168.12.1/24
MTU 1500 bytes, BW 500 Kbit, DLY 500 usec,
reliability 255/255, txload 1/255, rxload 1/255
MTU, or Maximum Transmission Unit, is being exchanged between EIGRP neighbors but not used for the metric calculation.
By default, only K1 and K3 are enabled, and we don’t use K2 or K4. This means that only bandwidth and delay are used in the formula.
Why not? Because loading and reliability are dynamic values, and they can change over time. You don’t want your EIGRP routers calculating 24/7 and sending updates to each other just because the load or reliability of an interface has changed. We want routing protocols to be nice and quiet and only base their routing decisions on static values like bandwidth and delay. If you only use those two static values, our EIGRP routers don’t have to do any recalculation unless an interface goes down or a router crashes.
Since only K1 and K3 are enabled, we can simplify the EIGRP formula:
- Bandwidth: [107 / minimum bandwidth in the path] * 256.
- Delay: sums of delays in the path multiplied by 256 (in tens of microseconds).
So the formula looks like:
The multiplication of 256 is done so that EIGRP is compatible with IGRP (the predecessor of EIGRP).
Let me show you an example so we can break down this formula:
Hello Rene,
this was a really good post! One statement that I personally dont liked:
“ou don’t want your EIGRP routers calculating 24/7 and sending updates to each other just because the load or reliability of an interface has changed. We want routing protocols to be nice and quiet and only base their routing decisions on static values like bandwidth and delay.”
I think everyone would love to have a routing protocol that dynamically adapts to the network state but the processing overhead for the routers in your network would be a nightmare.
Thank you for this post.
Marek
Hi Rene,
AFAIK the formula when considered only BW and delay should be:
Metric= [ (10^7/ Minimum BW) + (sum of delay/10) ] * 256
Hello Rene,
Excellent explanation on the metric values used by EIGRP to determine “best” path (route) to take when trying to reach another non-local network. I always was curious how 'best" path was determine by EIGRP when deciding which way to send the packet when multiple paths exists, excellent. Of course this has no real bearing on “stub” networks I take.
Thanks again for your concise explanations on Networking w/ Cisco
Darren
Hi Darren,
You are welcome. If you want to take a closer look at this then I can recommend to boot up some routers and look at the EIGRP topology table. Spend some time looking at the successor and feasible successor routers and check why it installed certain things in the routing table.
Rene
sorry i figured it out, myself, smaller metric is better, its all for influencing, i understand that now, thanks