2.2 构建EIGRP拓扑表
EIGRP邻居关系一旦建立,就会开始交换路由信息。EIGRP使用更新数据包来交换这类信息。所有从邻居收到的路由信息都会存储在一个EIGRP拓扑表中。
EIGRP使用DUAL计算到达远程网络的最优路由。一条路由要想被插入到路由表中,它就必须满足可行性条件,这个条件的作用是在EIGRP网路中避免环路。有到达目的网络最低度量的路由称为将被插入路由表的候选路由。如果存在其余的路由,它们必须满足可行性条件才能成为备份路由,以便在主路由不可用的情况下,路由器仍可将数据包转发到目的网络。
为了计算每个目的网络的开销,EIGRP使用一个复杂的度量值,这个值默认由带宽和延迟组成。
在完成本节内容的学习后,读者将能够:
描述EIGRP邻居如何交换路由信息;
描述EIGRP如何选择经过网络的最优路径;
描述EIGRP度量是如何计算出来的;
计算EIGRP度量;
描述可行性条件如何避免了EIGRP网络中出现环路;
理解EIGRP的选路过程。
2.2.1 构建及考察EIGRP拓扑表
本节会介绍不同类型的EIGRP数据包,并深入解读EIGRP拓扑表,同时还会介绍EIGRP如何选择到达目的网络的最优路径。
本节首先将会根据图 2-6 所示拓扑中EIGRP的配置方法,来讨论EIGRP的数据包类型。
管理员在BR路由器上配置EIGRP之前,使用命令debug eigrp packets启用了EIGRP调试功能,如例2-16所示。
例2-16 观察BR上的EIGRP
BR# debug eigrp packet
(UPDATE, REQUEST, QUERY, REPLY, HELLO, IPXSAP, PROBE, ACK, STUB, SIAQUERY,
SIAREPLY)
EIGRP Packet debugging is on
在例 2-17 中,接下来,管理员在 BR 上使用自治系统号 100 启用了 EIGRP,但只在Loopback 0和Ethernet 0/0接口上启用了这个协议。观察了debug进程中的Hello数据包之后,管理员禁用了调试功能。
例2-17 观察BR上的EIGRP Hello包
BR(config)# router eigrp 100
BR(config-router)# network 192.168.1.0 0.0.0.255
BR(config-router)# network 172.16.1.0 0.0.0.3
*Oct 8 15:20:19.227: EIGRP: Sending HELLO on Ethernet0/0
*Oct 8 15:20:19.227: AS 100, Flags 0x0:(NULL), Seq 0/0 interfaceQ 0/0 iidbQ un/
rely 0/0
*Oct 8 15:20:19.235: EIGRP: Received HELLO on Ethernet0/0 nbr 172.16.1.1
*Oct 8 15:20:19.235: AS 100, Flags 0x0:(NULL), Seq 0/0 interfaceQ 0/0
*Oct 8 15:20:19.235: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 172.16.1.1
(Ethernet0/0) is up: new adjacency
*Oct 8 15:20:19.261: EIGRP: Enqueueing UPDATE on Ethernet0/0 tid 0 iidbQ un/rely
0/1 serno 1-2
*Oct 8 15:20:19.266: EIGRP: Sending UPDATE on Ethernet0/0 tid 0
*Oct 8 15:20:19.266: AS 100, Flags 0x0:(NULL), Seq 2/0 interfaceQ 0/0 iidbQ un/
rely 0/0 serno 1-2
*Oct 8 15:20:19.274: EIGRP: Received ACK on Ethernet0/0 nbr 172.16.1.1
*Oct 8 15:20:19.275: AS 100, Flags 0x0:(NULL), Seq 0/2 interfaceQ 0/0 iidbQ un/
rely 0/0 peerQ un/rely 0/1
<Output omitted>
*Oct 8 15:20:19.253: EIGRP: Received UPDATE on Ethernet0/0 nbr 172.16.1.1
*Oct 8 15:20:19.253: AS 100, Flags 0x0:(NULL), Seq 2/0 interfaceQ 0/0 iidbQ un/
rely 0/0 peerQ un/rely 0/1
*Oct 8 15:20:19.360: EIGRP: Enqueueing ACK on Ethernet0/0 nbr 172.16.1.1 tid 0
*Oct 8 15:20:19.360: Ack seq 2 iidbQ un/rely 0/0 peerQ un/rely 1/0
*Oct 8 15:20:19.364: EIGRP: Sending ACK on Ethernet0/0 nbr 172.16.1.1 tid 0
*Oct 8 15:20:19.364: AS 100, Flags 0x0:(NULL), Seq 0/2 interfaceQ 0/0 iidbQ un/
rely 0/0 peerQ un/rely 1/0
BR# no debug all
在WAN链路172.16.1.0/30上启用EIGRP进程后,EIGRP会立即开始发送和接收Hello数据包。发送和接收Hello数据包的过程是单向的,也就是说路由器会使用组播不可靠地发送Hello数据包,也并不会等待另一端发送确认消息。在BR路由器从HQ邻居收到一个Hello数据包后,它就会动态建立一个新的EIGRP邻接关系。Hello数据包会周期性地进行发送,以检查邻居的有效性。
路由更新与发送和接收Hello数据包的过程不同,它的发送和接收是双向的。更新消息中包含有路由信息,这种消息会通过可靠的方式进行发送,也就是说路由器会等待每个发送出去的更新包都能收到一个对应的确认包。反之亦然,每个接收到的更新包也都必须进行确认。这个传输可靠数据包的过程由两个步骤组成:在接口加入队列和捆绑路由更新,以及向邻居发送可靠的数据包。debug命令的输出信息中显示了发送和接收更新以及确认数据包这两个独立的过程。
debug输出信息中,“Seq...”部分之后的数字分别表示序号和确认号。认真查看debug输出可以发现,每个用可靠方式发出的数据包都有一个序列号。确认成功接收的确认包必须携带与接收到的数据包相同的编号。
接下来,我们使用命令show ip eigrp traffic验证了EIGRP数据包的流量统计信息,如例2-18所示。
例2-18 验证BR上的EIGRP包流量
BR# show ip eigrp traffic
EIGRP-IPv4 Traffic Statistics for AS(100)
Hellos sent/received: 65/67
Updates sent/received: 9/7
Queries sent/received: 0/0
Replies sent/received: 0/0
Acks sent/received: 5/5
SIA-Queries sent/received: 0/0
SIA-Replies sent/received: 0/0
Hello Process ID: 101
PDM Process ID: 63
Socket Queue: 0/10000/2/0 (current/max/highest/drops)
Input Queue: 0/2000/2/0 (current/max/highest/drops)
show ip eigrp traffic命令显示了各类EIGRP数据包发送和接收的信息。这条命令在排错时可能会非常有用,经常与其他的EIGRP show和debug命令组合起来使用。这条命令的输出信息显示了Hello数据包、更新包、确认包以及查询和应答的统计信息。
路由器执行路由计算,且没有到达目的网络的备用路径时,就会发送查询包。这个数据包会以组播的形式可靠地发送给邻居,以确认它们是否有到达目的的备用路径。
发送应答数据包的目的是回应请求包。应答数据包是以单播形式可靠发送的。
在BR路由器上,可以使用命令show ip route eigrp验证EIGRP路由,如例2-19所示。
例2-19 验证BR上的EIGRP路由
BR# show ip route eigrp
Codes: L - local, 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, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.0.0/24 [90/409600] via 172.16.1.1, 18:20:16, Ethernet0/0
D EX 209.165.201.0/27 [170/537600] via 172.16.1.1, 18:20:16, Ethernet0/0
show ip route eigrp命令的输出信息中显示了路由表中的EIGRP路由。在输出信息中,可以看到两条EIGRP路由,一条标记为D,另一条标记为D EX。代码D表示EIGRP内部路由。
内部路由源自一个EIGRP自治系统内,表示将EIGRP中配置的一个直连网络视为内部网络,且在EIGRP自治系统中传播。而外部路由则是通过其他路由协议学来并重分布到EIGRP中的路由。这类路由由代码D EX表示。
方括号中的数字分别代表AD值和EIGRP度量值。“via”之后的IPv4地址表示下一跳IPv4地址(本例中为172.16.1.1),在最后可以看到各路由的出接口。
在BR配置的最后,剩下的两个接口Ethernet 0/1和Serial 0/2都被配置到了EIGRP进程中,如例2-20所示。
例2-20 在BR上配置network命令
BR(config)# router eigrp 100
BR(config-router)# network 172.16.2.0 0.0.0.3
BR(config-router)# network 172.16.3.0 0.0.0.3
在这个拓扑中配置和验证EIGRP的过程,将在下一节继续介绍。
选择最优路径
EIGRP使用DUAL计算到达目的网络的最优路径。这种算法使用距离信息(也称为组合度量)来选择高效、无环的路径。
DUAL通过累加两个值来计算此组合度量。第一个值是从邻居路由器到目的网络的度量值。由于这个值是报告给路由器的,因此称为通告距离(Reported Distance,RD)。在许多书中,读者也会看到通告距离(Advertised Distance)这个术语。第二个值是从本地路由器到达报告第一个值的那台路由器的度量值。在从本地路由器到目的网络的所有度量中,路由器会选择最小的组合度量值,并将其视为到达某个特定目的的最优路径。而这个所选的值称为可行距离(Feasible Distance,FD)。
度量值最小的路由称为后继路由,下一跳路由器为后继路由器。如果有多个路由器到目的网络的FD相同,则可能存在多个后继路由器。此时,EIGRP就会把所有的后继路由插入到路由表中。默认情况下最多可以将4条后继路由添加到路由表中。
可行后继路由器是一个有无环路径的下一跳路由器,它到达目的网络的开销比后继路由器大。当拓扑表中的特定前缀有多个路由存在时,路由器会验证这条路由是否是无环拓扑的一部分。为此,路由器会采用一个简单的规则,要求其他备份路由的RD总是小于最优路径的FD,这称为可行性条件。满足这个条件的路由就会被视为是一条备份路由,且被称为可行后继路由。下一跳路由器则称为可行后继路由器。
继续我们在上一节中的配置,在例2-21中,管理员使用show ip eigrp topology命令查看了BR EIGRP拓扑表的内容。请读者观察有关HQ LAN 192.168.0.0/24的信息。
例2-21 在BR上验证EIGRP拓扑表
BR# show ip eigrp topology
EIGRP-IPv4 Topology Table for AS(100)/ID(192.168.1.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 172.16.2.0/30, 1 successors, FD is 1536000
via Connected, Ethernet0/1
P 192.168.0.0/24, 1 successors, FD is 409600
via 172.16.1.1 (409600/128256), Ethernet0/0
via 172.16.2.1 (1664000/128256), Ethernet0/1
P 192.168.1.0/24, 1 successors, FD is 128256
via Connected, Loopback0
P 172.16.3.0/30, 1 successors, FD is 2169856
via Connected, Serial2/0
P 172.16.1.0/30, 1 successors, FD is 281600
via Connected, Ethernet0/0
P 209.165.201.0/27, 1 successors, FD is 537600
via 172.16.1.1 (537600/426496), Ethernet0/0
via 172.16.2.1 (1792000/426496), Ethernet0/1
EIGRP拓扑表是一个包含从所有EIGRP邻居学到的所有前缀的数据表。前缀之前的代码P表示该前缀是被动状态。当DUAL没有执行任何计算来发现可能的备份路径时,路由就会被认为是被动的。对于所有路由,被动状态都既是正常状态,也是理想状态。当所有路由都处于被动状态下时,网络就是完全收敛的。
只要有至少一个合法到达目的且满足FC的路径,路由就会保持在被动状态。可行性条件是EIGRP内部解决路由环路问题的根本途径。为了完全理解FC,读者必须首先理解其他的两个重要概念:通告距离和可行距离。
EIGRP中的距离或组合度量是一个整数,用来比较去往相同目的网络的不同路径。每个接收到的路由都会包含通告距离,而且这个值会被存储到EIGRP拓扑表中,可以在输出信息括号中第二个数的位置看到。对于去往网络192.168.0.0/24的路径,两条路径的值均为128256。
到达目的的总开销是括号中的第一个数,这个数值反映了通告距离加上达到邻居的开销之和。网络192.168.0.0/24通过接口Ethernet 0/0的总开销是409600,通过接口Ethernet 0/1的总开销则是1664000。
到达目的网络的最优路径是根据去往目的的最低总开销比较出来的。最优路径会成为后继路由,而后继路由路径的总开销值就会成为FD。
其余路径成为候选可行后继路由。一个路径如果要成为可行后继,必须满足可行性条件。路径的通告距离必须小于可行距离。
注释
如果希望比较全面地了解DUAL,请参阅Routing Protocols Companion Guide(Cisco Press,2014)。
下面我们继续讨论之前的情形,在例2-22中,管理员通过show ip route eigrp命令查看了BR路由表中的EIGRP路由。
例2-22 验证BR上的EIGRP路由
BR# show ip route eigrp
Codes: L - local, 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, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.0.0/24 [90/ 409600] via 172.16.1.1, 02:32:24, Ethernet0/0
D EX 209.165.201.0/27 [170/537600] via 172.16.1.1, 02:32:24, Ethernet0/0
在分析了拓扑表中的所有路由后,EIGRP就会尝试只将后继路由添加到路由表中。如果路由器从其他更可信的路由源那里学习到了相同的目的网络,那么EIGRP后继路由就不会插入到路由表中。可行后继路由会保留在拓扑表中,以备后继路由失效。
BR拓扑表中所有接到的路由都可以通过命令show ip eigrp topology all-links进行查看,如例2-23所示。
例2-23 在BR上验证EIGRP拓扑表中的所有网络
BR# show ip eigrp topology all-links
EIGRP-IPv4 Topology Table for AS(100)/ID(192.168.1.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 172.16.2.0/30, 1 successors, FD is 1536000, serno 4
via Connected, Ethernet0/1
via 172.16.3.1 (3449856/1536000), Serial2/0
via 172.16.1.1 (1561600/1536000), Ethernet0/0
P 192.168.0.0/24, 1 successors, FD is 409600, serno 2
via 172.16.1.1 (409600/128256), Ethernet0/0
via 172.16.3.1 (256512000/256000000), Serial2/0
via 172.16.2.1 (1664000/128256), Ethernet0/1
P 192.168.1.0/24, 1 successors, FD is 128256, serno 6
via Connected, Loopback0
P 172.16.3.0/30, 1 successors, FD is 2169856, serno 5
via Connected, Serial2/0
via 172.16.1.1 (2195456/2169856), Ethernet0/0
via 172.16.2.1 (3449856/2169856), Ethernet0/1
P 172.16.1.0/30, 1 successors, FD is 281600, serno 1
via Connected, Ethernet0/0
via 172.16.3.1 (2195456/281600), Serial2/0
via 172.16.2.1 (1561600/281600), Ethernet0/1
P 209.165.201.0/27, 1 successors, FD is 537600, serno 3
via 172.16.1.1 (537600/426496), Ethernet0/0
via 172.16.3.1 (256512000/256000000), Serial2/0
via 172.16.2.1 (1792000/426496), Ethernet0/1
命令show ip eigrp topology all-links可以显示出到达目的网络的所有可能的路径。除了后继路由和可行后继路由之外,拓扑表中也有可能包含非后继路由。非后继路由是不满足可行性条件的路由。输出信息显示,到达网络192.168.0.0/24有三条可能的路径。通过下一跳172.16.3.1的路径通告距离为256000000,大于路由的可行距离409600。因为不满足可行条件,因此通过172.16.3.1的路径就不是候选的后继。在没有满足FC的路由时,路由器会对前缀重新执行路径计算;路由就会进入活跃状态,路由器则会开始向邻居请求替代路由。
接下来,例2-24显示了从BR路由器到HQ IP地址192.168.0.1的连续ping命令。
例2-24 从BR到192.168.0.1的连续ping命令
BR# ping 192.168.0.1 repeat 100000 size 1000
Type escape sequence to abort.
Sending 100000, 1000-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<Output omitted>
因为路由表中只有一条后继路由,而路由表中拥有两条满足可行性条件的路由,Internet控制消息协议(Internet Control Message Protocol,ICMP)流量会使用通过172.16.1.0/24的路径。
在例2-25中,HQ的Ethernet 0/0接口被管理员禁用,后面的输出信息为BR上的ping过程。
例2-25 HQ Ethernet 0/0接口关闭和在BR上观察到的结果
HQ(config)# interface Ethernet 0/0
HQ(config-if)# shutdown
*Oct 10 18:47:09.312: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 172.16.1.2
(Ethernet0/0) is down: interface down
*Oct 10 18:47:11.313: %LINK-5-CHANGED: Interface Ethernet0/0, changed state to
administratively down
*Oct 10 18:47:12.313: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0,
changed state to down
BR#
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!.....
*Oct 9 22:04:24.088: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 172.16.1.1
(Ethernet0/0) is down: holding time expired.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<Output omitted>
在关闭HQ上的Ethernet 0/0接口后,接口上的线路协议状态立即变为down,且HQ上的EIGRP取消了通过此接口建立的邻居关系。然而,HQ端接口的状态没有被传送到对应的BR接口上。因此,BR上的EIGRP进程将不会立即声明通过Ethernet 0/0的EIGRP邻居关系断开。在没有接收到Hello数据包且保持计时器已过期之后,BR才会意识到链路另一端已经没有了活跃的对端。
在默认情况下,EIGRP在以太网接口上收敛需要花费15秒的时间。在这段时间窗口内的ICMP包会被丢弃。BR意识到邻居出现了故障,于是开始使用通过172.16.2.0/30链路的可行后继路由来转发ICMP数据包。
链路的2层状态并不反映邻居设备的操作状态,这种情况在现实世界中相当常见。如果需要加速收敛,可以调整EIGRP计时器,也可以部署其他的状态监测机制。
如果连续的ping还没完成,可以使用组合键Ctrl+Shift+6来终止ping操作。
例2-26显示了BR上的路由表。
例2-26 BR上的EIGRP路由
BR# show ip route eigrp
Codes: L - local, 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, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.0.0/24 [90/1664000] via 172.16.2.1, 00:33:49, Ethernet0/1
D EX 209.165.201.0/27 [170/1792000] via 172.16.2.1, 00:33:49, Ethernet0/1
此前指向172.16.2.0/30链路的可行后继路由现在成为了后继路由,而且被插入到了路由表中。
在例2-27中,管理员使用show ip eigrp topology命令查看了BR上的拓扑表。
例2-27 BR上有新后继的EIGRP拓扑表
BR# show ip eigrp topology
EIGRP-IPv4 Topology Table for AS(100)/ID(192.168.1.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 172.16.2.0/30, 1 successors, FD is 1536000
via Connected, Ethernet0/1
P 192.168.0.0/24, 1 successors, FD is 409600
via 172.16.2.1 (1664000/128256), Ethernet0/1
P 192.168.1.0/24, 1 successors, FD is 128256
via Connected, Loopback0
P 172.16.3.0/30, 1 successors, FD is 2169856
via Connected, Serial2/0
P 172.16.1.0/30, 1 successors, FD is 281600
via Connected, Ethernet0/0
P 209.165.201.0/27, 1 successors, FD is 537600
via 172.16.2.1 (1792000/426496), Ethernet0/1
当后继路由失效之后,只有通过Ethernet 0/1接口的路由才能满足可行性条件。之前的可行后继路由现在成为了后继路由,并且也会出现在拓扑表和路由表中。第三条通过172.16.3.0/24的路由不满足可行性条件,也没有出现在show ip eigrp topology命令的输出信息中。
在例2-28中,管理员在BR上对HQ进行了连续的ping。在ping期间,管理员禁用了HQ的Ethernet 0/1接口。
例2-28 在BR上进行连续的ping且禁用HQ接口
BR# ping 192.168.0.1 repeat 100000 size 1000
Type escape sequence to abort.
Sending 100000, 1000-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<Output omitted>
-------------------------------------------------------------------
HQ(config)# interface ethernet 0/1
HQ(config-if)# shutdown
*Oct 10 20:42:45.548: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 172.16.2.2
(Ethernet0/1) is down: interface down
*Oct 10 20:42:47.543: %LINK-5-CHANGED: Interface Ethernet0/1, changed state to
administratively down
*Oct 10 20:42:48.543: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/1,
changed state to down
-------------------------------------------------------------------
BR#
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!......!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!
*Oct 10 20:42:56.443: %DUAL-5-NBRCHANGE: EIGRP-IPv4 100: Neighbor 172.16.2.1
(Ethernet0/1) is down: holding time expired
!!!!!!!!!!!
<Output omitted>
在HQ路由器上关闭Ethernet 0/1接口后,使用当前后继路由的EIGRP邻居关系就会终止。最后一个满足可行性条件的路由从拓扑和路由表中消失。DUAL计算开始,目的192.168.0.0/24进入活跃状态。BR路由器发送一个叫作查询的特殊包,用来询问邻居是否有路由可以到达丢失的那个前缀。数据包会通过唯一剩下的活跃路径172.16.3.0/30到达路由器HQ。HQ通过应答包响应查询消息,确认自己没有到达那个网络的替换路径。当BR收到应答包时,新路径的计算过程结束。
在DUAL计算期间,192.168.0.0/24会处于活跃状态。收敛过程会造成丢包,因为BR上通过172.16.2.0/30链路的EIGRP邻居的保持计时器必须过期,且路由器必须执行DUAL计算。
在BR通过后继路径检测到邻居不可达,而EIGRP计算出到达目的网络的新合法路径的这段期间,ICMP数据包会被丢弃。虽然拓扑表中所选的路由在之前的示例中不满足可行性条件,但由于拓扑表中没有了另外两条路由,因此这条路由现在成了唯一可用的路由。所以,这条路由会被选为后继路由并添加在路由表中。
如果连续的ping还没完成,可以使用组合键Ctrl+Shift+6来终止ping操作。
在例2-29中,管理员使用了命令show ip route eigrp来查看BR上路由表中的内容。
例2-29 使用新后继的BR路由表
BR# show ip route eigrp
Codes: L - local, 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, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
D 192.168.0.0/24 [90/256512000] via 172.16.3.1, 00:32:19, Serial2/0
D EX 209.165.201.0/27 [170/256512000] via 172.16.3.1, 00:32:19, Serial2/0
HQ和BR之间唯一剩下的可用路径现在启用,并且出现在了拓扑表和路由表中。
2.2.2 EIGRP中的路由信息交换
路由器在交换路由信息之前,必须首先建立EIGRP邻居关系。会话建立后,路由器之间就会立即交换更新包,通告EIGRP拓扑表中的路由信息。切记,只有最优路径才会被通告给邻居。所以EIGRP使用的唯一路由,也就是后继路由,会被通告出去。
除了接收到的路由信息之外,拓扑表中还有两个其他的本地源:
使用network命令通告的EIGRP直连接口的子网;
通过从其他路由协议或路由信息源重分布到EIGRP中的子网。
重分布是一种把路由信息从一个源通告到另一个路由协议中的方法。在相同自治系统中使用多个路由协议时,常常需要使用重分布。另一个常见的使用情况是,管理员希望将已经定义的静态路由包含到某个特定的路由协议中。
2.2.3 EIGRP度量
EIGRP使用组合度量来判断到达目的网路的最优路径。获取度量值的公式中会使用下列参数。
带宽:本地路由器和目的之间所有链路的最小带宽。
延迟:源和目的之间的所有链路延迟的累加和。
可靠性:这个值代表的是源和目的之间的最差可靠性(基于keepalive值)。
负载:这个值代表的是源和目的之间链路的最差负载值(基于数据包速率和接口的配置带宽)。
读者可能会发现在许多图书和网上的文章中,最大传输单元(MTU)也会用于EIGRP的度量计算。虽然MTU值确实会在路由更新中与其他度量元素一起交换,但它从不会用于度量计算之中。只有在存在太多等价路径,路由器需要忽略一些到达相同目的的等价路径时,MTU才会被路由器用来充当决胜因素。此时,首选使用有最高的最小MTU值的路由。
在默认情况下,EIGRP只会使用带宽和延迟来计算度量值。计算过程中也会将接口负载和可靠性包含在内,虽然Cisco不建议使用这些参数。路由域中的所有路由器必须使用相同的元素计算度量,只在一台路由器上更改度量的计算参数可能会因环境不一致导致连通性问题。
用于度量计算的元素是由度量权重确定的,这个值也称为K值。默认的K值是:K1=1,K2=0,K3=1,K4=0,K5=0。如果K值被设置为默认值,那么路由器就只会基于带宽和延迟的值计算度量值。
可以使用show ip protocols命令来查看K值的设置。
2.2.4 EIGRP度量的计算
为了计算指定目的网络的组合度量值,EIGRP会使用以下公式:
度量 = [(K1 带宽+ [(K2 带宽) / (256 – 负载)] + K3 延迟) K5/(K4 + 可靠性)] * 256
如果K4和K5被设置为默认值,即0,那么公式中的K5/(K4 + 可靠性)这一部分就不会使用;也是就是该值会被设置为1。这个公式也相当于被简化为了:
度量 = (K1 带宽+ [(K2 带宽) / (256 – 负载)] + K3 延迟) 256
如果考虑默认的K1-K3值,即K1=K3=1,K2=0,EIGRP的度量值公式则会被简化为:
度量 = (带宽+延迟) * 256
应注意不建议更改K值。
EIGRP度量计算使用的延迟和带宽值的格式与show interface命令显示出来的不同。EIGRP延迟值是路径上延迟的总和,单位是十毫秒,而show interface命令的输出信息则是以毫秒来显示延迟值的。EIGRP带宽是使用链路上最小带宽链路进行计算的,单位是千比特每秒(kilobits per second),并用这个数值除以107。带宽与延迟的和需要乘以256,这是为了确保EIGRP度量值对EIGRP前身,也就是IGRP的兼容。
注释
show interface输出信息中显示出来的延迟值不是测量出来的,而是计算出来的。Cisco IOS会通过协商,或者根据管理员配置的接口带宽来计算这个数值。
注释
如需全面了解EIGRP度量值的计算方法,可以参阅Routing ProtocolsCompanion Guide(Cisco Press,2014)。
EIGRP宽度量
EIGRP的组合开销度量值对于高带宽的接口或者是以太网通道(Ethernet channels)不能很好地扩展,会导致路由行为不正确或者不一致。管理员可以给接口配置的最低延迟值是10毫秒。因此,高速接口,如10吉比特以太网接口或聚合在一起的高速接口(GEether channe),在EIGRP看来就是一个GE接口。这可能造成预料之外的等价负载分担。
为了解决这类问题,管理员可以采用EIGRP宽度量(EIGRP Wide Metric)特性,来支持64位度量值计算和路由信息库(Routing Information Base,RIB)扩展,这个特性最多可以支持4.2兆兆比特接口(直连接口、或者通过像port channel或EtherChannel这类通道技术组成的接口)。
64比特的度量计算只能工作在EIGRP命名模式配置中。EIGRP经典模式则会使用32位度量进行计算。EIGRP命名模式的配置会在本章稍后的内容中进行讨论。
EIGRP宽度量超出了本书的讨论范围。更多信息请参见Cisco.com文档EIGRP Wide Metrics,地址为http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_eigrp/configuration/15-mt/ire-15-mt-book/ire-wid-met.pdf。
2.2.5 EIGRP度量计算示例
在图2-7中,R1有两条到达R4后方网络的路径。图中显示了多条链路的带宽(Mbit/s)和延迟值(毫秒)。下面我们来判断两条路径的EIGRP度量值。
2-7
图2-7 R1有两条到达R4后方网络的路径
上面那条路径的计算过程如下。
1.顶端路径(R1-R2-R3-R4)的最低带宽是10 Mbit/s(10000 kbit/s)。这条路径的EIGRP带宽计算过程为:
带宽 =(107 /千比特每秒的最小带宽)
带宽 =(10000000 / 10000)=1000
2.顶端路径的延迟为:
延迟 =[(延迟 R1 → R2) + (延迟 R2 → R3) + (延迟 R3 → R4)]
延迟 = [4000 + 1000 + 5000] = 10000 [十毫秒]
3.因此,顶端路径的EIGRP度量计算过程为:
度量 =(带宽 +延迟)*256
度量 =(1000 + 10000)*256 = 2816000
下面那条路径的计算过程如下。
1.底端路径(R1-R5-R6-R7-R4)的最低带宽是50000kbit/s。这条路径的EIGRP带宽计算过程为:
带宽 =(107 /千比特每秒的最小带宽)
带宽 =(10000000 / 50000)= 200
2.底端路径的延迟为:
延迟 =[(延迟 R1 → R5) + (延迟 R5→ R6) + (延迟 R6→ R7)+ (延迟 R7→ R4)]
延迟 = [1000 + 3000 + 1000 + 2000 ] = 7000 [十毫秒]
3.因此,底端路径的EIGRP度量计算过程为:
度量 =(带宽 +延迟)*256
度量 =(200 + 7000)*256 = 1843200
因此,R1选择了下面的路径,因为这条路径的度量值更低—1843200,而上面那条路径的度量值则为2816000。R1会采用下面的路径,将R5作为下一跳路由器,因此IP路由表中的度量为1843200。上面路径的瓶颈是10Mbit/s那条链路,这也是为什么路由器会选用下方的路径。因为这意味着将数据传输到R4的速率最多只能是10Mbit/s。而在下面那条路径中,最低速率是50Mbit/s,这表示吞吐率可以达到这样的速率。因此,下面这条路径是更好的选择—比如说,我们可以以更快的速度传输大型文件。
2.2.6 可行性条件
可行性条件可以让EIGRP域内部保持无环的状态。前缀必须满足可行性条件才能成为一个可行后继路由,其通告距离必须低于后继路由的可行距离。这是EIGRP确保网络拓扑无环的主要方式。
为了说明可行性条件的重要性,请参考图2-8。路由器D以度量值5将自己的LAN网络通告给路由器B和C。路由器B和C分别将自己的度量值5和10增加到去往路由器D LAN网络的距离中,然后将这些距离通告给路由器A。路由器A将B发来的通告加上一个链路度量值3,将从C发来的通告加上一个链路度量值2。由此得出,从A到D的最优路径是穿越B的路径,因为A-B-D路径的度量值是13,而A-C-D路径的度量值则是17。
假设在路由器C上,路由器A和C之间链路的水平分割被禁用了片刻。当路由器A通告从A到C的最优路径度量13时,路由器C可能会使用增加后的度量值15将相同的路由通告回路由器A。此时,路由器A不知道路由器C到底是拥有去往路由器D LAN网络的其他路径还是它将最优路径的路由通告回了自己。但因为通过路由器C的RD比最优路径的FD大,路由器A还是不会使用来自路由器C的RD。这就是路由器A保证EIGRP域无环的方式。
2.2.7 EIGRP路径计算示例
图2-9是一个RD的计算示例。R1到达网络10.0.0.0/8有几种选择。R2、R4和R8都向R1发送了一条更新消息,每条更新中都包含了一个RD,这是由邻居路由器计算出来的、通向通告的网络10.0.0.0/8的开销。
图2-10是一个计算FD的示例。R1到达网络10.0.0.0/8有几个可用选项。三个邻居的每个更新各有不同的RD。R1会通过累加到R2、R4和R8的本地链路开销和每条路径上的RD,来计算每条到达网络10.0.0.0/8路径的距离。到达目的的最低度量路径是穿越R2的路径。因此10.0.0.0/8网络的FD等于31。
如需全面了解EIGRP度量值的计算方法及示例,可以参阅Routing Protocols Companion Guide(Cisco Press,2014)。