在出现网络故障时,作为网络工程师能够及时定位故障并解决网络故障是十分重要的。CiscoISO操作系统软件提供了一组功能丰富的命令,可以用来进行网络故障查找与排除、问题诊断以及性能检测。命令大致可以分为两类:show命令和debug命令。同时,还包含一组用于连接这两类命令的clear命令。下面我们分别讲解各命令
网络故障诊断与排除——show命令
在这一节中,我们将讲述最常用的show命令,阐述这些命令的输出以及这些命令适用于解决的故障类型。为了叙述清楚,这些命令被分为全局系统命令、与接口相关的命令和与协议相关的命令。我们仅讨论最常使用的命令。
网络故障诊断与排除——全局系统命令
本节将列出与路由器软件和硬件相关的输出命令,其中包括存储区和电源。showversion命令是最基本的命令之一,它显示路由器本身以及其所使用的软、硬件的基本信息。showhardware命令的功能与showversion命令类似。
命令的输出信息包括:IOS的版本、路由器持续运行的时间约23周、最近一次重启动的原因、路由器主存的大小、共享存储器的大小、闪存的大小、IOS映像的文件名,以及路由器从何处启动等信息。showversion命令显示了路由器的许多非常有用的信息。在解决问题时,通常应该从这个命令开始收集数据。
如果路由器的多个接口同时丢失报文,则可能由于路由器内存不足或者CPU过载。用户可以使用showmemory命令检查内存利用率(如下所示)。CPU利用率可以使用showprocess命令检查。
- YH-Router#showmemoryHeadTotal(b)Used(b)Free(b)Lowest(b)Largest(b)Processor60DB19C0191954566162924130325321161516411250780Fast60DB19C0131072128344272827282684
showmemory的前两行显示了存储器的一般信息,它表明系统有足够可用的内存。同时它还显示内存中没有碎片,因为在13.03兆字节可用内存中最大的可用块接近11.25兆字节。内存碎片表明内存被划分为了许多不连续的块。它将导致内存的利用率降低,严重时可能产生内存错误从而也严重影响路由器的性能。
现在看一看路由器中有许多内存碎片的情形(如下所示)。此时我们有足够多的可用内存(8.4兆字节),但是其中最大的块仅为0.5兆字节。连续内存中没有足够大的可用块,这有可能导致严重的内存分配问题。这些问题有时表现为一个或多个接口间歇性的丢失报文。此时路由器产生内存碎片错误消息。
- HX-Router#shmemHeadTotal(b)Used(b)Free(b)Lowest(b)Largest(b)Processor60DB19C019195456107137128481744192680586748Fast60DB19C013107290936401364013640092
使用命令showmemoryfree,用户可以看到可用内存被划分为许多很小的碎片。需要注意的是,路由器中存在一定数量的内存碎片是正常的。虽然并没有一个很严格的界限来划分内存碎片的可接受程度,但是可用块的大小至少应该不小于可用内存的一半。用户可以通过重新启动路由器来解决这个问题。在重新启动时,系统重新分配内存和缓存空间。此时,用户应该监视内存分配的过程。如果再次发生类似的情况,则应该咨询CiscoTAC。
用户可以使用showprocesscpu命令检查路由器的CPU是否过载。该命令将给出路由器CPU的利用率,同时显示路由器中不同进程的CPU占用率。在下述示例中,路由器的CPU工作正常。在通常情况下,在5分钟内CPU的平均利用率小于60%是可以接受的。如果怀疑CPU利用率出现了问题,则需要不断地监视这一参数,因为它可能在短时间内发生变化。最好每10秒钟使用一次该命令。通过这种方法,可以清楚地了解CPU利用率的波动情况。
- YH-Router#shprocesscpuCPUutilizationforfiveseconds:15%/4%;oneminute:175;fiveminutes:19%PIDRuntime(ms)InvokeduSecs5Sec1Min5MinTTYProcess14601845380085850.00%0.00%0.00%0NTP225274953623842051060100.00%2.35%2.65%0CheckHeaps......1326155236913595828620.32%0.25%0.22%0IPBackground1431772015015021160.00%0.00%0.00%0IPCacheager......23515983801350948513810.32%0.24%0.28%0IPXInput24867921242366207136670.98%0.87%0.89%0IPXRIP2543848094812338416135537.94%3.31%3.91%0IPXSAP......
如果CPU的平均利用率超过了80%,则表明路由器过载。下一步需要检测那一些进程导致了CPU利用率过高。在上面的显示中,我们可以看到进程IPXSAP占用了绝大部分的CPU处理能力,但是它还在可以接受的范围之内。有时候,如果SRBbackground参数持续过高,则表明发生了路由网桥风暴。
showprocessmemory命令可以用来给出路由器可用内存的一般信息,然后显示每一个进程所占用的内存空间的详细信息。
如果路由器由于临时重启动而完全崩溃,则相应的错误消息将包含在showversion命令的输出中。showstack命令用于跟踪路由器的堆栈,提供路由器临时重新启动的原因。如果由于错误而导致重新启动,堆栈记录将在输出的末尾显示。为了抽取与网络故障相关的信息,堆栈记录需要解码。这一工作通常由CiscoTAC工程师完成。此外,拥有相应CCO登录ID的用户可以通过将showstack命令的输出发送到CCO而获得解码信息。堆栈记录解码的结果有时与Cisco路由器的bug有关。
当用户向CiscoTAC报告网络故障时,支持技术人员通常要求用户发送showtech_support命令的输出结果。这个命令将导致下述命令的按序执行:Showversion、Showcontrollers、Showbuffers、Showinterface、Showstack、Showprocesscpu、Showprocessmemory和Showrunning-config。这些命令的组合将给出路由器配置以及大多数关键性能参数的详细信息。showtech_support命令的输出对于CiscoTAC技术人员解决复杂网络问题是十分有用。
网络故障诊断与排除——与接口相关的命令
下面我们将阐述一些直接与路由器活跃接口相关的命令。showipinterfacebrief将显示每一个路由器接口的IP地址信息以及第二层的状态信息(如下所示)。其他与IP对应的协议的相关性信息可以通过相应命令属性获得,比如showipxinterfacebrief。
- YH-Router#shipinbriefInterfaceIP-AddressOK?MethodStatusProtocolTokenRing0/0172.26.12.3YESNVRAMupupTokenRing0/1172.27.12.3YESNVRAMupupTokenRing0/2172.28.12.3YESNVRAMupupTokenRing0/3unassignedYESNVRAMadministrativelydowndownEthernet1/0172.30.12.3YESNVRAMupupEthernet1/0172.31.12.3YESNVRAMupupEthernet1/0172.32.12.3YESNVRAMupupEthernet1/0172.33.12.3YESNVRAMupup
showinterface命令可以获得更多的信息。我们以以太网为例来讨论这些通用接口参数。
- YH-Router#shinte1/0Ethernet1/0isup,lineprotcolisupHardwareiscxBusEthernet,addressis00e0.f78a.6d40(bia00e0.f78a.6d40)Description:seg=E2LABSRV1Internetaddressis172.30.12.3/16MTU1500bytes,BW10000Kbit,DLY1000usec,rely255/255,load1/255EncapsulationARPA,loopbacknotset,keepaliveset(10sec)ARPtype:ARPA,ARPTimeout04:00:00Lastinput00:00:00,output00:00:00,outputhangneverQueueingstrategy:fifoOutputqueue0/40,44drops;inputqueue0/75,66114drops5minuteinputrate181000bits/sec,23packets/sec5minuteoutputrate43000bits/sec,26packets/sec525599659packetsinput,2042735431bytes,0nobufferReceived4004547broadcasts,10runts,0giants139inputerrors,0CRC,129frame,0overrun,0ignored,0abort0inputpacketswithdribbleconditiondetected481020335packetsoutput,1069273018bytes,47underruns20outputerrors,95880485collisions,0interfaceresets0babbles,0latecollision,0deferred0lostcarrier,0nocarrier0outputbufferfailures,0outputbuf
- fersswappedout
其中:
Ethernet1/0isup表明OSI模型的第一层成功启动。
Lineprotocolup表明第二层成功启动。
Description用户自定义的描述。使用这一功能给出接口准确的描述是十分重要的。在一个大型组织中,一个局部网络的工程师很难定位发生故障的路由器。
MTU指定最大传输单元,用户可以配置。
BW、Dly、rely、load(带宽、延迟、可靠性和负载):这些参数与IGRP/EIGRP标准有关。带宽和延迟的配置可以影响到路由选择。在工作正常的接口中,可靠性的值为255。除非在十分繁忙的条件下,否则负载通常不应超过150/255。
Encapsulation它指在接口的第二层封装。在以太网中,对于IP,Cisco的缺省设置为ARPA,而IPX的缺省设置为Novell-Ether。
从输出中还能获取哪些其他的信息呢?读者可以看到,ARPcachetimeout的值为4小时(该值为缺省设置)。从路由器接口输入到输出的时间不到1秒钟。输出从未被挂起。接口计数器最后一次被清0是在5个星期以前。在评估接口的统计信息时,这些数据是十分有用的。在通常情况下,可以将计数器清0以便作进一步的监视。
接口所采用的是FIFO排队规则。输出队列和输入队列的缺省长度分别为40和75。队列中都不包含报文。在计数器最后一次被清0后,输入队列丢失了许多报文。但是,正如我们前面所说的,计数器5个星期未被清0;因此,该值不能说明一定发生了网络故障。在这种情况下,应该首先将计数器清0,然后再监视输出队列的丢失报文数。
同时,命令的输出中还显示每1秒钟通过路由器接口的平均信息量(以字节为单位)以及报文数。这些参数的总量信息、路由器接口观测到的所有广播报文的数量也在命令的输出中显示。如果广播报文的数量增长非常迅速,尤其是如果相对于输入报文的数量非常高,则表明在局域网段中有广播风暴。由于某些特定的应用程序需要频繁使用广播报文,因此确定广播报文的数量阀值是很困难的。但是,如果广播报文的数量超过了整个输入报文的30%,则需要使用局域网协议分析仪进一步检测网络。
我们还可以获取接口的下列错误检测信息:
Runts是指大小小于最小值的报文。在示例的以太网中,该值为64。以太网中指定最小报文大小大小是由于在这种传输模式下的工作站需要检测碰撞。如果以太网段中包含以太网中继器并且其距离符合规定的标准,最小报文大小大小可以使处在这种传输模式下的工作站检测线路中的任何碰撞。
Giants指大小超过线路可以承受的最大报文大小的报文。以太网的MTU通常为1500字节,或者最大的封装数据为1500字节。
Inputerrors指到达报文中检测到的错误,也可能表明网段本身发生了错误。
Outputerrors指输出报文中的错误,它可能表明路由器接口本身发生了网络故障。
CRCs由于报文不正确的以太网校验和而检测到的循环冗余校验错。它可能由于网段的噪声引起,或者由于网卡故障、报文冲突引发。CRC的频率应是每100000个输入报文中发生一次。
Frameerrors指接收到的帧的类型与路由器以太网帧类型(IP协议帧类型为ARPA)不匹配。
Aborts在碰撞检测中过度的重传而导致的问题。在以太网中,重传的最大次数不超过15次。
Dribblecondition指接收到的帧比MTU大,但不属于Giants。
Babble是指持续接收到可疑的帧。
网络故障的排除是很复杂的问题,随着网络的发展,这些故障还会相继出现的,所以希望大家多多学习这些网络故障的排除方法。