Once upon a time, far far away...^A^KPrior to EIGRP, Cisco created the Interior Gateway Routing Protocol or IGRP. IGRP is a distance vector routing protocol, effectively being Cisco's propietary derivative of RIP. A single metric is used to compare routes, however unlike RIP this metric is calculated from several parameters (recall that RIP uses the single Hop Count metric).
IGRP has been discontinued and is no longer available in current versions of IOS. However, it is still interesting to us as it forms the basis for EIGRP. Also, legacy networks may still make use of IGRP (although one would hope that you never have to work with these!).
IGRP aimed to resolve some of the problems that exist with RIP, including:
The IGRP metric is a composite of several measures which the system administrator can configure for each link:
The default values for the coefficients are:
As a result, only Bandwidth and Delay affect the metric in the default configuration.
IGRP allows a network to be broken into administrative areas known as Process Domains. These areas may consist of one or more subnets (of the one network) or multiple networks. In other words, there may be one or multiple process domains within a single autonomous system.
Routers within each domain share routing information amongst themselves (like RIP does). However, routers do not normally share information between areas.
IGRP routes are classified into one of three types - interior routes, system routes or exterior routes. Interior routes are those to a subnet on the network to which the update is being broadcast. System routes are routes to network addresses, as summarised by a network boundary router. Exterior routes are routes to networks that have been marked as a default network - the equivalent to a default route if a more specific match is not found.
Routing between domains can be handled by sysadmins configuring default routes although this becomes an administrative nightmare for big networks.
Inter-area routing can also be handled by configuring routers to distribute routing information from other routing protocols (or processes). This information may be filtered to select only some of the available routes.
Features of IGRP packets:
Generally similar to RIP with the exception that updates are accepted only from within the IGRP Process Domain.
This is very similar to the process used by RIP - IGRP implements the same four timers, split horizon, poisoned reverse and triggered updates. However, IGRP default timers are significantly longer than those implemented by RIP:
This has the advantage of reducing the amount of traffic being generated by the routing protocol. However, it can significantly increase the convergence time for the network (ie. it takes three times as long for IGRP to detect a dead peer, than it does for RIP).
In setting the path metrics, Cisco® have assigned default values for Bandwidth and Delay. These values may be overridden to coerce traffic to flow along particular circuits.
| Media type | Default Bandwidth | Default Delay |
| Fast Ethernet | 100Mbps | 100μs |
| FDDI | 100Mbps | 100μs |
| HSSI | 45045Kbps | 20,000μs |
| Ethernet | 10Mbps | 1,000μs |
| T1 (serial) | 1544Kbps | 20,000μs |
| 56Kbps serial | 56Kbps | 20,000μs |
EIGRP started as an attempt to make a classless version of EIGRP, however it ended up implementing a completely different set of algorithms, whilst retaining several of IGRP's features. EIGRP has been described as a distance vector protocol that acts like a link state protocol - it makes use of features from both designs...
Upon receiving a HELLO packet from a "new" neighbour, a router will reply with a copy of its topology table and an invitation to reply. The neighbour will then reply with its own topology table.
After that a router will periodically (typically every 5 seconds) send a HELLO packet advising that it is still alive and that it expects to send another packet within (typically) 15 seconds (normally three times the HELLO period).
If HELLO packets fail to arrive, the router assumes that the neighbour is dead and deletes the neighbour's routing information from its topology table.
EIGRP uses Reliable Transport Protocol (RTP) to perform reliable delivery of its topology table to its neighbours (a lot like TCP, using sequence numbers and numbered ACKs with timeouts). However unlike TCP, EIGRP insists on receiving an ACK from ALL of its neighbours before proceeding to send the next packet. This has obvous problems when a neighbour is overloaded or a link is flooded.
The topology table is carried in IP packets (protocol type 88 or 0x58) and multicast to address 224.0.0.10.
The ACKS are unicast back (specifically addressed) unreliably.
HELLO packets are multicast to 224.0.0.10 unreliably.
EIGRP maintains both a Topology Table and a Routing Table.
The Topology Table contains knowledge about destinations known to the router and all its neighbours together with a routing metric for each destination.
A rather complicated algorithm, known as the Diffusing Update Algorithm or DUAL, is used to determine the best path to a destination. Diffusing computations are used to determine the shortest-path route in a distributed manner, whist avoiding routing loops. This path is installed in the Routing Table.
Backup routes may be held in the local topology table or may have to be acquired from neighbours (or even further afield). This has the potential to cause a storm of requests. (In "small" networks, the required backup route will often be found in the topology table, so a routing reconfiguration may be almost instantaneous unlike RIP or IGRP).
Convergence may be slow if there is a routing storm and/or some routers are slow to return ACKs.
(Commands entered in Configuration Mode:)
R1(config)# R1(config)#interface Ethernet0/0 R1(config-if)#ip address 192.168.1.254 255.255.255.0 R1(config-if)#no shutdown R1(config-if)#bandwidth 1...10000000 Bandwidth in kilobits R1(config-if)#delay 1...16777215 delay in tens of microseconds R1(config-if)#exit R1(config)#
R1(config)#ip routing
R1(config)# R1(config)#router eigrp 10 10 is the "process" number R1(config-router)#network 192.168.1.0 R1(config-router)#network 192.168.4.0 R1(config-router)#exit R1(config)#
copy running-config startup-config