6. Understand EIGRP Query

1、理解EIGRP的路由更新机制。 
2、掌握EIGRP的调试命令。 
3、掌握stub的配置及使用路由汇总限制EIGRP的查询范围。

 

上图:

image.png


配置好IP地址,确认连接正常,配置好EIGRP,R1上环回口使用通配符掩码配置EIGRP

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#router eigrp 50
R1(config-router)#network 192.168.1.0
R1(config-router)#network 172.16.0.0
R1(config-router)#network 10.1.1.0 0.0.0.255
R1(config-router)#no au
R1(config-router)#exit

 

在R2上使用debug命令跟踪EIGRP的更新:

R2#debug eigrp fsm( 调试eigrp的dual算法)
EIGRP FSM Events/Actions debugging is on
R2#debug eigrp packets query(调试eigrp的查询包)
EIGRP Packets debugging is on
    (QUERY)

 

在R1上使用shutdown命令重激活loopback接口,模拟网络出错:

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int lo0
R1(config-if)#shutdown
R1(config-if)#no 
*Mar  1 00:22:30.475: %LINK-5-CHANGED: Interface Loopback0, changed state to administratively down
*Mar  1 00:22:31.475: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to down
R1(config-if)#no sh

*Mar  1 00:22:37.943: %LINK-3-UPDOWN: Interface Loopback0, changed state to up
*Mar  1 00:22:38.943: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up

 

观察R2上的日志信息:

*Mar  1 00:22:06.751: EIGRP: Received QUERY on Serial0/0 nbr 172.16.1.1(R1查询10.1.1.0/24的网络路由)
*Mar  1 00:22:06.755:   AS 50, Flags 0x0, Seq 31/32 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0

*Mar  1 00:22:06.755: DUAL: rcvquery: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295, RD is 2297856
*Mar  1 00:22:06.755: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2297856
*Mar  1 00:22:06.759: DUAL:     172.16.1.1 metric 4294967295/4294967295
*Mar  1 00:22:06.759: DUAL:     172.16.1.6 metric 2323456/409600 found Dmin is 2323456(这里找到了,下面是回复)
*Mar  1 00:22:06.759: DUAL: send REPLY(r1/n1) about 10.1.1.0/24 to 172.16.1.1(回复R1,话说R2可以通过R3到达10.1.1.0/24,其实是因为时间差的原因才导致这个结果,事实上R3也不可达)
*Mar  1 00:22:06.763: DUAL: RT installed 10.1.1.0/24 via 172.16.1.6(发现172.16.1.1到不了目标网络,而172.16.1.6可达,所以把172.16.1.6作为可达10.1.1.0/24的条目装进路由表)
*Mar  1 00:22:06.763: DUAL: Send update about 10.1.1.0/24.  Reason: metric chg
*Mar  1 00:22:06.763: DUAL: Send update about 10.1.1.0/24.  Reason: new if
*Mar  1 00:22:06.847: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.1, infosource 172.16.1.1
*Mar  1 00:22:06.863: EIGRP: Received QUERY on Serial0/1 nbr 172.16.1.6(R3发现自己到不了10.1.1.0/24,就跑来问R2)
*Mar  1 00:22:06.863:   AS 50, Flags 0x0, Seq 32/35 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
*Mar  1 00:22:06.863: DUAL: rcvquery: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295, RD is 2323456
*Mar  1 00:22:06.863: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2323456
*Mar  1 00:22:06.863: DUAL:     172.16.1.6 metric 4294967295/4294967295 not found Dmin is 4294967295(找不到路)
*Mar  1 00:22:06.867: DUAL: Peer total 2 stub 0 template 2
*Mar  1 00:22:06.867: DUAL: Dest 10.1.1.0/24 entering active state.
*Mar  1 00:22:06.867: DUAL: Set reply-status table. Count is 2.
*Mar  1 00:22:06.871: DUAL: Not doing split horizon
*Mar  1 00:22:06.871: DUAL: Going from state 1 to state 3
*Mar  1 00:22:06.875: EIGRP: Enqueueing QUERY on Serial0/0 iidbQ un/rely 0/1 serno 25-25
*Mar  1 00:22:06.879: EIGRP: Enqueueing QUERY on Serial0/0 nbr 172.16.1.1 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 25-25
*Mar  1 00:22:06.879: EIGRP: Sending QUERY on Serial0/0 nbr 172.16.1.1(向R1找去10.1.1.0/24的路)
*Mar  1 00:22:06.883:   AS 50, Flags 0x0, Seq 37/31 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 25-25
*Mar  1 00:22:06.883: EIGRP: Enqueueing QUERY on Serial0/1 iidbQ un/rely 0/1 serno 25-25
*Mar  1 00:22:06.887: EIGRP: Enqueueing QUERY on Serial0/1 nbr 172.16.1.6 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 25-25
*Mar  1 00:22:06.887: EIGRP: Sending QUERY on Serial0/1 nbr 172.16.1.6(向R3找去10.1.1.0/24的路)
*Mar  1 00:22:06.891:   AS 50, Flags 0x0, Seq 38/32 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 25-25
*Mar  1 00:22:06.915: DUAL: dest(10.1.1.0/24) active
*Mar  1 00:22:06.915: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295
*Mar  1 00:22:06.915: DUAL: reply count is 2
*Mar  1 00:22:06.915: DUAL: Clearing handle 0, count now 1
*Mar  1 00:22:06.915: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.1, infosource 172.16.1.1(移除)
*Mar  1 00:22:06.915: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295
*Mar  1 00:22:06.915: DUAL: reply count is 1
*Mar  1 00:22:06.915: DUAL: Clearing handle 1, count now 0
*Mar  1 00:22:06.915: DUAL: Freeing reply status table
*Mar  1 00:22:06.915: DUAL: Find FS for dest 10.1.1.0/24. FD is 4294967295, RD is 4294967295 found
*Mar  1 00:22:06.915: DUAL: send REPLY(r1/n1) about 10.1.1.0/24 to 172.16.1.6
*Mar  1 00:22:06.919: DUAL: Going from state 3 to state 1
*Mar  1 00:22:06.947: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.6, infosource 172.16.1.6(移除)
*Mar  1 00:22:06.947: DUAL: No routes.  Flushing dest 10.1.1.0/24(到此收敛,历时约200ms)

 

