The Black RackCisco Networking Training Lab

Basic EIGRP

EIGRP is a proprietary routing protocol designed by Cisco, and it is labeled as an advanced distance-vector routing protocol, which means it is not a distance-vector protocol, neither a link state protocol.

Why should I use EIGRP?

EIGRP’s ability to load balance routes with different metrics, summed up with its real fast convergence easily answers this question. But there’s still a problem: It is proprietary. Which means, you should use EIGRP ONLY if your routing network is composed entirely by Cisco Routers, and that’s why it’s not often seen around.

How does it work?

First of all, before EIGRP can send EIGRP packets and exchange its topology database, it needs to form a neighbor relationship with another EIGRP router. For a successfull neighbor relationship,EIGRP has some requirements, listed below:

-> The routers must be able to forward ip packets to each other: This one seems pretty obvious, but checking ip connectivity is never a bad idea.

-> Both routers must have their reachable interfaces in the same subnet: Well, this one seems obvious too, but I would advice to always double-check network masks, specially if you are a beginner :)

-> Reachable interfaces must not be in a passive state: When a router is configured with a passive interface, it will not listen and send EIGRP packets out of that same interface, but it will still advertise the network it belongs to (if configured with the network command, of course)

-> Must pass authentication phase: This one is optional, but deserves attention since authentication is a cool security feature for routing protocols.

-> ASN number MUST match on both routers: When you first enable EIGRP globally, you need to inform your Autonomous System Number.

Router1(config)#router eigrp 36
Router1(config-router)#

-> ‘K’ Values: These values are numbers that influences the metric calculation, and are configurable via an EIGRP router subcommand, and must match on both routers as well.

Router1(config)#router eigrp 36
Router1(config-router)#metric weights 0 7 6 5 4 3
Router1(config-router)#end
Router1#show ip protocols
Routing Protocol is “eigrp 36″
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=7, K2=6, K3=5, K4=4, K5=3

If both routers met those requirements, they should have formed a neighbor relationship. The next step is to exchange their routing table and calculate their metrics. The proccess of exchanging routing information consists first in:

-> Full routing updates: When EIGRP discovers a new neighbor, the router sends a full routing update to populate its neighbor topology database.

-> Continuous hello packets: AKA “Are you there?”. EIGRP constantly checks for its neighbor reachability. If no hello packets are received within the time for the Dead Interval, EIGRP considers its neighbor unreachable, and remove it from its topology table.

-> Partial Updates: These packets are only sent when EIGRP detects new routes or changes to its topology database.

DUAL algorithm

For the calculation, each router sends the Reported Distance (RD) for each route, and calculate the Feasible Distance (FD) using the DUAL algorithm, which will populate their topology table. The reported distance is the metric that is received from a neighbor to reach a certain subnet. FD is actually the total metric value to reach the neighbor, plus its RD to reach a certain subnet.

With these numbers in the topology table, now the router can choose which ones will be added to its routing table. EIGRP considers the neighbor with the lowest FD to a certain subnet as a Successor, which means, this same router will be the gateway for that subnet. EIGRP also stores in the topology table information regarding other paths to that same subnet. If another neighbor advertises its RD with a number lower than the current successor’s FD for that subnet, then the neighbor will be a Feasible Successor, which means that EIGRP will also put this neighbor in the topology table, but not in the routing table. If the successor goes down, then EIGRP quickly checks its topology table (without calculating anything again) and adds its new successor to the routing table (if there’s any). This feature is the one that makes EIGRP’s convergence incredibly fast.

Topology:

null

EX:

R1#show ip route
D 172.16.0.0 [90/33280] via 10.1.1.2, 00:00:32, FastEthernet0/0
R1#show ip eigrp topology
!!!!!!!!omitted!!!!!!!!
P 172.16.0.0/24, 1 successors, FD is 33280
via 10.1.1.2 (33280/7680), FastEthernet0/0 > Successor
via 10.2.2.2 (79360/30720), FastEthernet0/1 > RD Lower than FD for the subnet
!!!!!!!omitted!!!!!!!

###########Link R2-R4 is down!############

R1#show ip route
D 172.16.0.0 [90/79360] via 10.2.2.2, 00:01:49, FastEthernet0/1

R1#show ip eigrp topology all-links
!!!!!!!omitted!!!!!!!!
P 172.16.0.0/24, 1 successors, FD is 33280, UR, serno 26, refcount 2
via 10.2.2.2 (79360/30720), FastEthernet0/1 < New successor
via 10.1.1.2 (Infinity/Infinity), R, FastEthernet0/0, serno 24
!!!!!!!omitted!!!!!!!!

Well, that was kinda basic. Let’s go further.

Controlling neighbor relationships

In a real world environment, sometimes, you will need to control when and where to send and listen to EIGRP packets. That can be for security reasons, or even to reduce multicast traffic over the network.
EIGRP supports some mechanisms that gives us control over these relationships:

-> Passive-interface feature: This feature prevents any EIGRP relationships in the selected interfaces. If the interface is matched using the network command, the route will still be advertised by other EIGRP interfaces. tl;dr, Passive interfaces don’t send or listen to EIGRP packets, but the known subnet are still advertised by other interfaces.

R1(config-router)#passive-interface fa0/1
R1(config-router)#do show ip protocols
Routing Protocol is “eigrp 35″
!!!Omitted!!!
Routing for Networks:
10.0.0.0/24
192.168.0.0
Passive Interface(s):
FastEthernet0/1
!!!Omitted!!!

-> Manual neighbor configuration: When using this method, EIGRP will stop sending and listening to multicast EIGRP packets on that interface. Neighborships will be formed only with the routers and through the interfaces you specify MANUALLY. (Need to configure on BOTH routers)

ps: R2 already configured.

R1(config-router)#neighbor 10.0.0.2 fastEthernet 0/0
R1(config-router)#
*Mar 1 00:08:44.231: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 35: Neighbor 10.0.0.2 (FastEthernet0/0) is up: new adjacency
R1#show ip eigrp neighbors
IP-EIGRP neighbors for process 35
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 10.0.0.2 Fa0/0 14 00:00:04 117 702 0 7
R1#

-> Routing protocol authentication: Last but not least, the mighty “authentication”. It is often used since it provides an extra security layer to the network. The keys can be static or time-based. Some attention is required while configuring this feature. Here follows the basic static key configuration.

R1(config)#key chain AUTHEN > Name of the key-chain
R1(config-keychain)#key ?
Key identifier
R1(config-keychain)#key 1
R1(config-keychain-key)#key-string MYPASS > This string MUST match on both neighbors
R1(config-keychain-key)#exit
R1(config-keychain)#exit
R1(config)#int f0/0 > Select the interface facing the other router
R1(config-if)#ip authentication mode eigrp 35 md5 > Specifies md5 authentication
R1(config-if)#ip authentication key-chain eigrp 35 1 > Specifies which key to use

Well, I hope this post help you understand the basics about EIGRP.

Credits:

PacketLife
Wendell Odom’s CCNP ROUTE Official Cert Guide

Comments (1)

Everything is very open with a precise clarification of the challenges.

It was truly informative. Your website is useful. Many thanks for sharing!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>