PING和TRACEROUTE命令详解
首先要说,不要怕,慢慢看...
引言:这个文档介绍了ping和traceroute命令的用法。借助于一些debug命令,此文档捕获了一个关于这些命令如何工作的更多相关细节的视图。注意:在产品路由器上启用任何debug命令都将引起一系列问题。我们建议你在实行debug命令之前先仔细阅读Use the Debug Command 章节。
前提条件:在本文档中没有特别的要求。
组件:使用本文档没有特殊软件或者是硬件版本的限制。
本文档中的信息是由一个具体的实验环境设备产生的。文档中所有设备的使用都是从默认配置开始的。如果你的网络是活动的,请确保你能够了解任何命令产生的潜在影响。
协定:关于文档协定的更多信息,请浏览相关CiscoTechnical Tips Conventions.
关于本文档的背景信息,我们使用如下的基本配置作为我们的例子的基础。
PING命令
Ping命令是一个很常见的命令,用于排除设备可访问性的故障。它使用一系列的ICMP响应消息来确定:
·一个远程主机是否处于活动状态。
·主机通信的往返路程延迟。
·包丢失。
Ping命令首先发送一个响应请求到一个地址,然后等待答复。要ping成功,只有:
·响应请求到达目的地址,并且
·目的地址在一个称作超时(time out)的预设时间内能够获得一个响应应答返回给源地址,在Cisco路由器上,这个超时的默认值是2秒。
关于此命令的所有选项,在Troubleshooting Commands中,见“Ping”。
警告:在产品路由器中使用debug ip packet detail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令前仔细阅读Use the DebugCommand。
Router1#debug ippacket detail IP packet debugging is on(detailed)Router1#ping 12.0.0.2 Type escapesequence 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 sentto 12.0.0.2.
!--- ICMP type=8 corresponds to the echo message. Jan 2015:54:47.523: IP: s=12.0.0.2 (Serial0), d=12.0.0.1 (Serial0), len100,
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 replymessage.
!--- By default, the repeat count is five times, so there will befive !--- 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-queueclockrate 64000 ! ! Router2# ! ! interface Serial0ip 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.3255.255.255.0 no fair-queue ! interface Serial1 ip address 23.0.0.3255.255.255.0 ! ! Router4# ! ! interface Serial0ip address 34.0.0.4 255.255.255.0 no fair-queue clockrate 64000 !!
让我们尝试从Router1ping Router4:
Router1#ping 34.0.0.4 Type escapesequence 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 ippacketIP packet debugging is on
警告: 在产品路由器中使用debug ip packetdetail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令钱仔细阅读Use the DebugCommand。
Router1#ping 34.0.0.4Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to34.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 2016: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 terminalEnterconfiguration commands, one per line.
End with CNTL/Z. Router1(config)#ip route 0.0.0.0 0.0.0.0Serial0
我们现在有
Router1#debug ip packetdetailIP packet debugging is on(detailed)Router1#ping 34.0.0.4 Type escapesequence 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 2016:05:30.659: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len100,
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 packetdetailIP packet debugging is on (detailed)Router2# Jan 2016: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发送回一个“unreachableICMP”信息给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 packetdebugging 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 2016:16:19.363: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len100, 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 packetdebugging 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, len100, 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, len100, 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, len100, 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, len100, 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, len100, unroutable
Router4接收到了ICMP数据包,并且尝试去回答给12.0.0.1,但是因为它在网络中没有路由路径,因而它只是简单地失败了。
让我们增加一条静态路由给Router4:
Router4(config)#ip route 0.0.0.00.0.0.0 Serial0
现在它完美地工作了,而且两边都可以互相访问。
Router1#ping 34.0.0.4 Type escapesequence 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 escapesequence 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 escapesequence 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 interfacebrief Serial0
34.0.0.3
YES manual up
upSerial1
23.0.0.3
YES manual administratively down
down
这个故障很容易处理:
Router3#configureterminal Enter configuration commands, one per line.
End with CNTL/Z. Router3(config)#interface s1 Router3(config-if)#noshutdownRouter3(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 100permit tcp any any eq telnetRouter4(config)#interface s0Router4(config-if)#ip access-group 100inRouter1#configure terminalEnter configuration commands, one perline.
End with CNTL/Z.Router1(config)#access-list 100 permit ip host12.0.0.1 host 34.0.0.4Router1(config)#access-list 100 permit iphost 34.0.0.4 host 12.0.0.1Router1(config)#endRouter1#debug ippacket 100 IP packet debugging is onRouter1#debug ip icmpICMPpacket debugging is on
关于通过DEBUG命令来使用访问列表(AccessList),请浏览Use the DebugCommand章节。
我们现在尝试pingRouter4,我们有以下:
Router1#ping 34.0.0.4Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to34.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 prohibitedunreachable 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 2016:34:51.295: IP: s=12.0.0.1 (local), d=34.0.0.4 (Serial0), len100, 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 from34.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命令的末尾,我们总有一条隐含的“denyall”。这意味着正在进入到Router4的Serial 0 接口的ICMP包被拒绝,并且Router4发送一个ICMP“administrativelyprohibited unreachable”消息给在debug信息中显示的最初的数据包的源地址。
解决办法是在access-list命令中增加以下行:
Router4(config)#access-list100 permit icmp any any
Address ResloutionProtocol(ARP)
这里是一个以太网连接问题:
Router4#ping100.0.0.5 Type escape sequence to abort. Sending 5,100-byte ICMP Echos to 100.0.0.5, timeout is 2 seconds: Jan 2017:04:05.167: IP: s=100.0.0.4 (local), d=100.0.0.5 (Ethernet0), len100,
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不工作是因为“encapsulationfailed”。这表示路由器知道它应该发送数据包到哪个接口,但是不知道怎么做。这样的话,你需要理解Address Resolution Protocol(ARP)如何工作。关于它的详细解释,可以查看Configuring Address ResolutionMethods。
基本上,ARP是一个用于映射第二层地址(MAC地址)到第三层地址(IP地址)的一个协议。你可以使用showarp命令来查看这个映射:
Router4#show arpProtocol
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 ARPpacket debugging is on Router4#ping 100.0.0.5 Typeescape sequence to abort. Sending 5, 100-byte ICMP Echos to100.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 src100.0.0.4 0000.0c5d.7a0d,
dst 100.0.0.5 0000.0000.0000 Ethernet0.Jan 2017: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 arpProtocol
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 就由于“encapsulationfailed”而失败。
缺省延迟,如果你在2秒内没有接收到来自远程终端的回答,ping失败:
Router1#ping 12.0.0.2Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to12.0.0.2, timeout is 2 seconds: ..... Success rateis 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 ofsizes [n]: Type escape sequence to abort. Sending 5, 100-byte ICMPEchos to 12.0.0.2, timeout is 30 seconds: !!!!! Success rate is 100percent (5/5), round-trip min/avg/max = 1458/2390/6066ms
在上面的例子中,增加超时时间会使得ping能够成功。
注意:往返行程的平均时间是超过2秒的。
正确的源地址
这里是一个典型情况的例子:
我们在Router1上增加一个LAN接口:
Router1(config)#interfacee0 Router1(config-if)#ip addressRouter1(config-if)#ip address 20.0.0.1255.255.255.0
从LAN的一个站点中,你可以pingRouter1。从Router1你可以pingRouter2。但是从LAN的一个站点中,你不能pingRouter2。
从Router1中,你可以pingRouter2是因为,默认情况下,在你的ICMP包中,你使用输出接口的IP地址作为源地址。Router2没有关于这个新LAN的信息。如果它不得不应答来自这个网络的一个数据包,它不会知道该如何处理这个数据包。
Router1#debug ip packetIP packetdebugging is on
警告:在产品路由器中使用debug ip packetdetail命令会引致CPU的高利用率。这样可能会导致一个严重的性能降级或者网络中断。我们建议你在实行debug命令前仔细阅读Use the DebugCommand。
Router1#ping 12.0.0.2Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to12.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 2016:35:54.227: IP: s=12.0.0.1 (local), d=12.0.0.2 (Serial0), len100, 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 Sourceaddress or interface: 20.0.0.1 Type of service[0]: Set DF bit in IP header? [no]: Validate reply data? [no]: Datapattern [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 2016:40:18.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len100, 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 2016:40:24.303: IP: s=20.0.0.1 (local), d=12.0.0.2 (Serial0), len100, 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,使得第二个路由器返回ICMPTEMs 。这个过程继续直到数据报确实到达了目的地。因为这些数据报尝试访问目的主机的一个无效端口,ICMP端口不可达的消息将会被返回,表明一个不可达端口,这个事件表示Traceroute 程序已经完成了。
这个背后的意图是记录每个ICMP 超时消息的源,用以提供数据包所用于到达目的地的一个追踪路径。关于此命令的所有选项,请浏览Trace(privileged)。
Router1# traceroute34.0.0.4 Type escape sequence to abort. Tracing the routeto 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 2016:42:48.639:
ICMP type=11, code=0
!--- ICMP Time Exceeded Message from Router2.Jan 2016: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 2016: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 2016: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 2016: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 fromRouter3.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 2016: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 2016: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 2016: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), len56, rcvd 3Jan 20 16:42:48.891:
ICMP type=3, code=3!--- PortUnreachable 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 2016: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 2016:42:51.947:
ICMP type=3, code=3
当用到TTL=3时,我们最终到达了Router4。这次,因为端口是无效的,Router4发送一个type=3、一个目的地不可达,和一个code=3表示端口不可达的消息返回给Router1。
下表列出了可以发生在traceroute 命令输出的特征。
IP Traceroute TextCharacters
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.2Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to12.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上的一些过程密集型特征时,尝试去从Router1ping Router2。
Router1#ping 12.0.0.2Type escape sequence to abort. Sending 5, 100-byteICMP Echos to 12.0.0.2, timeout is 2 seconds: !!!!! Success rate is100 percent (5/5), round-trip min/avg/max = 24/25/28ms
该RTT值发生了引人注目的增长。Router2很繁忙,而且对ping进行回答并不是它的主要优先项。
一个更好的测试路由器性能的方法是随着通信穿越该路由器:
通信流量跟着被进行快速交换,并且被路由器以最高优先权进行处理。为了说明这个,让我们回到我们的基本网络:
让我们从Router1去ping Router3:
Router1#ping 23.0.0.3Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to23.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#ping23.0.0.3 Type escape sequence toabort. Sending 5, 100-byte ICMP Echos to 23.0.0.3, timeout is 2seconds: !!!!! Success rate is 100 percent (5/5), round-tripmin/avg/max = 32/32/36 ms
这样几乎没有什么差别。这是因为,在Router2 上,数据报现在以中断级被处理。
使用Debug命令
在实行debug命令之前,请浏览Important Information on DebugCommands。
当使用一个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#configureterminalRouter4(config)#access-list 150 permit iphost 12.0.0.1 host 34.0.0.4 Router4(config)#^ZRouter4#debug ip packet 150 IP packet debugging ison for access list 150 Router4#show debug Generic IP:
IP packet debugging is on for access list 150 Router4#showaccess-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 2016:51:17.003: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len100, 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 2016:51:17.279: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len100, rcvd 3
我们不再看到来自Router4的应答,因为这些数据包不符合访问列表。要看到它们,我们应该增加下面:
Router4(config)#access-list150 permit ip host 12.0.0.1 host 34.0.0.4Router4(config)#access-list 150 permit ip host 34.0.0.4host 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 2016:53:16.531: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len100, 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 2016:53:16.727: IP: s=12.0.0.1 (Serial0), d=34.0.0.4 (Serial0), len100, 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 2016:53:16.827: IP: s=34.0.0.4 (local), d=12.0.0.1 (Serial0), len100, 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被关闭之后马上使用showlog命令展示它们:
Router4#configureterminalRouter4(config)#no logging console Router4(config)#loggingbuffered 5000 Router4(config)#^Z
Router4#debug ip packet IP packet debugging is on Router4#ping12.0.0.1 Type escape sequence to abort. Sending 5, 100-byte ICMPEchos to 12.0.0.1, timeout is 2 seconds: !!!!! Success rate is 100percent (5/5), round-trip min/avg/max = 36/36/37 ms
Router4#undebug all All possible debugging has been turnedoff
Router4#show log Syslog logging: enabled (0 messages dropped, 0flushes, 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 LogBuffer (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 ProfessionalsConnection是一个给网络专家们分享问题,建议和关于网络解决方案、产品和技术的论坛。它的特征链接是其中一些在这种技术中的最新可用交流。