根据提示,可以发现共有4查询包,与之相对应的会产生4个回复包。如果在实际应用中,使用EIGRP的网络可以多达数十台及数百台路由,那么如果出现某个网络出错,则有可以引起整个网络产生大量的查询回复包。所以为了避免这样的问题,可以使用ip summary命令或stub参数来进行配置EIGRP,限制EIGRP的查询范围。

 

在R1和R3上配汇总:

R1(config-if)#interface Serial1/0

R1(config-if)# ip summary-address eigrp 50 10.1.1.0 255.255.255.0

 

R3(config-if)#interface Serial1/0
R3(config-if)# ip summary-address eigrp 50 10.1.1.0 255.255.255.0

 

再观察R2和R3上的路由表,确认已经学习到10.1.1.0/24的网络汇总路由:

R2#show ip route eigrp 
     10.0.0.0/24 is subnetted, 1 subnets
D       10.1.1.0 [90/2297856] via 172.16.1.1, 00:05:15, Serial0/0
D    192.168.1.0/24 [90/2195456] via 172.16.1.6, 00:11:49, Serial0/1
                    [90/2195456] via 172.16.1.1, 00:11:49, Serial0/0

R2#ping 10.1.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/25/44 ms

 

R3#show ip route eigrp 
     172.16.0.0/30 is subnetted, 2 subnets
D       172.16.1.0 [90/2195456] via 192.168.1.1, 00:08:47, Ethernet0/0
     10.0.0.0/24 is subnetted, 1 subnets
D       10.1.1.0 [90/409600] via 192.168.1.1, 00:06:27, Ethernet0/0

R3#ping 10.1.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/28/36 ms

 

在R1上重激活loopback0接口,观察R2日志信息:

