Cisco路由器故障诊断技术
1 引言
作为网络工程师,在网络环境出现故障时,及时定位故障并解决故障是十分重
要的。本文以CISCO路由式网络为基础,介绍使用诊断工具对Cisco路由器进行故障
诊断的方法。限于篇幅,我们所介绍的内容和示例主要是基于IP报文的,基于IPX和
Appletalk等协议的诊断技术与此类似。
2 路由器的功能特性和体系结构
在学习Cisco路由器上可使用的各种故障排除和诊断工具之前,了解路由器的基
本体系结构是十分重要的。网络工程师应该理解诊断命令执行时所起的作用以及对
于路由器性能所产生的影响。
交换与路由是我们在网络互联中经常遇到的术语。此处所说的交换与局域网中
的帧级交换是完全不同的概念。交换过程是指路由器如何在两个不同的接口间传送
报文。
比如,路由器在以太网接口0接收到一个报文。路由器首先从报文中获取MAC头
信息,然后检查网络层报文头。路由器检查路由表是否有与报文的目的地址匹配的
表项。假设路由表中包含匹配的项,并且下一跳地址是另外一个路由器,该路由器
可以通过以太网接口1到达。然后路由器需要检查下一跳的第二层地址。如果它没有
该地址,则需要在以太网接口1发送ARP广播报文。如果没有接收到ARP响应,路由器
则将该报文丢弃。如果有响应信息,路由器则建立到下一跳路由器的以太网帧。在
这个例子中,路由器从接收到以太网帧到建立并发送以太网帧的整个过程称为交换
过程。需要注意的是,ARP解析过程通常不认为是交换过程的一部分。上面的过程
中,执行路由表查询以寻找下一跳的地址表明采用了交换过程。这是一种最简单的
报文交换方法,因而其开销和延迟都比较大。所有的路由协议最终都依赖于路由表
的建立,路由器通过接收运行相同协议的相邻路由器发送的路由更新报文来更新相
应的路由表,我们称之为路由过程(routing process),它主要由路由处理器完
成。
目前在国内应用比较广泛的Cisco路由器包括2500系列、4000系列、7000系列和
7500系列,这些路由器进行路由的过程基本上是相似的,但是交换的过程却根据其
系统结构的不同而不同。
7000系列支持过程交换、快速交换、自治交换和硅交换。Cisco 7500系列路由
器比7000系列在体系结构方面有很多改进。路由处理器和交换处理器的功能被集成
到路由器交换处理器(RSP)中。这一新的体系结构减少了快速交换时系统总线的负
载。集成后的功能对路由处理器和交换处理器都作了性能、稳定性、可扩充性和安
全等方面的优化。7500系列路由器既不支持自治交换也支持硅交换,它支持更加灵
活的优化交换。
Cisco 4000/2500系列路由器的硬件结构比7000/7500系列路由器的硬件结构简
单。这些设备只在交换过程中才共享存储器。所有的报文缓存和Cache都位于共享存
储器中,因此只支持快速交换或过程交换。
需要知道过程交换需要通过查询路由表来做出路由选择,而且其他交换技术都
是通过缓存来提高交换速度的,因为其缓存的位置不同而分别称为不同的技术。
3 故障诊断与排除命令
Cisco ISO操作系统软件提供了一组功能丰富的命令,可以用来进行故障查找与
排除、问题诊断以及性能检测。命令大致可以分为两类:show命令和debug命令。同
时,还包含一组用于连接这两类命令的clear命令。下面我们分别讲解各命令
3.1 show命令
在这一节中,我们将讲述最常用的show命令,阐述这些命令的输出以及这些命
令适用于解决的故障类型。为了叙述清楚,这些命令被分为全局系统命令、与接口
相关的命令和与协议相关的命令。我们仅讨论最常使用的命令。
全局系统命令
本节将列出与路由器软件和硬件相关的输出命令,其中包括存储区和电源。
show version命令是最基本的命令之一,它显示路由器本身以及其所使用的软、硬
件的基本信息。show hardware命令的功能与show version命令类似。
命令的输出信息包括:IOS的版本、路由器持续运行的时间约23周、最近一次重
启动的原因、路由器主存的大小、共享存储器的大小、闪存的大小、IOS映像的文件
名,以及路由器从何处启动等信息。show version命令显示了路由器的许多非常有
用的信息。在解决问题时,通常应该从这个命令开始收集数据。
如果路由器的多个接口同时丢失报文,则可能由于路由器内存不足或者CPU过
载。用户可以使用show memory命令检查内存利用率(如下所示)。CPU利用率可以
使用show process命令检查。
YH-Router#show memory
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 60DB19C0 19195456 6162924 13032532 11615164 11250780
Fast 60DB19C0 131072 128344 2728 2728 2684
show memory的前两行显示了存储器的一般信息,它表明系统有足够可用的内
存。同时它还显示内存中没有碎片,因为在13.03兆字节可用内存中最大的可用块接
近11.25兆字节。内存碎片表明内存被划分为了许多不连续的块。它将导致内存的利
用率降低,严重时可能产生内存错误从而也严重影响路由器的性能。
现在看一看路由器中有许多内存碎片的情形(如下所示)。此时我们有足够多
的可用内存(8.4兆字节),但是其中最大的块仅为0.5兆字节。连续内存中没有足
够大的可用块,这有可能导致严重的内存分配问题。这些问题有时表现为一个或多
个接口间歇性的丢失报文。此时路由器产生内存碎片错误消息。
HX-Router#sh mem
Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)
Processor 60DB19C0 19195456 10713712 8481744 192680 586748
Fast 60DB19C0 131072 90936 40136 40136 40092
使用命令show memory free,用户可以看到可用内存被划分为许多很小的碎
片。需要注意的是,路由器中存在一定数量的内存碎片是正常的。虽然并没有一个
很严格的界限来划分内存碎片的可接受程度,但是可用块的大小至少应该不小于可
用内存的一半。用户可以通过重新启动路由器来解决这个问题。在重新启动时,系
统重新分配内存和缓存空间。此时,用户应该监视内存分配的过程。如果再次发生
类似的情况,则应该咨询Cisco TAC。
用户可以使用show process cpu命令检查路由器的CPU是否过载。该命令将给出
路由器CPU的利用率,同时显示路由器中不同进程的CPU占用率。在下述示例中,路
由器的CPU工作正常。在通常情况下,在5分钟内CPU的平均利用率小于60%是可以接
受的。如果怀疑CPU利用率出现了问题,则需要不断地监视这一参数,因为它可能在
短时间内发生变化。最好每10秒钟使用一次该命令。通过这种方法,可以清楚地了
解CPU利用率的波动情况。
YH-Router#sh process cpu
CPU utilization for five seconds:15%/4%;one minute:175;five
minutes:19%
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
1 460184 5380085 85 0.00% 0.00% 0.00% 0 NTP
2 252749536 2384205 106010 0.00% 2.35% 2.65% 0 Check Heaps
......
13 26155236 9135958 2862 0.32% 0.25% 0.22% 0 IP Background
14 317720 150150 2116 0.00% 0.00% 0.00% 0 IP Cache ager
......
23 51598380 135094851 381 0.32% 0.24% 0.28% 0 IPX Input
24 86792124 23662071 3667 0.98% 0.87% 0.89% 0 IPX RIP
25 438480948 123384161 3553 7.94% 3.31% 3.91% 0 IPX SAP
......
如果CPU的平均利用率超过了80%,则表明路由器过载。下一步需要检测那一些
进程导致了CPU利用率过高。在上面的显示中,我们可以看到进程IPX SAP占用了绝
大部分的CPU处理能力,但是它还在可以接受的范围之内。有时候,如果SRB
background参数持续过高,则表明发生了路由网桥风暴。
show process memory命令可以用来给出路由器可用内存的一般信息,然后显示
每一个进程所占用的内存空间的详细信息。
如果路由器由于临时重启动而完全崩溃,则相应的错误消息将包含在show
version命令的输出中。show stack命令用于跟踪路由器的堆栈,提供路由器临时重
新启动的原因。如果由于错误而导致重新启动,堆栈记录将在输出的末尾显示。为
了抽取与故障相关的信息,堆栈记录需要解码。这一工作通常由Cisco TAC工程师完
成。此外,拥有相应CCO登录ID的用户可以通过将show stack命令的输出发送到CCO
而获得解码信息。堆栈记录解码的结果有时与Cisco路由器的bug有关。
当用户向Cisco TAC报告故障时,支持技术人员通常要求用户发送show
tech_support命令的输出结果。这个命令将导致下述命令的按序执行:Show
version、Show controllers、Show buffers、Show interface、Show stack、
Show process cpu、Show process memory和Show running-config。这些命令的组
合将给出路由器配置以及大多数关键性能参数的详细信息。show tech_support命令
的输出对于Cisco TAC技术人员解决复杂网络问题是十分有用。
与接口相关的命令
下面我们将阐述一些直接与路由器活跃接口相关的命令。show ip interface
brief将显示每一个路由器接口的IP地址信息以及第二层的状态信息(如下所示)。
其他与IP对应的协议的相关性信息可以通过相应命令属性获得,比如show ipx
interface brief。
YH-Router#sh ip in brief
Interface IP-Address OK? Method Status Protocol
TokenRing0/0 172.26.12.3 YES NVRAM up up
TokenRing0/1 172.27.12.3 YES NVRAM up up
TokenRing0/2 172.28.12.3 YES NVRAM up up
TokenRing0/3 unassigned YES NVRAM administratively down down
Ethernet1/0 172.30.12.3 YES NVRAM up up
Ethernet1/0 172.31.12.3 YES NVRAM up up
Ethernet1/0 172.32.12.3 YES NVRAM up up
Ethernet1/0 172.33.12.3 YES NVRAM