Cisco IOS® 软件支持几种机制来简化数据流转发,以降至最低延迟,提高吞吐量。本文档介绍如何确定您的数据包所采用的 Cisco IOS 交换或转发路径。
注意: 本文讨论进程交换,仅快速交换和思科快速转发(CEF)。
本文档的读者应掌握以下主题的相关知识:
Cisco IOS 软件
Cisco 1600、2500 和 3600 系列平台
本文档不限于特定的软件和硬件版本。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
Cisco IOS 交换定义流经路由器的数据包。更明确的是,它能够确定数据包通过路由器的转发速度,并能够确定数据包存储在哪些物理缓冲。
在 Cisco IOS 的发展历程中,开发了多种交换方法。某些方法仅在特定平台上受支持。CEF 是最新的交换方法。如果全局启用 CEF(默认行为),则还会同时启用 ip route-cache cef 接口特定命令。此命令确保对进入此接口的数据包执行 CEF 交换。有时,如果需要在一个接口上单独禁用 CEF,则应添加 no ip route-cache cef 命令。这会对该接口单独禁用 CEF 交换。当强制禁用 CEF 时,Cisco IOS 不会自行向 running-config 添加 no ip route-cache 命令。在 Cisco IOS 12.0 的主线中,它被引入到许多平台上,特别是中低范围的平台,如 Cisco 1600、2500 及 3600 系列等。
当路由器在路由接口接收到数据包时,它首先取消第二层 (L2) 帧信息。然后将第 3 层 (L3) 数据包存储到输入/输出 (I/O) 存储器中。后续操作取决于数据包遵循的交换路径。
可使用以下步骤确认数据包是否遵循 CEF 交换路径:
确认是全局还是在特定接口上启用了 CEF。
router#show ip cef%CEF not running
在全局配置模式下使用 ip cef 命令可启用(中央)CEF。
注意: 在 Cisco 7200 系列上,即将发布的 Cisco IOS 版本采用 CEF 作为默认 Cisco IOS 交换方法。
使用 show ip cef prefix 命令,并确认是否已列出前缀。
router#show ip cefPrefix Next Hop Interface 0.0.0.0/32 receive 192.168.0.0/30 attached Serial2/0/0:1 192.168.0.0/32 receive
确认是否已在特定接口上启用 CEF。
使用 show cef interface x/x 命令查找“IP CEF switching enabled”或“IP distributed CEF (dCEF) switching enabled”。
router#show cef interface fastEthernet 0/0/0 FastEthernet0/0/0 is up (if_number 2) Internet address is 192.168.1.253/24 ICMP redirects are always sent Per packet loadbalancing is disabled Inbound access list is not set Hardware idb is FastEthernet0/0/0 Fast switching type 1, interface type 18 IP Distributed CEF switching enabled Fast flags 0x0. ifindex 1(1) Slot 0 Slot unit 0 VC -1 Hardware transmit queue ptr 0x48001A00 (0x48001A00) Transmit limit accumulator 0x48001A02 (0x48001A02) IP MTU 1500
使用 show ip interface 命令显示已启用的 Cisco IOS 交换方法。
router#show ip interface fastethernet 1/0/0.1 FastEthernet1/0/0.1 is up, line protocol is up IP fast switching is enabled IP fast switching on the same interface is enabled IP Flow switching is disabled IP CEF switching is enabled IP Distributed switching is enabled IP Fast switching turbo vector IP Normal CEF switching turbo vector IP multicast fast switching is enabled IP multicast distributed fast switching is disabled IP route-cache flags are Fast, Distributed, No CEF
在上述输出中,“No CEF”标志表明由于已在特定接口上添加了 no ip route-cache cef 命令,因此已禁用 CEF。“CEF”标志表明 CEF 正在运行。在稳定状态下,不应显示这两个标志。Cisco Bug ID CSCdr80269(仅限注册用户)解决可导致显示这两个标志的极少情况。有关 Bug ID 的详细信息,请参阅 Bug 工具包(仅限注册用户)。
确认流经路由器的大多数数据包是否已进行 CEF 交换。
使用 show interface x/x stat 命令,并确定路由器通过“处理器”(而不是“路由缓存”)转发的数据包数和字节数。请注意,“路由缓存”包括经过快速交换和 CEF 交换的数据包。
router#show interface stats FastEthernet0/0 Switching path Pkts In Chars In Pkts Out Chars Out Processor 95084 26211621 33493 3386174 Route cache 24581 1132797 24542 13297583 Distributed cache 0 0 0 0 Total 119665 27344418 58035 16683757
使用 show ip cache 命令确定是否存在 IP 缓存条目,该条目表明数据包遵循快速交换路径。快速交换建立在按需路由缓存的基础上,以加快通过路由器转发数据包的速度。在接口硬件上运行的驱动程序代码将控制权临时转换到快速交换代码,后者在路由缓存中搜索根据以前传输的数据包构建而来的帧和其他信息。如果路由缓存包含一个条目,快速交换代码会尝试把数据包直接发送到目标接口。
router#show ip cacheIP routing cache 0 entries, 0 bytes 0 adds, 0 invalidates, 0 refcountsMinimum invalidation interval 2 seconds, maximum interval 5 seconds, quiet interval 3 seconds, threshold 0 requests Invalidation rate 0 in last second, 0 in last 3 seconds Prefix/Length Age Interface Next Hop
以下步骤说明了验证是否正在使用 CEF 转发数据包的更具体过程。
使用 ip cef 命令启用 CEF。
发出 clear ip cache 命令以清除经过快速交换的缓存条目。
启动您的数据流。
发出 show ip cache 命令。因为数据包是经过 CEF 交换的,请确认快速交换的高速缓冲中没有显示条目。
发出 show interface stats 命令,并确认入站的路由缓存的递增命中。
注意: 路由缓存计数器包括经过快速交换和 CEF 交换的数据包。
使用 no ip route-cache cef 命令在入站接口上禁用 CEF。
发出 show interface stats 命令,并确认路由缓存的递增命中。
发出 show ip cache 命令,由于 Cisco IOS 已恢复为快速交换,请确认显示有相应条目。
在出站接口上发出 no ip route-cache 命令以禁用快速交换。对匹配的入站接口上的数据包进行进程交换。
注意: 建议不要在高流量的网络中配置进程交换。
如果确认CEF在路由器接口启用并且确定了多数数据包不经过CEF交换的,请获取这些命令,当您问题向Cisco技术支持中心(TAC)报告时。
注意: 发出 debug 命令之前,请参阅有关 Debug 命令的重要信息。
show cef interface x/x ?显示CEF涉及的接口信息。
show ip cef前缀?显示在转发信息库(FIB)的前缀条目。
show adjacency interface detail ?显示通过邻接和直接前缀被解决的递归。
show cef not-cef-switched ?显示哪些数据包不经过CEF交换的。
debug ip cef drop ?显示CEF-dropped数据包的调试信息。
输入接口确定数据包采用的 Cisco IOS 交换路径。在特定接口上启用或禁用交换方法时,请考虑以下经验。
传入接口 | 传出接口 | 交换方法 |
---|---|---|
CEF | 进程 | CEF |
进程 | CEF | 法塞特 |
进程 | 快速交换(IP 路由缓存) | 快速交换 |
CEF | 快速交换 | CEF |
换句话说,您需要在传入接口上启用 CEF,以便对数据包执行 CEF 交换。由于 CEF 对输入做出转发决策,因此请在输入接口上使用 no ip route-cache cef 命令禁用 CEF。相比之下,由于 Cisco IOS 在交换数据包之后生成快速交换的缓存条目,输入进程交换接口并通过快速交换接口输出的数据包将进行快速交换,因此,请在输出接口上使用 no ip route-cache 命令禁用快速交换。不会对以下流量类型进行 CEF 交换:
在交换缓存中尚无条目的数据包
要发送到路由器的数据包
广播数据流
带选项的 IP 数据包
需要协议转换的数据包
加密数据流
术语“punt”是 Cisco 定义来描述接口的设备驱动程序将数据包发送到下一个最快的交换级别的操作。以下列表定义了首选 Cisco IOS 交换方法的顺序(按从快到慢的顺序排列)。
分布式 CEF
CEF
快速交换
过程交换
将在以下情况下进行传送:
下一个较低级别未生成有效路径或有效邻接(对于 CEF)。换句话说,如果 CEF 查找进程在转发信息库中找不到有效条目,数据包被踢到下一个可用交换路径或被丢弃。
最低级别不支持特定功能或第 2 层封装。如果 CEF 支持特定功能,数据包的所有权将通过 CEF“feature path”中的一套软件程序。
某一功能要求特殊处理。
如果 CEF 不支持部分输出功能,则在 CEF 内安装 punt 邻接。CEF 将进入此类邻接的所有数据包传送到下一个最佳交换模式中,以便交换所有数据包。
center#show ip cef 45.0.0.0 45.0.0.0/8, version 184, 0 packets, 0 bytes via 1.1.1.1, Tunnel0, 0 dependencies next hop 1.1.1.1, Tunnel0 valid punt adjacencyCEF Packets passed on to next switching layer Slot No_adj No_encap Unsupported Redirect Receive Bad_ttl OptionsRP 0 0 0 0 5700 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0
采用不完全邻接,CEF 将整体考虑路由器(包括所有其他交换路径)是否知道如何到达邻接节点。我们踢数据包处理交换为了开始一些解析协议类似地址解析服务(ARP),导致的邻接完成的一些时间以后。在这种情况下,CEF 每两秒钟就会将一个数据包传送到下一个交换路径,以避免出现数据包泛洪。因此,在这种情况下,对 IP 地址执行 ping 操作可能会导致 50% 的失败率,并且您将看到“!.!.!.!.!”ping 模式。当 CEF 表损坏时,也会出现这种情况,正如特定 IP 地址的 show ip route 命令信息和 show ip cef 命令信息之间的区别。
注意: 在千兆交换路由器(GSR),线卡(LC)生成互联网控制消息协议(ICMP) echo replies从CEF的内部。如果未将数据包发往某个 GSR 本地地址,则不涉及任何进程。该数据包要么在硬件中直接交换,要么在 dCEF 中中断,具体取决于您使用的 LC。
无法在 GSR 上使用快速交换和进程交换。如果在入站 LC表里,目的地前缀不能解析为转发条目,则丢弃该信息包。匹配收集邻接仅的数据包被踢对千兆路由处理器(GRP)。此外,在 GSR 上,LC CPU 不会为了实现功能而将数据包传送到 GRP,LC 将发送一条“ICMP 不可达”消息(条件是未配置 no ip unreachables 命令)。在 GSR 上,踢到 GRP 的唯一数据流是指定到路由器接口的数据包,或者是源自路由器的数据包。