|
在路由器的故障分析中,Ping命令是一个常见而实用的管理工具,用这种工具可以测试端到端的连通性,即检查源端到目的端是否通畅。Ping的原理很简单,就是从源端向目的端发出一定数量的包,然后从目的端返回这些包的响应,如果在一定的时间内源端收到响应,则程序返回从包发出到收到的时间间隔,根据时间间隔就可以统计的延迟。如果包的响应在一定时间间隔内没有收到,则程序认为包丢失,返回请求超时的结果。我们经常让Ping一次发一定数量的包,然后检查收到相应的包的数量,则可统计出端到端的丢包率,而丢包率是检验质量的重要参数。 在路由器上Ping返回符号的含义如下表所示: 符号 描述 ! 收到一个响应。 . 在等待时,器超时。 U 目标无法到达,受到错误的PDU。 Q 源消失(目标设备太忙)。 M 无法分割。 ? 包类型未知。 & 报的有效期过了。 在路由器上无法Ping通一个地址的原因有很多种,譬如线路故障,对方路由器的接口没有起来,路由器的路由表中没有该地址的路由信息等等都会造成无法Ping通。
实例一:
结构如(图1)示。
=700)window.open('/news/UploadFiles_9994/200705/20070526103405173.jpg');"src="http://3800hk.com/news/UploadFiles_9994/200705/20070526103405173.jpg"onload="if(this.width>700)this.width=700;if(this.height>700)this.height=700;"border=0> 图1
Router1#Ping34.0.0.4 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto34.0.0.4,timeoutis2seconds: ..... Successrateis0percent(0/5) 在Router1上无法Ping通Router4的接口,通过使用DEBUG命令来获得更多的信息,便于进一步的分析: Router1#debugippacket IPpacketdebuggingison Router1#Ping34.0.0.4 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto34.0.0.4,timeoutis2seconds: 5d21h:IP:s=12.0.0.1(local),d=34.0.0.4,Len100,unroutable. 5d21h:IP:s=12.0.0.1(local),d=34.0.0.4,Len100,unroutable. …… Successrateis0percent(0/5) 我们看到“unroutable”的消息,表明在Router1的路由表中不存在该地址的路由信息,Router1不知道该地址向何处转发,现增加一条缺省路由到Router1中: Router1#configureterminal Enterconfigurationcommands,oneperline.EndwithCNTL/Z. Router1(config)#iproute0.0.0.00.0.0.0Serial0/0 然后,再在Router1上使用Ping: Router1#Ping34.0.0.4 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto34.0.0.4,timeoutis2seconds: U.U.U Successrateis0percent(0/5) 6d03h:IP:s=12.0.0.1(local),d=34.0.0.4(Serial0/0),Len100,sending 6d03h:ICMPtype=8,code=0 6d03h:IP:s=12.0.0.2(Serial0/0),d=12.0.0.1(Serial0/0),Len56,rcvd3 6d03h:ICMPtype=3,code=1 …… 再看看在Router2上收到了什么信息: Router2# 21:56:04:IP:s=12.0.0.1(Serial1),d=34.0.0.4,Len100,unroutable 21:56:04:ICMPtype=8,code=0 21:56:04:IP:s=12.0.0.2(local),d=12.0.0.1(Serial1),Len56,sending 21:56:04:ICMPtype=3,code=1 …… 从上面的信息可以看出Router1已经能正确地发送包到Router2,但好象Router2并不知道如何转发地址34.0.0.4,所以Router2发送了“unreachable”的消息给Router1。因此分别给Router2和Router3加上动态路由协议RIP: Router2# routerrip network12.0.0.0 network23.0.0.0 Router3# routerrip network23.0.0.0 network34.0.0.0 然后,在Router1上PingRouter4的接口: Router1#Ping34.0.0.4 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto34.0.0.4,timeoutis2seconds: 5d21h:IP:s=12.0.0.1(local),d=34.0.0.4(Serial0/0),Len100,sending. 5d21h:IP:s=12.0.0.1(local),d=34.0.0.4(Serial0/0),Len100,sending. …… Successrateis0percent(0/5) 现在情况看起来好点,Router1能发包到Router4,只是收不到任何从Router4返回的信息。看来Router4上也有问题: Router4# 6d23h:IP:s=12.0.0.1(Serial0/0),d=34.0.0.4(Serial0/0),Len100,rcvd3 6d23h:IP:s=34.0.0.4(local),d=12.0.0.1,Len100,unroutable …… Router4收到了ICMP的包,但由于没有到12.0.0.1的路由信息,因此无法响应12.0.0.1所发过来的包。在Router4上增加一条缺省路由: Router4(config)#iproute0.0.0.00.0.0.0Serial0/0 这样问题得到了解决: Router1#Ping34.0.0.4 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto34.0.0.4,timeoutis2seconds: !!!!! Successrateis100percent(5/5),round-tripmin/avg/max=32/35/36ms
实例二:
结构如(图2)示:
=700)window.open('/news/UploadFiles_9994/200705/20070526103408469.jpg');"src="http://3800hk.com/news/UploadFiles_9994/200705/20070526103408469.jpg"onload="if(this.width>700)this.width=700;if(this.height>700)this.height=700;"border=0> 图2 Router1上增加了一个LAN的接口: Router1(config)#interfacee0/1 Router1(config-if)#ipaddress Router1(config-if)#ipaddress20.0.0.1255.255.255.0 结果LAN上的一台PC机能Ping通Router1,但却无法Ping通Router2,而在Router1上却能Ping通Router2。 Router1#Ping12.0.0.2 Typeescapesequencetoabort. Sending5,100-byteICMPEchosto12.0.0.2,timeoutis2seconds: !!!!! Successrateis100percent(5/5),round-tripmin/avg/max=4/7/9ms Router1# 5d23h:IP:s=12.0.0.1(local),d=12.0.0.2(Serial0/0),Len100,sending 5d23h:IP:s=12.0.0.2(Serial0/0),d=12.0.0.1(Serial0/0),Len100,rcvd3 在路由器上使用普通Ping时,其源IP地址为路由器上Ping包所出去的接口IP地址,在路由器上能通过使用扩展的Ping命令来更改缺省的源IP地址。现在在router1上通过使用扩展的Ping命令来模拟从LAN上发包到Router2: Router1#Ping Protocol[ip]: TargetIPaddress:12.0.0.2 Repeatcount[5]: Datagramsize[100]: Timeoutinseconds[2]: Extendedcommands[n]:y Sourceaddressorinterface:20.0.0.1 Typeofservice[0]: SetDFbitinIPheader?[no]:
Validatereplydata?[no]: Datapattern[0xABCD]: Loose,Strict,Record,Timestamp,Verbose[none]: Sweeprangeofsizes[n]: Typeescapesequencetoabort. Sending5,100-byteICMPEchosto12.0.0.2,timeoutis2seconds: 5d23h:IP:s=20.0.0.1(local),d=12.0.0.2(Serial0/0),Len100,sending. …… Successrateis0percent(0/5) 从上面的信息看,当源IP地址为20.0.0.1的时候,Router1能发包到Router2,只是无法收到Router2的响应包。解决的办法很简单,只有在Router2上增加一条路由到20.0.0.0就可以了。Ping成功的基本原则就是被Ping设备也必须知道如何发送回包到发起Ping的源地址。从Router1能Ping通Router2是因为默认下是把包出口的接口的IP地址作为源地址。但由于原先Router2并不知道新的LAN,所以当源地址为新的LAN的时候,就不知道如何发送回包到新的LAN。 从以上两个实例中可以看出来,在Debug命令的帮助下,我们也能通过Ping命令来发现和解决中的一些比较复杂的故障,而并不只是把它简单的作为测试是否通的工具而已。特别是路由器中的扩展的Ping命令所具有的可以任意设定源IP地址的特性,在实际使用当中更是能给我们在判断故障等方面带来很多的方便。
|