PING和TRACEROUTE命令详解
热16已有 417 次阅读 2012-03-28 14:09本文转载自56CTO
引言:
这个文档介绍了ping和traceroute命令的用法。借助于一些debug命令,此文档捕获了一个关于这些命令如何工作的更多相关细节的视图。
注意:在产品路由器上启用任何debug命令都将引起一系列问题。我们建议你在实行debug命令之前先仔细阅读Use the Debug Command 章节。
前提条件: 在本文档中没有特别的要求。
组件: 使用本文档没有特殊软件或者是硬件版本的限制。
本文档中的信息是由一个具体的实验环境设备产生的。文档中所有设备的使用都是从默认配置开始的。如果你的网络是活动的,请确保你能够了解任何命令产生的潜在影响。
协定: 关于文档协定的更多信息,请浏览相关Cisco Technical Tips Conventions.
关于本文档的背景信息,我们使用如下的基本配置作为我们的例子的基础。
PING命令
Ping命令是一个很常见的命令,用于排除设备可访问性的故障。它使用一系列的ICMP响应消息来确定:
·一个远程主机是否处于活动状态。
·主机通信的往返路程延迟。
·包丢失。
Ping命令首先发送一个响应请求到一个地址,然后等待答复。要ping成功,只有:
·响应请求到达目的地址,并且
·目的地址在一个称作超时(time out)的预设时间内能够获得一个响应应答返回给源地址,在Cisco路由器上,这个超时的默认值是2秒。
关于此命令的所有选项,在Troubleshooting Commands中,见“Ping”。
警告:在产品路由器中使用debug ip packet detail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令前仔细阅读Use the Debug Command。
Router1#debug ip packet detail IP packet debugging is on (detailed)Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/6/8 ms Router1# Jan 20 15:54:47.487: IP: s=12.0.0.1 (local), d=12.0.0.2 (Serial0), len 100,
sendingJan 20 15:54:47.491: ICMP type=8, code=0!--- This is the ICMP packet 12.0.0.1 sent to 12.0.0.2.
!--- ICMP type=8 corresponds to the echo message. Jan 20 15:54:47.523: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 100,
rcvd 3Jan 20 15:54:47.527: ICMP type=0, code=0!--- This is the answer we get from 12.0.0.2. !--- ICMP type=0 corresponds to the echo reply message.
!--- By default, the repeat count is five times, so there will be five !--- echo requests, and five echo replies
下表列出了ICMP-类型可能的值。
窗体顶端
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
为什么我不能Ping?如果你无法成功ping一个地址,考虑这些原因:
路由问题
这里是一些不能成功进行 ping的例子,确定问题,和如何解决问题。
这个方案是用下面的网络拓扑图来解释:
Router1# ! ! interface Serial0 ip address 12.0.0.1 255.255.255.0 no fair-queue clockrate 64000 ! ! Router2# ! ! interface Serial0 ip address 23.0.0.2 255.255.255.0 no fair-queue clockrate 64000 ! interface Serial1 ip address 12.0.0.2 255.255.255.0 ! !
Router3# ! ! interface Serial0 ip address 34.0.0.3 255.255.255.0 no fair-queue ! interface Serial1 ip address 23.0.0.3 255.255.255.0 ! ! Router4# ! ! interface Serial0 ip address 34.0.0.4 255.255.255.0 no fair-queue clockrate 64000 ! !
让我们尝试从Router1 ping Router4:
Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
让我们近距离看下发生了什么事:
Router1#debug ip packetIP packet debugging is on
警告: 在产品路由器中使用debug ip packet detail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令钱仔细阅读Use the Debug Command。
Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: Jan 20 16:00:25.603: IP: s=12.0.0.1 (local), d=34.0.0.4, len 100, unroutable.Jan 20 16:00:27.599: IP: s=12.0.0.1 (local), d=34.0.0.4, len 100, unroutable.Jan 20 16:00:29.599: IP: s=12.0.0.1 (local), d=34.0.0.4, len 100, unroutable.Jan 20 16:00:31.599: IP: s=12.0.0.1 (local), d=34.0.0.4, len 100, unroutable.Jan 20 16:00:33.599: IP: s=12.0.0.1 (local), d=34.0.0.4, len 100, unroutable.Success rate is 0 percent (0/5)
因为没有路由协议运行在Router1上,它不知道应该往哪里发送它的数据包并且我们得到一个“unroutable”信息。现在让我们增加一条静态路由给Router1:
Router1#configure terminalEnter configuration commands, one per line.
End with CNTL/Z. Router1(config)#ip route 0.0.0.0 0.0.0.0 Serial0
我们现在有
Router1#debug ip packet detailIP packet debugging is on (detailed)Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5) Jan 20 16:05:30.659: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100,
sendingJan 20 16:05:30.663:
ICMP type=8, code=0Jan 20 16:05:30.691: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 56,
rcvd 3Jan 20 16:05:30.695:
ICMP type=3, code=1Jan 20 16:05:30.699: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100,
sendingJan 20 16:05:30.703:
ICMP type=8, code=0Jan 20 16:05:32.699: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100,
sendingJan 20 16:05:32.703:
ICMP type=8, code=0Jan 20 16:05:32.731: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 56,
rcvd 3Jan 20 16:05:32.735:
ICMP type=3, code=1Jan 20 16:05:32.739: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100,
sendingJan 20 16:05:32.743:
ICMP type=8, code=0
现在让我们测试在Router2上面发生了什么错误:
Router2#debug ip packet detailIP packet debugging is on (detailed)Router2# Jan 20 16:10:41.907: IP: s=12.0.0.1 (Serial1), d=34.0.0.4, len 100, unroutableJan 20 16:10:41.911:
ICMP type=8, code=0Jan 20 16:10:41.915: IP: s=12.0.0.2 (local), d=12.0.0.1 (Serial1), len 56, sendingJan 20 16:10:41.919:
ICMP type=3, code=1Jan 20 16:10:41.947: IP: s=12.0.0.1 (Serial1), d=34.0.0.4, len 100, unroutableJan 20 16:10:41.951:
ICMP type=8, code=0Jan 20 16:10:43.943: IP: s=12.0.0.1 (Serial1), d=34.0.0.4, len 100, unroutableJan 20 16:10:43.947:
ICMP type=8, code=0Jan 20 16:10:43.951: IP: s=12.0.0.2 (local), d=12.0.0.1 (Serial1), len 56, sendingJan 20 16:10:43.955:
ICMP type=3, code=1Jan 20 16:10:43.983: IP: s=12.0.0.1 (Serial1), d=34.0.0.4, len 100, unroutableJan 20 16:10:43.987:
ICMP type=8, code=0Jan 20 16:10:45.979: IP: s=12.0.0.1 (Serial1), d=34.0.0.4, len 100, unroutableJan 20 16:10:45.983:
ICMP type=8, code=0Jan 20 16:10:45.987: IP: s=12.0.0.2 (local), d=12.0.0.1 (Serial1), len 56, sendingJan 20 16:10:45.991:
ICMP type=3, code=1
Router1正在正确地发送它的数据包给Router2,但是Router2不知道如何访问地址34.0.0.4。Router2发送回一个“unreachable ICMP”信息给Router1。
现在让我们在Router2和Router3上启用路由信息协议RIP:
Router2# router rip
network 12.0.0.0
network 23.0.0.0 Router3# router rip
network 23.0.0.0
network 34.0.0.0
现在我们有:
Router1#debug ip packetIP packet debugging is onRouter1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: Jan 20 16:16:13.367: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending.Jan 20 16:16:15.363: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending.Jan 20 16:16:17.363: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending.Jan 20 16:16:19.363: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending.Jan 20 16:16:21.363: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending.Success rate is 0 percent (0/5)
这次稍微好一点。Router1正发送数据包给Router4,但是没有从Router4中得到任何回答。
让我们看看Router4上可能发生的问题:
Router4#debug ip packetIP packet debugging is onRouter4# Jan 20 16:18:45.903: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100,
rcvd 3Jan 20 16:18:45.911: IP: s=34.0.0.4 (local), d=12.0.0.1, len 100, unroutableJan 20 16:18:47.903: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100,
rcvd 3Jan 20 16:18:47.907: IP: s=34.0.0.4 (local), d=12.0.0.1, len 100, unroutableJan 20 16:18:49.903: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100,
rcvd 3Jan 20 16:18:49.907: IP: s=34.0.0.4 (local), d=12.0.0.1, len 100, unroutableJan 20 16:18:51.903: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100,
rcvd 3Jan 20 16:18:51.907: IP: s=34.0.0.4 (local), d=12.0.0.1, len 100, unroutableJan 20 16:18:53.903: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100,
rcvd 3Jan 20 16:18:53.907: IP: s=34.0.0.4 (local), d=12.0.0.1, len 100, unroutable
Router4接收到了ICMP数据包,并且尝试去回答给12.0.0.1,但是因为它在网络中没有路由路径,因而它只是简单地失败了。
让我们增加一条静态路由给Router4:
Router4(config)#ip route 0.0.0.0 0.0.0.0 Serial0
现在它完美地工作了,而且两边都可以互相访问。
Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/35/36 ms
接口Down
这是一种接口停止工作的情况。在下面的例子中,我们尝试从Router1 PING向Router4:
Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5)
因为路由是正常的,我们将会一步一步来排除故障。首先,让我们试着去PING Router2:
Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
根据上面,我们看到问题介于Router2和Router3之间。一个可能性是Router3上的串行接口已经关闭了:
Router3#show ip interface brief Serial0
34.0.0.3
YES manual up
upSerial1
23.0.0.3
YES manual administratively down
down
这个故障很容易处理:
Router3#configure terminal Enter configuration commands, one per line.
End with CNTL/Z. Router3(config)#interface s1 Router3(config-if)#no shutdownRouter3(config-if)# Jan 20 16:20:53.900: %LINK-3-UPDOWN: Interface Serial1, changed state to up Jan 20 16:20:53.910: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1,
changed state to up
访问列表命令
在这个场景中,我们想要仅允许TELNET的信息流量通过Serial0接口进入Router4。
Router4(config)# access-list 100 permit tcp any any eq telnet Router4(config)#interface s0Router4(config-if)#ip access-group 100 inRouter1#configure terminalEnter configuration commands, one per line.
End with CNTL/Z.Router1(config)#access-list 100 permit ip host 12.0.0.1 host 34.0.0.4Router1(config)#access-list 100 permit ip host 34.0.0.4 host 12.0.0.1Router1(config)#endRouter1#debug ip packet 100 IP packet debugging is onRouter1#debug ip icmpICMP packet debugging is on
关于通过DEBUG命令来使用访问列表(Access List),请浏览Use the Debug Command章节。
我们现在尝试ping Router4,我们有以下:
Router1#ping 34.0.0.4 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 34.0.0.4, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5) Jan 20 16:34:49.207: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sendingJan 20 16:34:49.287: IP: s=34.0.0.4 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:34:49.291: ICMP: dst (12.0.0.1) administratively prohibited unreachable rcv from 34.0.0.4Jan 20 16:34:49.295: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sendingJan 20 16:34:51.295: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sendingJan 20 16:34:51.367: IP: s=34.0.0.4 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:34:51.371: ICMP: dst (12.0.0.1) administratively prohibited unreachable rcv from 34.0.0.4Jan 20 16:34:51.379: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 100, sending
在一个access-list命令的末尾,我们总有一条隐含的“deny all”。这意味着正在进入到Router4的Serial 0 接口的ICMP包被拒绝,并且Router4发送一个ICMP“administratively prohibited unreachable”消息给在debug信息中显示的最初的数据包的源地址。
解决办法是在access-list命令中增加以下行:
Router4(config)#access-list 100 permit icmp any any
Address Resloution Protocol(ARP)
这里是一个以太网连接问题:
Router4#ping 100.0.0.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 100.0.0.5, timeout is 2 seconds: Jan 20 17:04:05.167: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
sendingJan 20 17:04:05.171: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
encapsulation failed.Jan 20 17:04:07.167: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
sendingJan 20 17:04:07.171: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
encapsulation failed.Jan 20 17:04:09.175: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
sendingJan 20 17:04:09.183: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
encapsulation failed.Jan 20 17:04:11.175: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
sendingJan 20 17:04:11.179: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
encapsulation failed.Jan 20 17:04:13.175: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
sendingJan 20 17:04:13.179: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len 100,
encapsulation failed.Success rate is 0 percent (0/5)Router4#
在这个例子中,ping不工作是因为“encapsulation failed”。这表示路由器知道它应该发送数据包到哪个接口,但是不知道怎么做。这样的话,你需要理解Address Resolution Protocol(ARP)如何工作。关于它的详细解释,可以查看Configuring Address Resolution Methods。
基本上,ARP是一个用于映射第二层地址(MAC地址)到第三层地址(IP地址)的一个协议。你可以使用show arp命令来查看这个映射:
Router4#show arp Protocol
Address
Age (min)
Hardware Addr
Type
InterfaceInternet
100.0.0.4
-
0000.0c5d.7a0d
ARPA
Ethernet0Internet
100.0.0.1
10
0060.5cf4.a955
ARPA
Ethernet0
回到“encapsulation failed”问题。我们用debug命令来获得对这个问题的一个更好了解:
Router4#debug arp ARP packet debugging is on Router4#ping 100.0.0.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 100.0.0.5, timeout is 2 seconds: Jan 20 17:19:43.843: IP ARP: creating incomplete entry for IP address: 100.0.0.5
interface Ethernet0Jan 20 17:19:43.847: IP ARP: sent req src 100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Jan 20 17:19:45.843: IP ARP: sent req src 100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Jan 20 17:19:47.843: IP ARP: sent req src 100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Jan 20 17:19:49.843: IP ARP: sent req src 100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Jan 20 17:19:51.843: IP ARP: sent req src 100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Success rate is 0 percent (0/5)
上面的输出表明Router4正在通过发送数据包到以太网广播地址FFFF.FFFF.FFFF来广播数据包。这里,0000.0000.0000意味着Router4正在为目的地100.0.0.5寻找MAC地址。因为它无法在ARP请求中知道MAC地址。在这个例子里,它用0000.0000.0000在发送到Ethenett0接口广播帧中作为预留位置,询问符合100.0.0.5的MAC地址。如果我们没有得到一个回答,那么在show
arp输出中对应的地址被标记为incomplete:
Router4#show arp Protocol
Address
Age (min)
Hardware Addr
Type
InterfaceInternet
100.0.0.4
-
0000.0c5d.7a0d
ARPA
Ethernet0Internet
100.0.0.5
0
Incomplete
ARPAInternet
100.0.0.1
2
0060.5cf4.a955
ARPA
Ethernet0
在一段预定时间之后,这个 incomplete条目从ARP表中被完全清除。只要对应的MAC地址不在ARP表中,ping 就由于“encapsulation failed”而失败。
缺省延迟,如果你在2秒内没有接收到来自远程终端的回答,ping失败:
Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
对于慢速连接或者长延时的网络,2秒是不足够的。你可以使用一个扩展ping来更改这个缺省时间:
Router1#ping Protocol [ip]: Target IP address:
12.0.0.2 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: 30 Extended commands [n]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 30 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1458/2390/6066 ms
在上面的例子中,增加超时时间会使得ping能够成功。
注意:往返行程的平均时间是超过2秒的。
正确的源地址
这里是一个典型情况的例子:
我们在Router1上增加一个LAN接口:
Router1(config)#interface e0 Router1(config-if)#ip address Router1(config-if)#ip address 20.0.0.1 255.255.255.0
从LAN的一个站点中,你可以ping Router1。从Router1你可以ping Router2。但是从LAN的一个站点中,你不能ping Router2。
从Router1中,你可以ping Router2是因为,默认情况下,在你的ICMP包中,你使用输出接口的IP地址作为源地址。Router2没有关于这个新LAN的信息。如果它不得不应答来自这个网络的一个数据包,它不会知道该如何处理这个数据包。
Router1#debug ip packetIP packet debugging is on
警告: 在产品路由器中使用debug ip packet detail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令前仔细阅读Use the Debug Command。
Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/7/9 ms Router1# Jan 20 16:35:54.227: IP: s=12.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sendingJan 20 16:35:54.259: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 100, rcvd 3
上面输出例子正常工作是因为我们发送的数据包的源地址是S=12.0.0.1。如果我们要模拟一个来自LAN的数据包,我们要使用一个扩展ping :
Router1#ping Protocol [ip]: Target IP address: 12.0.0.2 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: 20.0.0.1 Type of service [0]: Set DF bit in IP header? [no]: Validate reply data? [no]: Data pattern [0xABCD]: Loose, Strict, Record, Timestamp, Verbose[none]: Sweep range of sizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: Jan 20 16:40:18.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sending.Jan 20 16:40:20.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sending.Jan 20 16:40:22.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sending.Jan 20 16:40:24.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sendingJan 20 16:40:26.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len 100, sending.Success rate is 0 percent (0/5)
这一次,源地址是20.0.0.1,并且它不工作!我们正在发送我们的数据包,但是接收不到任何东西。要解决这个问题,我们只需简单地在Router2 上增加一条路由到20.0.0.0 。
基本规则是,被ping的设备应该知道如何发送应答给ping的源(source)。
Traceroute 命令
traceroute命令是用于发现数据包发送到目的地时实际上采取的路由。设备(举例来说,一个路由器或者一台PC)发送一系列的用户数据报协议(UDP)数据包给远程主机的一个无效端口地址。
发送了3个数据报,每个都在Time-To-Live(TTL)值域里面设置为1。TTL值为1导致数据报一到达在路径中的第一个路由器就“timeout”;这个路由器然后响应一个ICMP的Time Exceeded Message(TEM超时消息)表明数据报已经过期。
另外三个UDP数据报消息现在开始发送,每个的TTL值设置为2,使得第二个路由器返回ICMP TEMs 。这个过程继续直到数据报确实到达了目的地。因为这些数据报尝试访问目的主机的一个无效端口,ICMP端口不可达的消息将会被返回,表明一个不可达端口,这个事件表示Traceroute 程序已经完成了。
这个背后的意图是记录每个ICMP 超时消息的源,用以提供数据包所用于到达目的地的一个追踪路径。关于此命令的所有选项,请浏览Trace(privileged)。
Router1# traceroute 34.0.0.4 Type escape sequence to abort. Tracing the route to 34.0.0.4
1 12.0.0.2 4 msec 4 msec 4 msec
2 23.0.0.3 20 msec 16 msec 16 msec
3 34.0.0.4 16 msec *
16 msec
Jan 20 16:42:48.611: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.615:
UDP src=39911, dst=33434Jan 20 16:42:48.635: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.639:
ICMP type=11, code=0
!--- ICMP Time Exceeded Message from Router2.Jan 20 16:42:48.643: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.647:
UDP src=34237, dst=33435Jan 20 16:42:48.667: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.671:
ICMP type=11, code=0Jan 20 16:42:48.675: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.679:
UDP src=33420, dst=33436Jan 20 16:42:48.699: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.703:
ICMP type=11, code=0
这是我们发送的TTL=1的第一个序列包组。第一个路由器,在本例中Router2(12.0.0.2),丢弃了包,并且发送返回一个type=11的ICMP消息到源(12.0.0.1)。这个相当于超时信息。
Jan 20 16:42:48.707: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.711:
UDP src=35734, dst=33437Jan 20 16:42:48.743: IP: s=23.0.0.3 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3
Jan 20 16:42:48.747:
ICMP type=11, code=0
!--- ICMP Time Exceeded Message from Router3.Jan 20 16:42:48.751: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.755:
UDP src=36753, dst=33438Jan 20 16:42:48.787: IP: s=23.0.0.3 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.791:
ICMP type=11, code=0Jan 20 16:42:48.795: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.799:
UDP src=36561, dst=33439Jan 20 16:42:48.827: IP: s=23.0.0.3 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.831:
ICMP type=11, code=0
相同的过程在Router3(23.0.0.3)上发生,此时TTL=2:
Jan 20 16:42:48.839: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.843:
UDP src=34327, dst=33440Jan 20 16:42:48.887: IP: s=34.0.0.4 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:48.891:
ICMP type=3, code=3!--- Port Unreachable message from Router4.
Jan 20 16:42:48.895: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:48.899:
UDP src=37534, dst=33441Jan 20 16:42:51.895: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len 28, sendingJan 20 16:42:51.899:
UDP src=37181, dst=33442Jan 20 16:42:51.943: IP: s=34.0.0.4 (Serial0), d=12.0.0.1 (Serial0), len 56, rcvd 3Jan 20 16:42:51.947:
ICMP type=3, code=3
当用到TTL=3时,我们最终到达了Router4。这次,因为端口是无效的,Router4发送一个type=3、一个目的地不可达,和一个code=3表示端口不可达的消息返回给Router1。
下表列出了可以发生在traceroute 命令输出的特征。
IP Traceroute Text Characters
Character
Description
nn msec
对于每个节点,规定数量的探针的往返时间按毫秒计算
*
探针超时
A
管理禁止(例如,访问列表access-list)
Q
源抑制(目标过于繁忙)
I
用户中断测试
U
端口不可达
H
主机不可达
N
网络不可达
P
协议不可达
T
超时
?
未知的数据包类型
性能表现
使用ping和traceroute命令,我们获得往返时间(RTT)。这是请求发送一个响应数据包,而且得到一个回答数据包的时间。这对于获得一个粗略的链路延迟时间概念会很有用。然而,这些数字并不足够精确用于性能评估。
当一个数据包的目的地是路由器它本身,这个包必须进行过程交换。处理器要处理来自这个包的信息,并且发送一个应答包。这并不是一个路由器的主要目标。根据定义,一个路由器被制造用来路由数据包。回答一个ping 是作为一个尽力而为的服务被提供的。
为了说明这个,这里是一个从Router1到Router2的ping 的例子:
Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
该RTT值大约是4毫秒。在你启用了Router2上的一些过程密集型特征时,尝试去从Router1 ping Router2。
Router1#ping 12.0.0.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 24/25/28 ms
该RTT值发生了引人注目的增长。Router2 很繁忙,而且对ping进行回答并不是它的主要优先项。
一个更好的测试路由器性能的方法是随着通信穿越该路由器:
通信流量跟着被进行快速交换,并且被路由器以最高优先权进行处理。为了说明这个,让我们回到我们的基本网络:
让我们从Router1去 ping Router3:
Router1#ping 23.0.0.3 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 23.0.0.3, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/32 ms
通信流量正在穿过Router2,并且现在正进行快速交换。
现在让我们启用Router2 上的过程密集型特征:
Router1#ping 23.0.0.3 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 23.0.0.3, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/36 ms
这样几乎没有什么差别。这是因为,在Router2 上,数据报现在以中断级被处理。
使用Debug 命令
在实行debug 命令之前,请浏览Important Information on Debug Commands。
当使用一个ping或者是traceroute命令时,我们到目前为止使用的不同debug 命令让我们洞察了到底发生了什么。他们在排除故障时同样可以很有用。然而,在一个生产环境,应该要小心使用那些调试命令。如果你的CPU不是强大的,又或者如果你有很多过程密集型数据包的话,它们会很容易使你的设备响应不过来。在路由器上有几个方法使得debug命令造成的影响最小化。其中一个方法是使用访问列表使得你想要监视的指定流量变狭窄。这里是一个例子:
Router4#debug ip packet ?
<1-199>
Access list
<1300-2699>
Access list (expanded range)
detail
Print more debugging detail
Router4#configure terminalRouter4(config)#access-list 150 permit ip host 12.0.0.1 host 34.0.0.4 Router4(config)#^Z Router4#debug ip packet 150 IP packet debugging is on for access list 150 Router4#show debug Generic IP:
IP packet debugging is on for access list 150 Router4#show access-list Extended IP access list 150
permit ip host 12.0.0.1 host 34.0.0.4 (5 matches)
有这份配置,Router4仅输出符合访问列表150的debug信息。一个来自Router1的ping 引起显示下面的信息:
Router4# Jan 20 16:51:16.911: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:51:17.003: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:51:17.095: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:51:17.187: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:51:17.279: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3
我们不再看到来自Router4的应答,因为这些数据包不符合访问列表。要看到它们,我们应该增加下面:
Router4(config)#access-list 150 permit ip host 12.0.0.1 host 34.0.0.4 Router4(config)#access-list 150 permit ip host 34.0.0.4 host 12.0.0.1
我们然后有:
Jan 20 16:53:16.527: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:53:16.531: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sendingJan 20 16:53:16.627: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:53:16.635: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sendingJan 20 16:53:16.727: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:53:16.731: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sendingJan 20 16:53:16.823: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:53:16.827: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sendingJan 20 16:53:16.919: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3Jan 20 16:53:16.923: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sending
最小化debug命令影响的另一种方法是缓冲信息并在debug被关闭之后马上使用show log命令展示它们:
Router4#configure terminalRouter4(config)#no logging console Router4(config)#logging buffered 5000 Router4(config)#^Z
Router4#debug ip packet IP packet debugging is on Router4#ping 12.0.0.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 12.0.0.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 36/36/37 ms
Router4#undebug all All possible debugging has been turned off
Router4#show log Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns)
Console logging: disabled
Monitor logging: level debugging, 0 messages logged
Buffer logging: level debugging, 61 messages logged
Trap logging: level informational, 59 message lines logged Log Buffer (5000 bytes):
Jan 20 16:55:46.587: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len 100, sendingJan 20 16:55:46.679: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len 100, rcvd 3
正如你所看见的,ping 和traceroute
命令都是很有用的实用程序,你可以用来排除网络访问故障。它们同样都很容易使用。虽然这两个命令是被网络工程师们使用最广泛的命令,理解它们对于排除网络连通性问题是十分重要的。
网络专家讨论论坛—Featured Conversations Networking Professionals Connection是一个给网络专家们分享问题,建议和关于网络解决方案、产品和技术的论坛。它的特征链接是其中一些在这种技术中的最新可用交流。







发表评论 评论 (4 个评论)