IP : 思科快速转发 (CEF)

CEF 不完全邻接故障排除

2016 年 10 月 24 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 8 月 22 日) | 反馈


目录


简介

如果网络中的网络节点在链路层上通过一跳就能到达对方,则认为它们是相邻的。本文档提供了有关如何对不完全邻接进行故障排除的提示,如在接口上启用 Cisco Express Forwarding (CEF)show ip cef adjacency 命令的输出所示。

Router#show ip cef adjacency serial 4/0/1 10.10.78.69 detail 
IP Distributed CEF with switching (Table Version 2707655) 
   130703 routes, 0 reresolve, 0 unresolved (0 old, 0 new), peak 39517 
   130703 leaves, 9081 nodes, 26227536 bytes, 2685255 inserts, 2554552 invalidations 
   949 load sharing elements, 318864 bytes, 71787 references 
   universal per-destination load sharing algorithm, id 9E3B1A95 
   2 CEF resets, 23810 revisions of existing leaves  
   Resolution Timer: Exponential (currently 1s, peak 16s)
   22322 in-place/0 aborted modifications 
   refcounts:  2175265 leaf, 1972988 node 

   Table epoch: 0 (17 entries at this epoch)

Adjacency Table has 112 adjacencies 
   4 IPv4 incomplete adjacencies

先决条件

要求

Cisco 建议您了解以下主题:

使用的组件

本文档中的信息根据Cisco IOS�软件版本12.3(3)。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。

规则

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

什么是邻接?

CEF 描述了一种非常高速的交换机制,路由器可以使用该机制将入站数据包转发到出站接口。CEF 使用它存储在路由器内存中的两组数据结构或表:

  • 转发信息库 (FIB) - 来自常见的国际标准化组织 (ISO) 用法,FIB 描述的是进行转发决策所用的信息数据库。leavingcisco.com 它在概念上与路由表或路由缓存类似,虽然在实施上与路由表大不相同。

  • 邻接表 - 如果网络中的两个节点在链路层上通过一跳就能到达对方,则认为它们是相邻的。例如,当数据包到达路由器的一个接口时,路由器将剥除数据链路层成帧并将封装的数据包传递到网络层。在网络层,将检查数据包的目标地址。如果目标地址不是路由器的接口地址或所有主机的广播地址,则必须路由该数据包。

    数据库中的每个路由条目至少必须包含两个项:

    • 目标地址 - 这是路由器可以到达的网络地址。路由器可以通过多个路由到达同一地址。

    • 指向目标的指针 - 此指针用于表示目标网络已直接连接到路由器,或者用于指示直接连接网络中另一指向目标的路由器的地址。该路由器是离目标较近的一跳,是下一跳路由器。邻接表示指向目标的指针。

本示例使用配置了 IP 地址 172.16.81.98 的路由器(例如 R1)的以太网接口和一个将所有目标指向相邻路由器 R2 的以太网接口的简单默认静态路由(路由器 R2 将 IP 地址 172.16.81.1 作为下一跳)。通常情况下,需要在传入接口上启用 CEF 才能对数据包进行 CEF 交换。由于 CEF 对输入做出转发决策,因此请在输入接口上使用 no ip route-cache cef 命令禁用 CEF。

注意: 进行快速交换时,Cisco IOS 会在完成数据包交换后构建一个快速交换缓存条目。例如,某个数据包到达进程交换接口并通过快速交换接口发出,这就是数据包快速交换。要禁用快速交换,请在输出接口上发出 no ip route-cache 命令。这与 CEF 形成了对比。

  1. 使用 show ip route 命令查看 IP 路由表的内容。

    R1#show ip route
    Codes: C - connected, S - static, I - IGRP, 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 172.16.81.1 to network 0.0.0.0 
    
         172.16.0.0/24 is subnetted, 1 subnets 
    C       172.16.81.0 is directly connected, Ethernet0/0
    S*   0.0.0.0/0 [1/0] via 172.16.81.1 
    
    !--- A simple default static route points all destinations to 
    !--- a next-hop address of 172.16.81.1.
    
    
  2. 使用 show ip arpshow arp 命令显示地址解析协议 (ARP) 表。

    注意: ARP 表中的“Hardware Addr”字段显示本地接口和下一跳接口的条目。

    R1#show ip arp 
    Protocol  Address       Age (min)  Hardware Addr   Type   Interface 
    Internet  172.16.81.98         -   0030.71d3.1000  ARPA   Ethernet0/0
    Internet  172.16.81.1          0   0060.471e.91d8  ARPA   Ethernet0/0
  3. 使用 show adjacency ethernet 0/0 detailshow adjacency ethernet 0/0 internal 命令查看邻接表条目的内容。

    R1#show adjacency ethernet 0/0 detail
    Protocol Interface                 Address 
    IP       Ethernet0/0               172.16.81.1(7) 
                                       0 packets, 0 bytes 
                                       0060471E91D8003071D310000800  
                                       ARP        03:57:08 
                                       Epoch: 1					
    R1#show adjacency ethernet 0/0 internal
    Protocol Interface     Address 
    IP       Ethernet0/0   172.16.81.1(7) 
                           0 packets, 0 bytes 
                           0060471E91D8003071D310000800  
                           ARP        03:57:00
                           Epoch: 1
                           Fast adjacency enabled 
                           IP redirect enabled 
                           IP mtu 1500 (0x48000082) 
                           Fixup disabled 
                           Adjacency pointer 0x62515AC0, refCount 7 
                           Connection Id 0x0 
                           Bucket 236
    

    此输出说明在 CEF 中,邻接是指一种控制结构,用于存储特定接口 IP 地址的第 2 层信息。它包含重写字符串,这些字符串因出站接口封装协议的不同而不同。邻接是 ARP 条目在 CEF 中的等同物。

