In another lesson I explained the different EIGRP packets and their function. In this lesson we’ll take a close look at the EIGRP neighbor adjacency to see what exactly happens when EIGRP routers become neighbors. This is what happens when you enable EIGRP on two routers:
We have 2 routers called R1 and R2 and they are configured for EIGRP. As soon as we enable it for the interface they will start sending hello packets. In this example R1 is the first router to send a hello packet.
As soon as R2 receives the hello packet from R1 it will respond by sending update packets that contain all the routing information that it has in its routing table. The only routes that are not sent on this interface are the one that R2 learned on this interface because of split-horizon. The update packet that R2 will send has the initialization bit set so we know this is the “initialization process”. At this moment there is still no neighbor adjacency until R2 has sent a hello packet to R1.
R1 is of course not the only one sending hello packets. As soon as R2 sends a hello packet to R1 we can continue to setup a neighbor adjacency.
After both routers have exchanged hello packets we will establish the neighbor adjacency. R1 will send an ACK to let R2 know he received the update packets. The routing information in the update packets will be saved in the EIGRP topology table.
R2 is anxious to receive routing information as well so R1 will send update packets to R2 who will save this information in its EIGRP topology table.
After receiving the update packets R2 will send an ACK back to R1 to let him know everything is ok.
Want to see what this looks like on a real router? Let’s use the following topology and see what happens:
This is the topology I’m going to use to configure EIGRP. My goal is to have full connectivity and here are the configurations:
R1(config)#router eigrp 1 R1(config-router)#no auto-summary R1(config-router)#network 184.108.40.206 0.0.0.255 R1(config-router)#network 192.168.12.0 R1(config-router)#exit
R2(config)#router eigrp 1 R2(config-router)#no auto-summary R2(config-router)#network 220.127.116.11 0.0.0.255 R2(config-router)#network 192.168.12.0 R2(config-router)#exit
Let’s break this one down. Router eigrp 1 will start up EIGRP using AS (autonomous system) number 1. This number has to match on both routers or we won’t become EIGRP neighbors.
No auto-summary is needed because by default EIGRP will behave like a classful routing protocol which means it won’t advertise the subnet mask along the routing information. In this case that means that 18.104.22.168/24 and 22.214.171.124/24 will be advertised as 126.96.36.199/8 and 188.8.131.52/8. Disabling auto-summary will ensure EIGRP sends the subnet mask along.
Network 184.108.40.206 0.0.0.255 mean that I’m advertising the 220.127.116.11 network with wildcard 0.0.0.255. If I don’t specify the wildcard you’ll find “network 18.104.22.168” in your configuration. Does it matter? Yes and no. The same thing applies to “network 22.214.171.124 /24”. It will work but also means that every interface that falls within the 126.96.36.199/8 or 188.8.131.52/8 range is going to run EIGRP. Network 192.168.12.0 without a wildcard mask is fine since I’m using a /24 on this interface which is Class C.
If you are working on a lab and are lazy (like me) you can also type in network 0.0.0.0 which will activate EIGRP on all of your interfaces…if that’s what you want of course.
Let’s do a debug on R2 to see what is going on:
R2#debug eigrp packets ? SIAquery EIGRP SIA-Query packets SIAreply EIGRP SIA-Reply packets ack EIGRP ack packets hello EIGRP hello packets ipxsap EIGRP ipxsap packets probe EIGRP probe packets query EIGRP query packets reply EIGRP reply packets request EIGRP request packets retry EIGRP retransmissions stub EIGRP stub packets terse Display all EIGRP packets except Hellos update EIGRP update packets verbose Display all EIGRP packets <cr>
As you can see we have a LOT of debug options for EIGRP. I want to see the hello packets…
R2#debug eigrp packets hello EIGRP Packets debugging is on (HELLO) R2# EIGRP: Received HELLO on FastEthernet0/0 nbr 192.168.12.1 AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
Looking good seems we have received a hello packet from R1.
R2# EIGRP: Sending HELLO on FastEthernet0/0 AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
And we are sending hello packets to R1 as well.
R1# %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 192.168.12.2 (FastEthernet0/0) is up: new adjacency
R2# %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 192.168.12.1 (FastEthernet0/0) is up: new adjacency
You can see we have an EIGRP neighbor adjacency.
R2# EIGRP: Sending HELLO on Loopback0 AS 1, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 EIGRP: Received HELLO on Loopback0 nbr 184.108.40.206 AS 1, Flags 0x0, Seq 0/0 idbQ 0/0
Hmm interesting it seems R2 is schizophrenic and sending hello packets to its loopback0 interface and also receiving them.
This behavior is normal because the network command does two things:
- Send EIGRP packets on the interface that falls within the network command range.
- Advertise the network that is configured on the interface in EIGRP.
So what do you have to do when you want to advertise a network without sending EIGRP packets on the interface and forming EIGRP neighbors?