简介
本文档介绍基于Cisco IOS® XE的设备上的思科快速转发(CEF)功能。与其他思科路由器不同,基于Cisco IOS XE的路由器在本质上不仅在硬件方面是模块化的,而且在软件方面也是模块化的。由于这种性质,大多数功能和协议的行为也略有不同。您还将了解如何在基于Cisco IOS XE的设备上维护CEF表,以及在Cisco IOS XE平台上管理CEF更新时如何管理大型边界网关协议(BGP)表。
Cisco IOS XE平台上的CEF行为
XE平台内的CEF表更新
在Cisco IOS XE设备(如ASR1000)上,控制平面与转发平面分开。无论何时需要将任何更新从控制平面传递到数据平面,它都必须通过流程图中显示的数据流。例如,如果CEF在控制平面上每次获知任何前缀时,此更新会从控制平面(IOSd)传递到控制平面的转发管理器(FMAN-RP)。 控制平面上的转发管理器使用内核实用程序(如lsmpi、超传输(HT)链路等),以便将更新传递到转发平面(ESP)转发管理器(FMAN-FP)。 转发管理器将更新发送到量子流处理器(QFP),该处理器对QFP微码进行编程,以便最终对QFP子系统进行编程,该QFP子系统在思科聚合服务路由器(ASR)设备中实际转发数据包。
您可以使用各种命令来检查每个软件模块上的CEF更新。这是该过程的分步过程。
要检查控制平面上的CEF:
Router#show ip cef
Prefix Next Hop Interface
0.0.0.0/0 no route
0.0.0.0/8 drop
0.0.0.0/32 receive
1.1.1.1/32 10.10.10.1 GigabitEthernet0/0/0
2.2.2.2/32 receive Loopback1
10.10.10.0/24 attached GigabitEthernet0/0/0
10.10.10.0/32 receive GigabitEthernet0/0/0
Router#show platform software ip rp active cef summary
Forwarding Table Summary
Name VRF id Table id Protocol Prefixes State
------------------------------------------------------------------------------------------------
Default 0 0 IPv4 20 OM handle: 0x404a4df8
Router#show platform software ip rp active cef detail
Forwarding Table
0.0.0.0/0 -> OBJ_ADJ_NOROUTE (0), urpf: 5
Prefix Flags: Default, Default route handler
OM handle: 0x404a91e8
0.0.0.0/8 -> OBJ_ADJ_DROP (0), urpf: 13
Prefix Flags: unknown
OM handle: 0x404bd5e8
0.0.0.0/32 -> OBJ_ADJ_RECEIVE (0), urpf: 12
Prefix Flags: Receive
OM handle: 0x404bd298
1.1.1.1/32 -> OBJ_ADJACENCY (16), urpf: 20
Prefix Flags: unknown
OM handle: 0x404fec70
要检查转发平面(ESP)中的CEF详细信息:
Router#show platform software ip fp active cef detail
Forwarding Table
0.0.0.0/0 -> OBJ_ADJ_NOROUTE (0), urpf: 5
Prefix Flags: Default, Default route handler
aom id: 73, HW handle: 0x4310df8 (created)
0.0.0.0/8 -> OBJ_ADJ_DROP (0), urpf: 13
Prefix Flags: unknown
aom id: 90, HW handle: 0x4362cd8 (created)
0.0.0.0/32 -> OBJ_ADJ_RECEIVE (0), urpf: 12
Prefix Flags: Receive
aom id: 86, HW handle: 0x4333568 (created)
127.0.0.0/8 -> OBJ_ADJ_DROP (0), urpf: 13
Prefix Flags: unknown
aom id: 91, HW handle: 0x4387048 (created)
224.0.0.0/4 -> OBJ_ADJ_DROP (0), urpf: 13
Prefix Flags: unknown
aom id: 92, HW handle: 0x43870d8 (created)
Router#show platform software ip fp active cef summary
Forwarding Table Summary
Name VRF id Table id Protocol Prefixes State
------------------------------------------------------------------------------------------------
Default 0 0 IPv4 20 hw: 0x43010a8 (created)
当您在设备上遇到CEF问题时,也可以使用这些命令。例如,虽然已获知路由,但前缀无法到达。您可以深入查看所有模块,查看所有CEF表是否已正确更新。
检查CEF邻接
以类似方式,您可以进一步检查CEF邻接表,以获取有关邻接前缀的所有第2层信息。
要检查控制平面上的CEF邻接关系:
Router#show adjacency gigabitEthernet 0/0/0 detail
Protocol Interface Address
IP GigabitEthernet0/0/0 10.10.10.1(11)
72772 packets, 4622727 bytes
epoch 0
sourced in sev-epoch 0
Encap length 14
0062EC6B89000062EC6BEC000800
L2 destination address byte offset 0
L2 destination address byte length 6
Link-type after encap: ip
ARP
Router#show platform software adjacency rp active
Number of adjacency objects: 4
Adjacency id: 0x10 (16)
Interface: GigabitEthernet0/0/0, IF index: 8, Link Type: MCP_LINK_IP
Encap: 0:62:ec:6b:89:0:0:62:ec:6b:ec:0:8:0
Encap Length: 14, Encap Type: MCP_ET_ARPA, MTU: 1500
Flags: no-l3-inject
Incomplete behavior type: None
Fixup: unknown
Fixup_Flags_2: unknown
Nexthop addr: 10.10.10.1
IP FRR MCP_ADJ_IPFRR_NONE 0
OM handle: 0x404ea1d8
您需要注意邻接ID,以便检查转发平面中有关此特定邻接的详细信息。在本例中,邻接ID为16。
要检查转发平面上的CEF邻接关系:
Router#show platform software adjacency fp active index 16
Number of adjacency objects: 4
Adjacency id: 0x10 (16)
Interface: GigabitEthernet0/0/0, IF index: 8, Link Type: MCP_LINK_IP
Encap: 0:62:ec:6b:89:0:0:62:ec:6b:ec:0:8:0
Encap Length: 14, Encap Type: MCP_ET_ARPA, MTU: 1500
Flags: no-l3-inject
Incomplete behavior type: None
Fixup: unknown
Fixup_Flags_2: unknown
Nexthop addr: 10.10.10.1
IP FRR MCP_ADJ_IPFRR_NONE 0
aom id: 114, HW handle: 0x43ae148 (created)
此处,您看到CEF邻接信息填充在FP的转发管理器(FMAN)中。FMAN FP将此信息发送到QFP客户端驱动程序,该驱动程序对QFP转发表进行编程,该转发表最终将用于转发。从上一命令复制硬件句柄,以检查QFP上的转发信息。
Router#show pla hard qfp act feature cef-mpls adjacency handle 0x43ae148
Adj Type: : IPV4 Adjacency
Encap Len: : 14
L3 MTU: : 1500
Adj Flags: : 0
Fixup Flags: : 0
Output UIDB: :
Interface Name: GigabitEthernet0/0/0
Encap: : 00 62 ec 6b 89 00 00 62 ec 6b ec 00 08 00
Next Hop Address: : 10.10.10.1
Lisp Fixup HW Ptr: : 0x767b28f0
Next HW OCE Ptr: : 00000000
CM HW Ptr:: 946947588
Fixup_Falgs_2: : 0
在这里,您知道所有邻接表都已正确更新,并且路由器已准备好转发。但是,隔离的整个过程需要大量命令,并且需要在一定级别上了解模块化架构。因此,为简化此过程,最近引入了一个命令,该命令提供来自所有模块的整合信息。
注意:对于路由表较长的设备,此命令可能需要几分钟才能运行。
命令为show ip cef platform detail。
观察到的常见现象
对于在路由器上获悉大量前缀的情况下的所有Cisco IOX XE模块化设备,通常需要一些时间对所有转发模块中的所有前缀进行编程。在位于提供商边缘的路由器上,从ISP获取完整的BGP路由表时,经常会出现这种情况。
在技术支持中心中,很少有情况显示在BGP会话启动后,甚至BGP路由在路由表中更新,前缀在一段时间内都无法到达。通常需要20-30秒,并且取决于路由器平台来ping这些前缀。例如,以下是测试场景:
Pagent是流量生成器工具,用于将100万条BGP路由推送到ASR1002HX路由器。
您会看到,即使BGP路由在设备上获知,并且控制平面CEF表已更新,内部网络仍无法在几秒钟内ping获知的前缀。根据CEF讨论,您显然需要在每个软件模块上更新CEF条目。在由于ESP转发表中未更新前缀而无法访问的特定场景中,您可以看到此行为的一个后果。以下是ASR1002HX的一些输出供参考。
BGP表使用全部100万条路由进行更新。
Router#show ip bgp summary
BGP router identifier 1.1.1.1, local AS number 100
BGP table version is 1, main routing table version 1
1000002 network entries using 248000496 bytes of memory
1000002 path entries using 128000256 bytes of memory
100002/0 BGP path/bestpath attribute entries using 26400528 bytes of memory
100000 BGP AS-PATH entries using 5402100 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 407803380 total bytes of memory
BGP activity 8355774/7355772 prefixes, 9438985/8438983 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.10.10.2 4 100 5 2 1 0 0 00:00:58 1
20.20.20.2 4 100 100002 3 1 0 0 00:01:02 1000000
虽然BGP表有100万个前缀,但转发管理器CEF表只获知了48613个前缀。
如果等待20-30秒,您会看到具有100万个前缀的完全更新的FP CEF表。
Router#show platform software ip fp active cef summary
Forwarding Table Summary
Name VRF id Table id Protocol Prefixes State
------------------------------------------------------------------------------------------------
Default 0 0 IPv4 48613 hw: 0x2edce98 (created)
结论
处理基于Cisco IOS XE的模块化架构设备以转发相关问题时,必须从所有软件模块验证转发表相关信息。解释的BGP场景可视为此平台的预期行为,因为设备需要几秒钟来更新所有软件模块中的前缀。