下表对 show adjacency [interface-type interface-number] internal 命令中的重要字段进行了说明。

字段 说明
172.16.81.1(7)
下一跳接口的 IP 地址。括号中的值是指“refCount”或 FIB 条目指向此邻接的次数。同一值稍后将在条目中出现。
0 packets, 0 bytes
使用 ip cef accounting 命令可启用数据包和字节计数器。
0060471E91D8003071D310000800
前十二个字符是目标下一跳接口的 MAC 地址。接下来的十二个字符代表数据包源接口的 MAC 地址。(即本地路由器的出站接口)。最后四个字符代表众所周知的 IP(使用高级研究项目管理局 (ARPA) 封装)的 EtherType 值 0x0800。
003071D310000800
数据包源接口的 MAC 地址和众所周知的 IP(使用 ARPA 封装)的 Ethertype 值 0x0800。(即本地路由器的出站接口)。
ARP    03:57:00
ARP 可指示条目发现方式。时间戳是指在条目超时前经过的时间。
Epoch: 1
CEF 邻接表纪元信息。使用 show ip cef epoch 命令可显示邻接表和所有 FIB 表的纪元信息。
Fast adjacency enabled
不在多个活动路径上进行负载共享时,FIB 条目将缓存下一跳接口的邻接。快速邻接可加快数据包的交换。
Adjacency pointer 0x62515AC0 
 
refCount 7
当前存储在路由器内存中的对邻接的引用数。在 CEF 表中,每个相应的条目都有一个引用,此外还有因各种原因而出现的其他引用(例如,执行 show adjacency 命令的代码的引用)。
Connection Id 0x0
 
Bucket 236
 

邻接的类型

邻接类型 邻接处理
空邻接 丢弃要发送到 Null0 接口的数据包。这可以作为访问过滤的有效形式来使用。
收集邻接 当路由器直接连接到几个主机时,路由器上的 FIB 表将保留子网的前缀,而不是单个主机的前缀。子网前缀将指向收集邻接。需要将数据包转发到特定主机时,将针对特定前缀收集邻接数据库。
传送邻接 需要进行特殊处理的功能或尚不支持与 CEF 交换路径结合使用的功能将被转发到下个交换层进行处理。不支持的功能将转发到下一个更高的交换级别。
丢弃邻接 数据包将被丢弃。
删除邻接 数据包将被删除,但会检查前缀。
缓存的邻接 缓存的邻接是指为发送的邻接数据包接收的确认更新。

邻接发现

通过某一机制(如 ARP)或使用路由协议(例如 BGP 和 OSPF)发现邻接时,会将这些邻接通过间接手动配置方式或动态方式添加到表,从而形成邻居关系。如果邻接由 FIB 创建但不通过动态方式来发现,则第 2 层编址信息将不可知,系统会认为此邻接属于不完全邻接。一旦第 2 层信息可知,数据包将转发到路由处理器,且邻接将通过 ARP 确定。

可以将 ATM 和帧中继接口配置为点对点或多点。邻接类型的数量因配置而异:

  • 点对点接口 - 对接口使用单个邻接。

  • 多点接口 - 对每个主机 IP 地址使用唯一的邻接或第 2 层重写结构。用于完成邻接的信息来自 IP ARP、静态 ATM 或帧中继映射语句,以及 ATM 和帧中继上的逆向 ARP。

    Router#show adjacency serial 0 detail
    Protocol Interface                 Address 
    IP       Serial0                   140.108.1.1(25) 
                                       0 packets, 0 bytes 
                                       18410800 
                                       FR-MAP     never
                                       Epoch: 1
    IP       Serial0                   140.108.1.2(5) 
                                       0 packets, 0 bytes 
                                       18510800 
                                       FR-MAP     never
                                       Epoch: 1

当 ATM 接口在一个接口上支持多个永久虚电路 (PVC) 时,“incomplete”错误指示最多可出现一分钟,但不会持续存在。

注意: 除了常规邻接之外,CEF 还支持需要特殊处理的五种邻接类型。这些类型已在 Cisco Express Forwarding 概述需要特殊处理的邻接类型部分进行了说明,因此不在本文档讨论范围内。

不完全邻接的原因