*Mar  1 01:07:13.127: EIGRP: Received QUERY on Serial0/0 nbr 172.16.1.1(收到查询)
*Mar  1 01:07:13.131:   AS 50, Flags 0x0, Seq 71/92 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
*Mar  1 01:07:13.131: DUAL: rcvquery: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295, RD is 2297856
*Mar  1 01:07:13.131: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2297856
*Mar  1 01:07:13.131: DUAL:     172.16.1.1 metric 4294967295/4294967295
*Mar  1 01:07:13.135: DUAL:     172.16.1.6 metric 2323456/409600 found Dmin is 2323456
*Mar  1 01:07:13.135: DUAL: send REPLY(r1/n1) about 10.1.1.0/24 to 172.16.1.1
*Mar  1 01:07:13.139: DUAL: RT installed 10.1.1.0/24 via 172.16.1.6
*Mar  1 01:07:13.139: DUAL: Send update about 10.1.1.0/24.  Reason: metric chg
*Mar  1 01:07:13.139: DUAL: Send update about 10.1.1.0/24.  Reason: new if
*Mar  1 01:07:13.159: EIGRP: Received QUERY on Serial0/1 nbr 172.16.1.6
*Mar  1 01:07:13.159:   AS 50, Flags 0x0, Seq 77/94 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1
*Mar  1 01:07:13.163: DUAL: rcvquery: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295, RD is 2323456
*Mar  1 01:07:13.163: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2323456
*Mar  1 01:07:13.163: DUAL:     172.16.1.6 metric 4294967295/4294967295
*Mar  1 01:07:13.167: DUAL:     172.16.1.1 metric 4294967295/4294967295 not found Dmin is 4294967295
*Mar  1 01:07:13.167: DUAL: Peer total 2 stub 0 template 2
*Mar  1 01:07:13.167: DUAL: Dest 10.1.1.0/24 entering active state.
*Mar  1 01:07:13.167: DUAL: Set reply-status table. Count is 2.
*Mar  1 01:07:13.171: DUAL: Not doing split horizon
*Mar  1 01:07:13.171: DUAL: Going from state 1 to state 3
*Mar  1 01:07:13.227: EIGRP: Enqueueing QUERY on Serial0/0 iidbQ un/rely 0/1 serno 57-57
*Mar  1 01:07:13.231: EIGRP: Enqueueing QUERY on Serial0/0 nbr 172.16.1.1 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 57-57
*Mar  1 01:07:13.231: EIGRP: Sending QUERY on Serial0/0 nbr 172.16.1.1
*Mar  1 01:07:13.235:   AS 50, Flags 0x0, Seq 97/71 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 57-57
*Mar  1 01:07:13.255: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295
*Mar  1 01:07:13.255: DUAL: reply count is 2
*Mar  1 01:07:13.255: DUAL: Clearing handle 0, count now 1
*Mar  1 01:07:13.259: EIGRP: Enqueueing QUERY on Serial0/1 iidbQ un/rely 0/1 serno 57-57
*Mar  1 01:07:13.263: EIGRP: Enqueueing QUERY on Serial0/1 nbr 172.16.1.6 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 57-57
*Mar  1 01:07:13.263: EIGRP: Sending QUERY on Serial0/1 nbr 172.16.1.6
*Mar  1 01:07:13.263:   AS 50, Flags 0x0, Seq 98/77 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 57-57
*Mar  1 01:07:13.291: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295
*Mar  1 01:07:13.291: DUAL: reply count is 1
*Mar  1 01:07:13.291: DUAL: Clearing handle 1, count now 0
*Mar  1 01:07:13.291: DUAL: Freeing reply status table
*Mar  1 01:07:13.291: DUAL: Find FS for dest 10.1.1.0/24. FD is 4294967295, RD is 4294967295 found
*Mar  1 01:07:13.291: DUAL: send REPLY(r1/n1) about 10.1.1.0/24 to 172.16.1.6
*Mar  1 01:07:13.295: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.1, infosource 172.16.1.1
*Mar  1 01:07:13.295: DUAL: Going from state 3 to state 1
*Mar  1 01:07:13.327: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.6, infosource 172.16.1.6
*Mar  1 01:07:13.331: DUAL: No routes.  Flushing dest 10.1.1.0/24

 

通过配置完汇总,可以看到本次查询中还是有四次,有了汇总还是会查询汇总,这里看不到效果,但实际应用中这种做法还是有可能有效的,为了能彻底解决此问题,在R2上配置EIGRP stub(末节)特性,某些不必要的查询。

R2(config)#router eigrp 50
R2(config-router)#eigrp stub

 

在R1或是R3的任一路由器上查看邻居表,观察末节特性:

image.png

 

再次对R1的环回口重新激活,查看R2上的反应:

