EIGRP拥有三张表:邻居表,拓扑表和路由表,储存在邻居表中的是所有与此设备建立邻居关系的设备,用主IP地址和指向这个邻居的接口标识。储存在拓扑表中的是所有邻居设备宣告的所有目的路由,并且记录他们的度量值与这台邻居设备到达目的网络的度量值,而到达目的网络最优的度量值的路由叫后继路由,此路由会放在路由表中并通告给其他邻居。路由表就不必多说了,由EIGRP协议选出的后继路由会插入到现有路由表中,协议标识为D,管理距离有90, 170和5三种。
1. R1发送Hello包
2. R2收到R1 发送的Hello包,并且向R1 发送Hello包将R1作为自己的邻居
3. R2向自己的邻居(R1)发送Update包,包括自己的完整路由信息
4. R1收到R2的Hello包,并把R2作为自己的邻居
5. R1收到R2的Update包,将其中信息存入拓扑表并对此数据包回应,发送ACK确认包
6. R1向自己的邻居(R2)发送Update包,包括自己的完整路由信息
7. R2收到R1的ACK确认包,确定R1收到了自己的路由信息
8. R2收到R1的Update包,将其中信息存入拓扑表并对此数据包回应,发送ACK确认包
我们以以下拓扑图为例:
对R1进行基本配置:
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
对R2进行基本配置:
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 192.168.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 0/1
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
对R3进行基本配置:
R3(config)#interface fastEthernet 0/1
R3(config-if)#ip address 192.168.2.2 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.3.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface loopback 0
R3(config-if)#ip address 3.3.3.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
对R4进行基本配置:
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 192.168.3.2 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#exit
R4(config)#interface loopback 0
R4(config-if)#ip address 4.4.4.4 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#exit
以上就是这四台路由器的基本配置,接下来我们进行EIGRP实验,首先在R1,R2,R3三台路由器上启动EIGRP,配置命令如下:
R1上的配置命令:
R1(config)#router eigrp 100
R1(config-router)#no auto-summary
R1(config-router)#network 1.1.1.1 0.0.0.255
R1(config-router)#network 192.168.1.0 0.0.0.255
R2上的配置命令:
R2(config)#router eigrp 100
R2(config-router)#no auto-summary
R2(config-router)#network 2.2.2.2 0.0.0.255
R2(config-router)#network 192.168.1.0 0.0.0.255
R2(config-router)#network 192.168.2.0 0.0.0.255
R3上的配置命令:
R3(config)#router eigrp 100
R3(config-router)#no auto-summary
R3(config-router)#network 192.168.2.0 0.0.0.255
R3(config-router)#network 3.3.3.3 0.0.0.255
R3(config-router)#network 192.168.3.0 0.0.0.255
我们使用router eigrp as号 这条命令来进入EIGRP配置,no auto-summary用来关闭自动汇总(稍后介绍),使用network 网段ip 反掩码(通配符掩码)来宣告想要让其他设备知道的路由,反掩码就是与掩码相反,即1,0互换。
进行这般配置之后我们来查看一下R1的路由表:
R1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
C 1.1.1.0 is directly connected, Loopback0
2.0.0.0/24 is subnetted, 1 subnets
D 2.2.2.0 [90/409600] via 192.168.1.2, 00:06:03, FastEthernet0/0
3.0.0.0/24 is subnetted, 1 subnets
D 3.3.3.0 [90/435200] via 192.168.1.2, 00:05:23, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/0
D 192.168.2.0/24 [90/307200] via 192.168.1.2, 00:05:53, FastEthernet0/0
D 192.168.3.0/24 [90/332800] via 192.168.1.2, 00:02:44, FastEthernet0/0
标识为D的路由条目为通过EIGRP学习获得,由此可见我们已经将(R2,R3)所有通过network宣告的路由学习到了。
以D 192.168.2.0/24 [90/307200] via 192.168.1.2, 00:05:53, FastEthernet0/0为例这里D表示此条路由通过EIGRP学习,90为EIGRP的管理距离,307200为此条路由的度量值(FD) via 192.168.1.2为下一跳路由器,后面FastEthernet0/0是出接口
我们再R2上查看一下邻居关系:
R2#show ip eigrp neighbors
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 192.168.2.2 Fa0/1 14 00:07:44 87 522 0 6
0 192.168.1.1 Fa0/0 13 00:08:16 709 4254 0 4
H为会话建立顺序,Address为对端的IP地址,Interface为连接对端的端口,Hold为在没有收到对方消息以至于宣布邻居不可达之前等待的总时间,Uptime为邻居建立的总时间,SRTT为(数据包)平均往返时间,RTO为重传超时,若路由器发送了需要ACK应答的数据包但并没有收到回应,会等待RTO的时间后重新发送(最多16次),若还是没有收到,那么就会取消邻居关系。RTO时间根据种种因素计算而出,并不确定。
也可以使用以下语句查询:
R2#show ip eigrp neighbors detail
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 192.168.2.2 Fa0/1 13 00:21:24 87 522 0 6
Version 12.4/1.2, Retrans: 1, Retries: 0, Prefixes: 2
0 192.168.1.1 Fa0/0 10 00:21:57 709 4254 0 4
Version 12.4/1.2, Retrans: 0, Retries: 0, Prefixes: 1
Retrans为数据包重传的次数,Retries为尝试重传的次数,Prefixes为收到前缀的数量。
使用以下语句可以查看活跃的EIGRP端口:
R2#show ip eigrp interfaces
IP-EIGRP interfaces for process 100
Xmit Queue Mean Pacing Time Multicast Pending
Interface Peers Un/Reliable SRTT Un/Reliable Flow Timer Routes
Lo0 0 0/0 0 0/1 0 0
Fa0/0 1 0/0 709 0/2 3444 0
Fa0/1 1 0/0 87 0/2 376 0
EIGRP有Hello计时器和保持计时器两种计时器,Hello计时器控制的是发送Hello包的时间(默认为5s),保持计时器控制的是未收到Hello包后超出计时器范围就会取消邻居关系(默认为15s,三倍发送时间)。在低速NVMA链路上Hello计时器和保持计时器分别为60s和180s。
需要注意的是链路两端必须要拥有相同的计时器才能建立邻居关系,打个比方,假如一方A的Hello计时器和保持计时器为5s和15s,而另一方B的Hello计时器和保持计时器为20s和60s,那么就会在已经超出A的保持计时器时间而B还没有到下一个Hello包发送时间。这样邻居关系就会被A取消。
我们可以再R2上使用以下命令来查看Hello包发送情况:
R2#debug eigrp packets hello
EIGRP Packets debugging is on
(HELLO)
R2#
*Mar 1 00:42:26.395: EIGRP: Sending HELLO on FastEthernet0/1
*Mar 1 00:42:26.395: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
R2#
*Mar 1 00:42:27.799: EIGRP: Received HELLO on FastEthernet0/1 nbr 192.168.2.2
*Mar 1 00:42:27.803: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
*Mar 1 00:42:28.575: EIGRP: Sending HELLO on Loopback0
*Mar 1 00:42:28.575: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
*Mar 1 00:42:28.583: EIGRP: Received HELLO on Loopback0 nbr 2.2.2.2
*Mar 1 00:42:28.583: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0
R2#
*Mar 1 00:42:30.483: EIGRP: Sending HELLO on FastEthernet0/0
*Mar 1 00:42:30.483: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
*Mar 1 00:42:30.731: EIGRP: Received HELLO on FastEthernet0/0 nbr 192.168.1.1
*Mar 1 00:42:30.735: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
*Mar 1 00:42:31.343: EIGRP: Sending HELLO on FastEthernet0/1
*Mar 1 00:42:31.343: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
R2#
*Mar 1 00:42:32.595: EIGRP: Received HELLO on FastEthernet0/1 nbr 192.168.2.2
*Mar 1 00:42:32.599: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
由此可见默认情况确实是每5s发送一次EIGRP Hello包。
我们使用如下命令来修改EIGRP计时器:
R2(config)#int f0/0
R2(config-if)#ip hello-interval eigrp 100 10
R2(config-if)#ip hold-time eigrp 100 30
R2(config-if)#exit
R2(config)#exit
R2#show ip eigrp interfaces detail fastEthernet 0/0
IP-EIGRP interfaces for process 100
Xmit Queue Mean Pacing Time Multicast Pending
Interface Peers Un/Reliable SRTT Un/Reliable Flow Timer Routes
Fa0/0 1 0/0 709 0/2 3444 0
Hello interval is 10 sec
Next xmit serial <none>
Un/reliable mcasts: 0/4 Un/reliable ucasts: 3/3
Mcast exceptions: 2 CR packets: 1 ACKs suppressed: 0
Retransmissions sent: 0 Out-of-sequence rcvd: 0
Authentication mode is not set
Use multicast
可见已经修改成功。
拓扑表中储存的是所有的从邻居收到的路由信息,而一条路由想要被插入路由表中,就必须满足可行性条件,这个条件就是EIGRP防止网络出现环路的方法。到达相同路径的路由中,度量最低的路由成为后继路由,而其他路由只有满足一定条件才可以成为备用的路由,在这里称为可行后继路由,旨在当后继路由出现故障无法到达目的地时代替后继路由转发数据以保持网络畅通。
称为可行后继路由器的条件为AD
所以最优路径成为后继路由之后,满足条件的路由会变成可行后继路由,这个条件就是可行后继路由的AD必须小于到达目的网络的FD。如果有多个路由到达目的网络的度量值相同,则可能出现多个后继路由,EIGRP会将他们都插入到路由表中并且等价负载均衡(默认最多4个)。而可行后继路由是一个度量值大于FD但它的AD小于FD的路由(保证无环路),对应的路由器称为可行后继路由器。