导致不完全邻接有两个已知原因:

  • 路由器无法对下一跳接口成功使用 ARP。

  • 在使用 clear ip arpclear adjacency 命令后,路由器将邻接标记为不完全。然后,路由器无法清除该条目。

  • 在 MPLS 环境中,应该为标签交换启用 IP CEF。接口级命令 ip route-cache CEF

不完全邻接的症状包括在 ping 测试期间发生随机数据包丢弃。输出丢包是由于扼杀 CEF 将到达的数据包传送到 CPU 的速率而引起的。使用 debug ip cef 命令可查看因不完全邻接而导致的 CEF 丢包数。

Router# 
 *Oct 11 17:08:03.275: CEF-Drop: 
Stalled adjacency for 192.168.10.2 on Serial0/1/3 for 
destination 192.168.11.1 
 *Oct 11 17:08:03.275: CEF-Drop: 
Packet for 192.168.11.1 -- encapsulation 
 *Oct 11 17:08:05.307: CEF-Drop: 
Stalled adjacency for 192.168.10.2 on Serial0/1/3 for 
destination 192.168.11.1 
 *Oct 11 17:08:05.307: CEF-Drop: 
Packet for 192.168.11.1 -- encapsulation 

另外,还请多次使用 show cef drop 命令并查找“Encap_fail”计数器的增量值。有关详细信息,请参阅 show cef 命令。

无 ARP 条目

当 CEF 找不到目标前缀的有效邻接时,会将数据包传送到 CPU 进行 ARP 解析,从而完成邻接。在极少数情况下,邻接将保持 INCOMPLETE 状态。例如,如果 ARP 表已列出特定主机,则将数据包传送到进程级别时不会触发 ARP。

确定 ARP 条目是否存在,以便针对此问题进行故障排除。使用以下命令并指定特定 IP 地址:

使用 debug arp 命令确认路由器是否发送了 ARP 请求。

Router#ping 10.12.241.4 
Type escape sequence to abort. 
Sending 5, 100-byte ICMP Echos to 10.12.241.4, timeout is 2 seconds: 
..... 
Success rate is 0 percent (0/5) 
Router# 
.Aug 21 18:59:07.175 PDT: 
IP ARP: 
creating incomplete entry for IP address:10.12.241.4 interface FastEthernet0/1 
.Aug 21 18:59:07.177 PDT: IP ARP: sent req src 10.12.241.252 0006.529c.9801, 
					dst 10.12.241.4 0000.0000.0000 FastEthernet0/1 
.Aug 21 18:59:07.180 PDT: IP ARP throttled out the ARP Request for 10.12.241.4 
.Aug 21 18:59:09.182 PDT: IP ARP: sent req src 10.12.241.252 0006.529c.9801, 
					dst 10.12.241.4 0000.0000.0000 FastEthernet0/1 
.Aug 21 18:59:09.183 PDT: 
IP ARP throttled out the ARP Request for 10.12.241.4

当 ping 进程尝试发送第一个数据包但看不到 ARP 条目时,它将发起 ARP 请求。它会继续尝试发送数据包,然后在定义的等待期限后丢弃数据包。当收到 ARP 响应,并使用后台进程完成 ARP 条目时,ping 成功率将是 100%。

标记为不完整后未被删除

需要更改邻接信息时,邻接老化逻辑将分两个阶段删除条目:

  • 首先,它将条目的状态从“complete”更改为“incomplete”。

    Router#show adjacency
    Protocol  Interface     Address
    IP        Serial0       10.10.10.2(2) (incomplete)
    IP        Serial0       10.10.10.3(7)
    IP        Ethernet0     172.16.81.1(7)
  • 然后,它将在随后的一分钟时间间隔内,“唤醒”邻接步行者进程并完成删除。

    Router#show adjacency
    Protocol  Interface     Address
    IP        Serial0       10.10.10.3(7)
    IP        Ethernet0     172.16.81.1(7)

    在分布式 CEF 模式下,RP 上的进程将通知线卡完成删除。上述操作步骤说明,瞬间不完全邻接之所以能够存在,是因为系统中存在一个最大时长为 60 秒的时间窗口。

已知问题

在帧中继接口上配置静态映射语句时,应提示 CEF 将主机前缀条目添加到 CEF 表。最初,CEF 在创建条目前没有考虑 PVC 是否处于“ACTIVE”状态。此问题已在 Cisco Bug ID CSCdr71258仅限注册用户)中解决。

另外,在连接到多协议标签交换 (MPLS) 虚拟私有网络 (VPN) 路由转发 (VRF) 实例并从中删除接口后,CEF 会将邻接设置为“不完全”。不过,帧中继动态映射条目不会被清除。当重新应用 IP 地址时,动态映射仍然存在。这会阻止邻接完成。删除 IP 地址(例如,应用 VRF)时发出 clear frame-relay-inarp 命令可避免此问题。可以稍后重新应用 IP 地址。一旦重新创建动态映射,邻接便告完成。


相关信息


Document ID: 17812