如果网络中的网络节点在链路层上通过一跳就能到达对方,则认为它们是相邻的。本文档提供了有关如何对不完全邻接进行故障排除的提示,如在接口上启用 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 描述的是进行转发决策所用的信息数据库。 它在概念上与路由表或路由缓存类似,虽然在实施上与路由表大不相同。
邻接表 - 如果网络中的两个节点在链路层上通过一跳就能到达对方,则认为它们是相邻的。例如,当数据包到达路由器的一个接口时,路由器将剥除数据链路层成帧并将封装的数据包传递到网络层。在网络层,将检查数据包的目标地址。如果目标地址不是路由器的接口地址或所有主机的广播地址,则必须路由该数据包。
数据库中的每个路由条目至少必须包含两个项:
目标地址 - 这是路由器可以到达的网络地址。路由器可以通过多个路由到达同一地址。
指向目标的指针 - 此指针用于表示目标网络已直接连接到路由器,或者用于指示直接连接网络中另一指向目标的路由器的地址。该路由器是离目标较近的一跳,是下一跳路由器。邻接表示指向目标的指针。
本示例使用配置了 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 形成了对比。
使用 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.
使用 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
使用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 命令。
当 CEF 找不到目标前缀的有效邻接时,会将数据包传送到 CPU 进行 ARP 解析,从而完成邻接。在极少数情况下,邻接将保持 INCOMPLETE 状态。例如,如果 ARP 表已列出特定主机,则将数据包传送到进程级别时不会触发 ARP。
确定 ARP 条目是否存在,以便针对此问题进行故障排除。使用以下命令并指定特定 IP 地址:
show arp 或 show ip arp
使用 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 地址。一旦重新创建动态映射,邻接便告完成。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
07-Jun-2006 |
初始版本 |