*Mar  1 01:27:02.727: DUAL: dest(10.1.1.0/24) not active
*Mar  1 01:27:02.727: DUAL: rcvupdate: 10.1.1.0/24 via 172.16.1.1 metric 2297856/128256
*Mar  1 01:27:02.727: DUAL: Find FS for dest 10.1.1.0/24. FD is 4294967295, RD is 4294967295 found
*Mar  1 01:27:02.731: DUAL: RT installed 10.1.1.0/24 via 172.16.1.1
*Mar  1 01:27:02.731: DUAL: Send update about 10.1.1.0/24.  Reason: metric chg
*Mar  1 01:27:02.731: DUAL: Send update about 10.1.1.0/24.  Reason: new if
*Mar  1 01:27:02.743: DUAL: dest(10.1.1.0/24) not active
*Mar  1 01:27:02.743: DUAL: rcvupdate: 10.1.1.0/24 via 172.16.1.6 metric 2323456/409600
R2#
*Mar  1 01:27:02.747: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2297856
*Mar  1 01:27:02.747: DUAL:     172.16.1.1 metric 2297856/128256
*Mar  1 01:27:02.747: DUAL:     172.16.1.6 metric 2323456/409600 found Dmin is 2297856
*Mar  1 01:27:02.747: DUAL: RT installed 10.1.1.0/24 via 172.16.1.1
R2#
*Mar  1 01:27:12.723: DUAL: rcvupdate: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295
*Mar  1 01:27:12.727: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2297856
*Mar  1 01:27:12.727: DUAL:     172.16.1.1 metric 2297856/128256
*Mar  1 01:27:12.727: DUAL:     172.16.1.6 metric 4294967295/4294967295 found Dmin is 2297856
*Mar  1 01:27:12.731: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.6, infosource 172.16.1.6
*Mar  1 01:27:12.731: DUAL: RT installed 10.1.1.0/24 via 172.16.1.1
*Mar  1 01:27:12.739: DUAL: rcvupdate: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295
*Mar  1 01:27:12.739: DUAL: Find FS for dest 10.1.1.0/24. FD is 2297856, RD is 2297856
*Mar  1 01:27:12.739: DUAL:     172.16.1.1 metric 4294967295/4294967295 not found Dmin is 4294967295
*Mar  1 01:27:12.743: DUAL: Peer total 2 stub 0 template 2
*Mar  1 01:27:12.743: DUAL: Dest 10.1.1.0/24 entering active state.
*Mar  1 01:27:12.743: DUAL: Set reply-status table. Count is 2.
*Mar  1 01:27:12.743: DUAL: Not doing split horizon
*Mar  1 01:27:12.755: EIGRP: Enqueueing QUERY on Serial0/1 iidbQ un/rely 0/1 serno 63-63
*Mar  1 01:27:12.755: EIGRP: Enqueueing QUERY on Serial0/0 iidbQ un/rely 0/1 serno 63-63
*Mar  1 01:27:12.759: EIGRP: Enqueueing QUERY on Serial0/1 nbr 172.16.1.6 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 63-63
*Mar  1 01:27:12.759: EIGRP: Enqueueing QUERY on Serial0/0 nbr 172.16.1.1 iidbQ un/rely 0/0 peerQ un/rely 0/0 serno 63-63
*Mar  1 01:27:12.763: EIGRP: Sending QUERY on Serial0/1 nbr 172.16.1.6
*Mar  1 01:27:12.763:   AS 50, Flags 0x0, Seq 111/86 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 63-63
*Mar  1 01:27:12.767: EIGRP: Sending QUERY on Serial0/0 nbr 172.16.1.1
*Mar  1 01:27:12.767:   AS 50, Flags 0x0, Seq 112/82 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 63-63
*Mar  1 01:27:12.811: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.1 metric 4294967295/4294967295
*Mar  1 01:27:12.811: DUAL: reply count is 2
*Mar  1 01:27:12.811: DUAL: Clearing handle 0, count now 1
*Mar  1 01:27:12.819: DUAL: dest(10.1.1.0/24) active
*Mar  1 01:27:12.819: DUAL: rcvreply: 10.1.1.0/24 via 172.16.1.6 metric 4294967295/4294967295
*Mar  1 01:27:12.819: DUAL: reply count is 1
*Mar  1 01:27:12.819: DUAL: Clearing handle 1, count now 0
*Mar  1 01:27:12.819: DUAL: Freeing reply status table
*Mar  1 01:27:12.823: DUAL: Find FS for dest 10.1.1.0/24. FD is 4294967295, RD is 4294967295 found
*Mar  1 01:27:12.823: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.1, infosource 172.16.1.1
*Mar  1 01:27:12.827: DUAL: Removing dest 10.1.1.0/24, nexthop 172.16.1.6, infosource 172.16.1.6
*Mar  1 01:27:12.827: DUAL: No routes.  Flushing dest 10.1.1.0/24

 

 以上信息表明R2没有收到任何关于10.1.1.0/24的查询请求,仅仅是自己发出了查询,数量很少,过程费时约100ms,收敛时间还小于这个数,这在大型网络中很有必要,因此使用汇总和stub可以有效的避免路由出现SIA状态(始终保持active状态),同时解决了EIGRP的路由收敛问题,保证EIGRP的收敛变得简单可行。

 

 

到此结束,搞完收功。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

桂ICP备19000498号-3