目录

简介

先决条件

要求

使用的组件

规则

什么是邻接？

邻接的类型

邻接发现

不完全邻接的原因

无 ARP 条目

标记为不完整后未被删除

已知问题

相关信息

简介

如果网络中的网络节点在链路层上通过一跳就能到达对方，则认为它们是相邻的。本文档提供了有关如何对不完全邻接进行故障排除的提示，如在接口上启用 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 快速转发 (CEF)

- 配置 Cisco Express Forwarding

- 如何验证 Cisco 快速转发交换

使用的组件

本文档中的信息基于Cisco IOS®软件版本12.3(3)。

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

规则

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

什么是邻接？

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

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

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

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

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

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

本示例使用配置了 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 arp 或 show arp 命令显示地址解析协议 (ARP) 表。

注意：ARP表中的“硬件地址”字段显示本地接口和下一跳接口的条目。

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 detail和show 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 arp 或 clear 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 地址：

- show arp 或 show ip arp

- show adjacency

使用 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 地址。一旦重新创建动态映射，邻接便告完成。

相关信息

- 如何验证 Cisco 快速转发交换

- 配置 Cisco Express Forwarding

- Cisco Express Forwarding 概述

- Cisco Express Forwarding (CEF) 技术支持页

- IP 交换技术支持页

- 技术支持和文档 - Cisco Systems