Cisco路由器故障诊断技术(3)
3.4 trace
命令
trace命令提供路由器到目的地址的每一跳的信息。它通过控制IP报文的生存期(TTL)字段来实现。TTL等于1的ICMP回应请求报文将被首先发送。路径上的第一个路由器将会丢弃该报文并且发送回标识错误消息的报文。错误消息通常是ICMP超时消息,表明报文顺利到达路径的下一跳,或者端口不可达消息,表明报文已经被目的地址接收但是不能向上传送到IP协议栈。
为了获得往返延迟时间的信息,trace发送三个报文并显示平均延迟时间。然后将报文的TTL字段加1并发送3个报文。这些报文将到达路径的第二个路由器上,并返回超时错误或者端口不可达消息。反复使用这一方法,不断增加报文的TTL字段的值,直到接收到目的地址的响应消息。
在有些情况下,使用trace命令可能会导致故障。因为IOS中存在与trace命令相关的bug。这些bug的相关信息可以从CCO得到。另外一个问题是,某些目标站点不响应ICMP端口不可达消息。当命令的输出显示一系列星号(*)时,就可能碰到了此类站点。用户可以使用Ctrl-Shift-6中断命令的执行。
用户执行模式
下面展示了一个简单的在用户执行模式下执行的trace命令的输出。到达目的地的距离是3跳。TTL值为1的3个报文的响应消息是ICMP超时错误,并且返回报文的IP地址有两个。因为路由器1和路由器2在同一个网段中,并且它们到路由器3的距离都是一跳,因此这些路由器都响应该报文。
trace命令提供路由器到目的地址的每一跳的信息。它通过控制IP报文的生存期(TTL)字段来实现。TTL等于1的ICMP回应请求报文将被首先发送。路径上的第一个路由器将会丢弃该报文并且发送回标识错误消息的报文。错误消息通常是ICMP超时消息,表明报文顺利到达路径的下一跳,或者端口不可达消息,表明报文已经被目的地址接收但是不能向上传送到IP协议栈。
为了获得往返延迟时间的信息,trace发送三个报文并显示平均延迟时间。然后将报文的TTL字段加1并发送3个报文。这些报文将到达路径的第二个路由器上,并返回超时错误或者端口不可达消息。反复使用这一方法,不断增加报文的TTL字段的值,直到接收到目的地址的响应消息。
在有些情况下,使用trace命令可能会导致故障。因为IOS中存在与trace命令相关的bug。这些bug的相关信息可以从CCO得到。另外一个问题是,某些目标站点不响应ICMP端口不可达消息。当命令的输出显示一系列星号(*)时,就可能碰到了此类站点。用户可以使用Ctrl-Shift-6中断命令的执行。
用户执行模式
下面展示了一个简单的在用户执行模式下执行的trace命令的输出。到达目的地的距离是3跳。TTL值为1的3个报文的响应消息是ICMP超时错误,并且返回报文的IP地址有两个。因为路由器1和路由器2在同一个网段中,并且它们到路由器3的距离都是一跳,因此这些路由器都响应该报文。
Router3#trace 171.144.1.39 Type escape sequence to abort. Tracing the route to Router9 (171.144.1.39) 1 Router2 (165.48.48.2) 0 msec Router2 (165.48.48.2) 0 msec Router1 (165.48.48.1) 0 msec 2 165.48.48.129 12 msec Router6 (165.48.49.129) 12 msec 12 msec 3 Router4 (171.133.1.2) 12 msec 12 msec Router9 (171.144.1.39) 12 msec 12 msec Router3 |
下面列出了IP trace命令的输出中出现的不同字符及其含义:
XY msec 在接收到响应消息之前的往返延迟(以毫秒为单位)
* 报文超时
? 报文类型不能识别
U 端口不可达
P 协议不可达
N 网络不可达
H 主机不可达
Q ICMP 源抑制
特权模式扩展Trace 用于扩展ping命令的许多属性都可以用来扩展trace命令的功能。扩展trace命令的特殊属性有:
Numeric display
在缺省情况下,trace命令的输出中既包括IP地址也包括其对应的DNS域名。如果用户不需要显示DNS域名,则可以使用该属性。
Probe count 其缺省值为3,用户可以根据需要进行调整。
TTL 该值可以在最大和最小TTL值之间变化。
Port number
这是一个非常有用的属性,它可以使工程技术人员跟踪特定的传输层端口。因此,不但可以确认源端与目的端之间的IP连通性,而且可以确认高层服务是否可被访问。
与trace命令相关的另外一个问题是,如果存在到达目的地的多条路径,返回报文的源地址可能不相同。在这种情况下,用户需要仔细比较不同返回报文的延迟时间。如果仍不能得到明确的结果,可以远程访问路径上的一个或多个路由器,使用trace命令访问源地址和目的地址。
4 理解Cisco错误消息
4.1 错误消息格式
系统错误消息格式如下:
XY msec 在接收到响应消息之前的往返延迟(以毫秒为单位)
* 报文超时
? 报文类型不能识别
U 端口不可达
P 协议不可达
N 网络不可达
H 主机不可达
Q ICMP 源抑制
特权模式扩展Trace 用于扩展ping命令的许多属性都可以用来扩展trace命令的功能。扩展trace命令的特殊属性有:
Numeric display
在缺省情况下,trace命令的输出中既包括IP地址也包括其对应的DNS域名。如果用户不需要显示DNS域名,则可以使用该属性。
Probe count 其缺省值为3,用户可以根据需要进行调整。
TTL 该值可以在最大和最小TTL值之间变化。
Port number
这是一个非常有用的属性,它可以使工程技术人员跟踪特定的传输层端口。因此,不但可以确认源端与目的端之间的IP连通性,而且可以确认高层服务是否可被访问。
与trace命令相关的另外一个问题是,如果存在到达目的地的多条路径,返回报文的源地址可能不相同。在这种情况下,用户需要仔细比较不同返回报文的延迟时间。如果仍不能得到明确的结果,可以远程访问路径上的一个或多个路由器,使用trace命令访问源地址和目的地址。
4 理解Cisco错误消息
4.1 错误消息格式
系统错误消息格式如下:
%Facility - subfacility - Severity - Mnemonic : Message Text |
Facility
它指出错误消息涉及的设备名。该值可以是协议、硬件设备或者系统软件模块。
Subfacility 它仅与通道接口处理器(CIP)卡有关。详细的信息可以参见Cisco文档的相关章节。
Severity 它是一个范围在0到7之间的数字。数字的值越小,严重程度越高。
Mnemonic 唯一标识错误消息的单值代码。该代码通常可以暗示错误的类型。
Message Text 它是错误消息的简短描述,其中包括涉及的路由器硬件和软件信息。
下面是一些错误消息的示例。用户可以查阅CCO ISO文档的系统错误消息一节,以查找这些错误消息的说明。
%DUAL-3-SIA:Route 171.155.148.192/26 stuck-in-active state in IP-EIGP 211.
Cleaning up
%LANCE-3-OWNERR: Unit 0, buffer ownership error
需要注意的是,并不是所有的消息都涉及到故障或者问题的状况。某些消息显示的是状态方面的信息。例如,以下消息仅表明ISDN BRI
0接口与特定的远端数据连接。
%ISDN-6-CONNECT: Interface BRI0 is now connected to 95551212
4.2 Traceback Report
某些与路由器内部错误相关的错误消息包含了traceback信息。在向Cisco TAC报告错误时,应在错误描述中加入这些信息。
5 错误消息和事件信息的日志
根据错误消息的重要性和有效性,Cisco错误消息可以被记录到以下位置:
;; 控制台 n
;; 虚拟终端n
;; Syslog服务器n
;; 内部缓冲区n
logging on 命令使日志消息的输出到上述位置。对于Syslog服务器,必须使用下述全局配置命令指明服务器的IP地址:
logging ip-address
通过反复使用这一命令,可以建立一个服务器的列表。在管理大型网络时,通常需要设置冗余服务器。
logging
buffered命令用于将日志信息发送到内部缓冲区。缓冲区的大小必须在4096字节以上。缺省值根据系统平台的不同而不同。用户需要选择适合环境的缓冲区大小。如果缓冲区太小,新的消息将会覆盖旧的消息。这有可能会导致问题。但是,如果缓冲区大小过大将会浪费系统缓存。no
logging buffered命令将禁止消息被写入内部缓存。
用户可以使用show logging命令显示内部缓冲区的内容。如果用户需要某一时间段的信息,首先使用NTP或者手工设置时钟,具体操作为:
YH-Router#clock set 11:37:00 December 2000
YH-Router#sh clock
11:37:03.596 PST Fri Dec 11 2000
日志消息的时间戳和调试信息可以使用以下全局配置命令:
YH-Router (config)#service timestamps log datetime
YH-Router (config)#service timestamps debug datetime
terminal
monitor命令将在当前终端上显示调试时的日志信息。该命令不是一个配置命令。相反,它可以通过telnet到路由器时在命令行方式下使用。
在大多数情况下,用户可能需要显示某一级别的日志信息。因此,日志信息被分为八个不同的级别,按照重要程度由高到低排列如下:
Subfacility 它仅与通道接口处理器(CIP)卡有关。详细的信息可以参见Cisco文档的相关章节。
Severity 它是一个范围在0到7之间的数字。数字的值越小,严重程度越高。
Mnemonic 唯一标识错误消息的单值代码。该代码通常可以暗示错误的类型。
Message Text 它是错误消息的简短描述,其中包括涉及的路由器硬件和软件信息。
下面是一些错误消息的示例。用户可以查阅CCO ISO文档的系统错误消息一节,以查找这些错误消息的说明。
%DUAL-3-SIA:Route 171.155.148.192/26 stuck-in-active state in IP-EIGP 211.
Cleaning up
%LANCE-3-OWNERR: Unit 0, buffer ownership error
需要注意的是,并不是所有的消息都涉及到故障或者问题的状况。某些消息显示的是状态方面的信息。例如,以下消息仅表明ISDN BRI
0接口与特定的远端数据连接。
%ISDN-6-CONNECT: Interface BRI0 is now connected to 95551212
4.2 Traceback Report
某些与路由器内部错误相关的错误消息包含了traceback信息。在向Cisco TAC报告错误时,应在错误描述中加入这些信息。
5 错误消息和事件信息的日志
根据错误消息的重要性和有效性,Cisco错误消息可以被记录到以下位置:
;; 控制台 n
;; 虚拟终端n
;; Syslog服务器n
;; 内部缓冲区n
logging on 命令使日志消息的输出到上述位置。对于Syslog服务器,必须使用下述全局配置命令指明服务器的IP地址:
logging ip-address
通过反复使用这一命令,可以建立一个服务器的列表。在管理大型网络时,通常需要设置冗余服务器。
logging
buffered命令用于将日志信息发送到内部缓冲区。缓冲区的大小必须在4096字节以上。缺省值根据系统平台的不同而不同。用户需要选择适合环境的缓冲区大小。如果缓冲区太小,新的消息将会覆盖旧的消息。这有可能会导致问题。但是,如果缓冲区大小过大将会浪费系统缓存。no
logging buffered命令将禁止消息被写入内部缓存。
用户可以使用show logging命令显示内部缓冲区的内容。如果用户需要某一时间段的信息,首先使用NTP或者手工设置时钟,具体操作为:
YH-Router#clock set 11:37:00 December 2000
YH-Router#sh clock
11:37:03.596 PST Fri Dec 11 2000
日志消息的时间戳和调试信息可以使用以下全局配置命令:
YH-Router (config)#service timestamps log datetime
YH-Router (config)#service timestamps debug datetime
terminal
monitor命令将在当前终端上显示调试时的日志信息。该命令不是一个配置命令。相反,它可以通过telnet到路由器时在命令行方式下使用。
在大多数情况下,用户可能需要显示某一级别的日志信息。因此,日志信息被分为八个不同的级别,按照重要程度由高到低排列如下:
;; Emergencies n ;; Alerts n ;; Critical n ;; Errors n ;; Warnings n ;; Notifications n ;; Informational n ;; Debugging n |
例如,需要在控制台上显示严重程度等于或者大于警告(Warning)的所有日志信息,可以使用下述全局配置命令:
logging console warning
类似的,将某种类型的日志信息发送到当前的终端时,使用
logging monitor level
或者将信息发送到Syslog服务器时使用
logging trap level
与terminal monitor命令不同,logging monitor命令是路由器配置的一部分。前一种命令不允许在不同的安全级别下执行。
需要注意的是,将日志记录到不同的位置时,系统开销变化很大。将日志记录到控制台的开销比较大,然而将日志记录到虚拟终端时开销较小。使用Syslog服务器时开销更小。系统开销最小的日志写入方式是写入内部缓冲区。
6 核心转储(Core Dump)
为了查找路由器崩溃的原因,我们可以使用许多命令来获取有效的信息。其中我们已经讲解了show
stacks命令的用法。核心转储是系统内存映象的拷贝,它可以被写入到TFTP服务器中。从这个二进制文件中,我们可以获得与路由器崩溃或者严重误操作相关的信息,通过这些信息可以排除可能的故障。
下面的配置命令将核心转储写入到命令中IP地址对应的TFTP服务器上:
exception dump ip-address
write core命令通常用于路由器发生严重的误操作但是没有完全崩溃时,保存核心映像。
只有运行IOS v 9.0或更高版本的服务器才可以使用核心转储。但是,需要注意的是,在使用核心转储时,最好获取有经验的工程师或者Cisco
TAC的支持。
7 结束语
要顺利地诊断并排除网络故障,网络工程技术人员必须掌握两种基本的技能。首先是对网络技术和协议要有清楚的理解,它是诊断与排除网络故障的基础。没有适当的知识和经验,故障诊断与排除工具比如路由器诊断命令和网络分析仪都不能发挥其作用。
网络工程技术人员必须掌握的第二种技能是将所掌握的知识以有条理的方式应用于诊断和排除网络故障的过程中。本文虽然只阐述了一些诊断的命令,但需要强调的是:故障诊断与排除是一种结构化的方法。许多工程技术人员认为故障诊断与排除计划不如研究和应用技术本身重要。事实上,正确的计划在故障诊断与排除过程中往往起决定性的作用。在故障排除过程中,一个偶然的行为可能使故障得以顺利解决,但是它不能替代结构化的故障诊断与排除方法。
网络故障的排除是一项系统工程,应该经过定义问题、搜集事实、基于事实考虑可能性、建立行动计划、实施计划、观察结果和循环过程等步骤,这一过程就如同软件开发过程的瀑布模型,其重要性是不言而喻的。
logging console warning
类似的,将某种类型的日志信息发送到当前的终端时,使用
logging monitor level
或者将信息发送到Syslog服务器时使用
logging trap level
与terminal monitor命令不同,logging monitor命令是路由器配置的一部分。前一种命令不允许在不同的安全级别下执行。
需要注意的是,将日志记录到不同的位置时,系统开销变化很大。将日志记录到控制台的开销比较大,然而将日志记录到虚拟终端时开销较小。使用Syslog服务器时开销更小。系统开销最小的日志写入方式是写入内部缓冲区。
6 核心转储(Core Dump)
为了查找路由器崩溃的原因,我们可以使用许多命令来获取有效的信息。其中我们已经讲解了show
stacks命令的用法。核心转储是系统内存映象的拷贝,它可以被写入到TFTP服务器中。从这个二进制文件中,我们可以获得与路由器崩溃或者严重误操作相关的信息,通过这些信息可以排除可能的故障。
下面的配置命令将核心转储写入到命令中IP地址对应的TFTP服务器上:
exception dump ip-address
write core命令通常用于路由器发生严重的误操作但是没有完全崩溃时,保存核心映像。
只有运行IOS v 9.0或更高版本的服务器才可以使用核心转储。但是,需要注意的是,在使用核心转储时,最好获取有经验的工程师或者Cisco
TAC的支持。
7 结束语
要顺利地诊断并排除网络故障,网络工程技术人员必须掌握两种基本的技能。首先是对网络技术和协议要有清楚的理解,它是诊断与排除网络故障的基础。没有适当的知识和经验,故障诊断与排除工具比如路由器诊断命令和网络分析仪都不能发挥其作用。
网络工程技术人员必须掌握的第二种技能是将所掌握的知识以有条理的方式应用于诊断和排除网络故障的过程中。本文虽然只阐述了一些诊断的命令,但需要强调的是:故障诊断与排除是一种结构化的方法。许多工程技术人员认为故障诊断与排除计划不如研究和应用技术本身重要。事实上,正确的计划在故障诊断与排除过程中往往起决定性的作用。在故障排除过程中,一个偶然的行为可能使故障得以顺利解决,但是它不能替代结构化的故障诊断与排除方法。
网络故障的排除是一项系统工程,应该经过定义问题、搜集事实、基于事实考虑可能性、建立行动计划、实施计划、观察结果和循环过程等步骤,这一过程就如同软件开发过程的瀑布模型,其重要性是不言而喻的。