本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本檔案將說明在Cisco路由器上使用ping和traceroute命令。
本文件沒有特定需求。
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
附註:在生產路由器上使用的任何debug指令都可能會導致嚴重問題。發出debug 指令之前,請先閱讀使用Debug指令一節。
本檔案中的範例使用以下基本組態:
ping指令是排解裝置可及性疑難問題的一種極常見方法。此指令使用一系列網際網路控制訊息通訊協定 (ICMP) 回應訊息來判斷:
遠端主機處於作用中還是非作用中狀態。
用於與主機通訊的來回延遲。
封包遺失。
ping 指令首先將回應要求封包傳送到位址,然後等待回覆。只有發生以下情況時 ping 才會成功:
回應要求到達目的地,且
目的地可以在預定的時間(稱為逾時)內將回應回覆傳回來源。思科路由器上此逾時的預設值是兩秒。
ping 封包的 TTL 值無法更改。
下一個代碼示例顯示啟用debug ip packet detail 命令後的 ping 命令。
警告:在生產路由器上使用debug ip packet detail指令時,可能會造成CPU使用率高。這可能會導致效能嚴重下降或網路中斷。
Router1#debug ip packet detail IP packet debugging is on (detailed) Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, 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=172.16.12.1 (local), d=172.16.0.12 (Serial0), len 100, sending Jan 20 15:54:47.491: ICMP type=8, code=0 !--- This is the ICMP packet 172.16.12.1 sent to 172.16.0.12.
!--- ICMP type=8 corresponds to the echo message. Jan 20 15:54:47.523: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 100, rcvd 3 Jan 20 15:54:47.527: ICMP type=0, code=0 !--- This is the answer we get from 172.16.0.12. !--- 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型別值
ICMP 類型 | 常值 |
---|---|
0 | echo-reply |
3 | 目的地無法連線代碼0 =網路無法連線1 =主機無法連線2 =通訊協定無法連線3 =連線埠無法連線4 =需要分段,DF設定5 =來源路由失敗 |
4 | source-quench |
5 | 重新導向代碼 0 = 重新導向網路的資料包 1 = 重新導向主機的資料包 2 = 重新導向服務類型和網路的資料包 3 = 重新導向服務類型和主機的資料包 |
6 | alternate-address |
8 | echo |
9 | router-advertisement |
10 | router-solicitation |
11 | 超出時間代碼 0 = 超出傳輸中存留時間 1 = 超出分段重組時間 |
12 | parameter-problem |
13 | timestamp-request |
14 | timestamp-reply |
15 | information-request |
16 | information-reply |
17 | mask-request |
18 | mask-reply |
31 | conversion-error |
32 | mobile-redirect |
來自Ping工具的可能輸出字元
字元 | 說明 |
---|---|
! | 各個驚嘆號表示收到回覆。 |
. | 各個句號表示網路伺服器在等待回覆時逾時。 |
U | 收到目的地無法連線錯誤 PDU。 |
Q | 來源抑制(目的地太忙)。 |
M | 無法分段。 |
? | 未知的封包類型。 |
& | 超出封包存留時間。 |
如果無法成功對IP位址執行ping,請考慮本節所列的原因。
以下是嘗試執行ping失敗、可判斷問題以及解決問題方式的範例。以下範例以網路拓撲圖顯示:
Router1# ! interface Serial0 ip address 172.16.12.1 255.255.255.0 no fair-queue clockrate 64000 ! Router2# ! interface Serial0 ip address 10.0.2.23 255.255.255.0 no fair-queue clockrate 64000 ! interface Serial1 ip address 172.16.0.12 255.255.255.0 ! Router3# ! interface Serial0 ip address 172.16.3.34 255.255.255.0 no fair-queue ! interface Serial1 ip address 10.0.3.23 255.255.255.0 ! Router4# ! interface Serial0 ip address 172.16.4.34 255.255.255.0 no fair-queue clockrate 64000 !
嘗試從Router1對Router4執行ping:
Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
結果:
Router1#debug ip packet IP packet debugging is on
警告:在生產路由器上使用debug ip packet指令時,可能會造成CPU使用率高。這可能會導致效能嚴重下降或網路中斷。
Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: Jan 20 16:00:25.603: IP: s=172.16.12.1 (local), d=172.16.4.34, len 100, unroutable. Jan 20 16:00:27.599: IP: s=172.16.12.1 (local), d=172.16.4.34, len 100, unroutable. Jan 20 16:00:29.599: IP: s=172.16.12.1 (local), d=172.16.4.34, len 100, unroutable. Jan 20 16:00:31.599: IP: s=172.16.12.1 (local), d=172.16.4.34, len 100, unroutable. Jan 20 16:00:33.599: IP: s=172.16.12.1 (local), d=172.16.4.34, len 100, unroutable. Success rate is 0 percent (0/5)
由於Router1上沒有執行中的路由通訊協定,因此它不知道要將封包傳送到哪個位置,這時會導致「無法路由」訊息。
向Router1新增靜態路由:
Router1#configure terminal Enter 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 detail IP packet debugging is on (detailed) Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5) Jan 20 16:05:30.659: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:05:30.663: ICMP type=8, code=0 Jan 20 16:05:30.691: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:05:30.695: ICMP type=3, code=1 Jan 20 16:05:30.699: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:05:30.703: ICMP type=8, code=0 Jan 20 16:05:32.699: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:05:32.703: ICMP type=8, code=0 Jan 20 16:05:32.731: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:05:32.735: ICMP type=3, code=1 Jan 20 16:05:32.739: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:05:32.743: ICMP type=8, code=0
檢查Router2上發生什麼錯誤:
Router2#debug ip packet detail IP packet debugging is on (detailed) Router2# Jan 20 16:10:41.907: IP: s=172.16.12.1 (Serial1), d=172.16.4.34, len 100, unroutable Jan 20 16:10:41.911: ICMP type=8, code=0 Jan 20 16:10:41.915: IP: s=172.16.0.12 (local), d=172.16.12.1 (Serial1), len 56, sending Jan 20 16:10:41.919: ICMP type=3, code=1 Jan 20 16:10:41.947: IP: s=172.16.12.1 (Serial1), d=172.16.4.34, len 100, unroutable Jan 20 16:10:41.951: ICMP type=8, code=0 Jan 20 16:10:43.943: IP: s=172.16.12.1 (Serial1), d=172.16.4.34, len 100, unroutable Jan 20 16:10:43.947: ICMP type=8, code=0 Jan 20 16:10:43.951: IP: s=172.16.0.12 (local), d=172.16.12.1 (Serial1), len 56, sending Jan 20 16:10:43.955: ICMP type=3, code=1 Jan 20 16:10:43.983: IP: s=172.16.12.1 (Serial1), d=172.16.4.34, len 100, unroutable Jan 20 16:10:43.987: ICMP type=8, code=0 Jan 20 16:10:45.979: IP: s=172.16.12.1 (Serial1), d=172.16.4.34, len 100, unroutable Jan 20 16:10:45.983: ICMP type=8, code=0 Jan 20 16:10:45.987: IP: s=172.16.0.12 (local), d=172.16.12.1 (Serial1), len 56, sending Jan 20 16:10:45.991: ICMP type=3, code=1
Router1正確將封包傳送到Router2,但Router2不知道如何存取位址172.16.4.34。Router2將「無法連線的ICMP」訊息傳送回Router1。
在Router2和Router3上啟用路由資訊通訊協定(RIP):
Router2# router rip network 172.16.0.7 network 10.0.7.23 Router3# router rip network 10.0.7.23 network 172.16.0.34
結果:
Router1#debug ip packet IP packet debugging is on Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: Jan 20 16:16:13.367: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending. Jan 20 16:16:15.363: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending. Jan 20 16:16:17.363: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending. Jan 20 16:16:19.363: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending. Jan 20 16:16:21.363: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending. Success rate is 0 percent (0/5)
Router1將封包傳送到Router4,但Router4不會傳回回應。
Router4上可能發生問題:
Router4#debug ip packet IP packet debugging is on Router4# Jan 20 16:18:45.903: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:18:45.911: IP: s=172.16.4.34 (local), d=172.16.12.1, len 100, unroutable Jan 20 16:18:47.903: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:18:47.907: IP: s=172.16.4.34 (local), d=172.16.12.1, len 100, unroutable Jan 20 16:18:49.903: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:18:49.907: IP: s=172.16.4.34 (local), d=172.16.12.1, len 100, unroutable Jan 20 16:18:51.903: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:18:51.907: IP: s=172.16.4.34 (local), d=172.16.12.1, len 100, unroutable Jan 20 16:18:53.903: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:18:53.907: IP: s=172.16.4.34 (local), d=172.16.12.1, len 100, unroutable
路由器4收到ICMP封包並嘗試回應172.16.12.1,但由於它沒有通往此網路的路由,所以失敗。
向Router4新增靜態路由:
Router4(config)#ip route 0.0.0.0 0.0.0.0 Serial0
現在兩端可以彼此連線:
Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/35/36 ms
這種情況下,介面停止不再運作。下一個範例是嘗試從Router1對Router4執行ping:
Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5)
由於路由正確,請逐步排除故障。嘗試對Router2執行ping:
Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, 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 172.16.3.34 YES manual up up Serial1 10.0.3.23 YES manual administratively down down
修復這個問題的方法很簡單:
Router3#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router3(config)#interface serial1 Router3(config-if)#no shutdown Router3(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 serial0 Router4(config-if)#ip access-group 100 in Router1#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router1(config)#access-list 100 permit ip host 172.16.12.1 host 172.16.4.34 Router1(config)#access-list 100 permit ip host 172.16.4.34 host 172.16.12.1 Router1(config)#end Router1#debug ip packet 100 IP packet debugging is on Router1#debug ip icmp ICMP packet debugging is on
嘗試對Router4執行ping:
Router1#ping 172.16.4.34 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.4.34, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5) Jan 20 16:34:49.207: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:34:49.287: IP: s=172.16.4.34 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:34:49.291: ICMP: dst (172.16.12.1) administratively prohibited unreachable rcv from 172.16.4.34 Jan 20 16:34:49.295: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:34:51.295: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending Jan 20 16:34:51.367: IP: s=172.16.4.34 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:34:51.371: ICMP: dst (172.16.12.1) administratively prohibited unreachable rcv from 172.16.4.34 Jan 20 16:34:51.379: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 100, sending
access-list 指令的尾端一律會出現隱含的deny all。這表示在Router4上進入Serial 0介面的ICMP封包將遭拒絕,而Router4會向原始封包的來源傳送ICMP「管理性禁止而無法連線」訊息,如debug訊息所示。解決方式為在access-list指令中加入以下這行內容:
Router4(config)#access-list 100 permit icmp any any
在此案例中,這是乙太網路連線:
Router4#ping 172.16.100.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.100.5, timeout is 2 seconds: Jan 20 17:04:05.167: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, sending Jan 20 17:04:05.171: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, encapsulation failed. Jan 20 17:04:07.167: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, sending Jan 20 17:04:07.171: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, encapsulation failed. Jan 20 17:04:09.175: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, sending Jan 20 17:04:09.183: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, encapsulation failed. Jan 20 17:04:11.175: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, sending Jan 20 17:04:11.179: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, encapsulation failed. Jan 20 17:04:13.175: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, sending Jan 20 17:04:13.179: IP: s=172.16.100.4 (local), d=172.16.100.5 (Ethernet0), len 100, encapsulation failed. Success rate is 0 percent (0/5) Router4#
在本範例中,由於「encapsulation failed」訊息,ping無法運作。這表示路由器知道它必須將封包傳送到哪個介面,但不知道如何執行。在這種情況下,您需要瞭解位址解析通訊協定(ARP)的運作方式。
ARP是用於將第2層位址(MAC位址)對應到第3層位址(IP位址)的通訊協定。 可以使用show arp指令檢查此情況:
Router4#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.16.100.4 - 0000.0c5d.7a0d ARPA Ethernet0 Internet 172.16.100.7 10 0060.5cf4.a955 ARPA Ethernet0
傳回「封裝失敗」問題,但這次啟用debug arp命令:
Router4#debug arp ARP packet debugging is on Router4#ping 172.16.100.5 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.100.5, timeout is 2 seconds: Jan 20 17:19:43.843: IP ARP: creating incomplete entry for IP address: 172.16.100.5 interface Ethernet0 Jan 20 17:19:43.847: IP ARP: sent req src 172.16.100.4 0000.0c5d.7a0d, dst 172.16.100.5 0000.0000.0000 Ethernet0. Jan 20 17:19:45.843: IP ARP: sent req src 172.16.100.4 0000.0c5d.7a0d, dst 172.16.100.5 0000.0000.0000 Ethernet0. Jan 20 17:19:47.843: IP ARP: sent req src 172.16.100.4 0000.0c5d.7a0d, dst 172.16.100.5 0000.0000.0000 Ethernet0. Jan 20 17:19:49.843: IP ARP: sent req src 172.16.100.4 0000.0c5d.7a0d, dst 172.16.100.5 0000.0000.0000 Ethernet0. Jan 20 17:19:51.843: IP ARP: sent req src 172.16.100.4 0000.0c5d.7a0d, dst 172.16.100.5 0000.0000.0000 Ethernet0. Success rate is 0 percent (0/5)
上一個輸出顯示,Router4會廣播封包並將其傳送到乙太網路廣播位址FFFF.FFFF.FFFF。這裡,0000.0000.0000表示Router4會尋找目的地172.16.100.5的MAC位址。由於在本範例中要求ARP時它不知道該MAC位址,因此它使用000.000.000作為從介面Ethernet 0發出的廣播訊框中的佔位符,並詢問哪個MAC位址對應於172.16.100.5。如果沒有回應,MAC與show arp輸出中的IP位址對應的交換器會標示為不完整:
Router4#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 172.16.100.4 - 0000.0c5d.7a0d ARPA Ethernet0 Internet 172.16.100.5 0 Incomplete ARPA Internet 172.16.100.7 2 0060.5cf4.a955 ARPA Ethernet0
在預定的時段過後,這個不完整的項目將會從 ARP 表中清除。只要MAC地址不在ARP表中,ping就會由於「封裝失敗」而失敗。
預設情況下,如果兩秒內未收到來自遠端的回應,ping 就會失敗:
Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
在連結速度慢或長時間延遲的網路上,兩秒並不足夠。您可以使用延伸ping變更這個預設值:
Router1#ping Protocol [ip]: Target IP address: 172.16.0.12 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 172.16.0.12, timeout is 30 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1458/2390/6066 ms
有關延伸ping指令的詳細資訊,請參閱瞭解延伸Ping和延伸Traceroute指令。
在上一個範例中,當逾時增加時,ping成功執行。
附註:平均來回時間超過兩秒。
以下範例為常見情況:
在Router1上增加一個LAN介面:
Router1(config)#interface ethernet0 Router1(config-if)#ip address 10.0.0.1 255.255.255.0
您可以從LAN上的站台對Router1執行ping。您可以從Router1對Router2執行ping。但是無法從LAN上的站台對Router2執行ping。
您可以從 Router1 對 Router2 執行 ping,因為預設情況下,會使用傳出介面的 IP 位址作為 ICMP 封包中的來源位址。Router2沒有與此這個LAN相關的資訊。如果必須回覆來自此網路的封包,它便不知道如何處理該封包。
Router1#debug ip packet IP packet debugging is on
警告:在生產路由器上使用debug ip packet指令時,可能會造成CPU使用率高。這可能會導致效能嚴重下降或網路中斷。
Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, 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=172.16.12.1 (local), d=172.16.0.12 (Serial0), len 100, sending Jan 20 16:35:54.259: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 100, rcvd 3
上一個輸出範例可順利運作,因為所傳送封包的來源位址為172.16.12.1。若要模擬來自LAN的封包,需要使用延伸ping:
Router1#ping Protocol [ip]: Target IP address: 172.16.0.12 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: 10.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 172.16.0.12, timeout is 2 seconds: Jan 20 16:40:18.303: IP: s=10.0.0.1 (local), d=172.16.0.12 (Serial0), len 100, sending. Jan 20 16:40:20.303: IP: s=10.0.0.1 (local), d=172.16.0.12 (Serial0), len 100, sending. Jan 20 16:40:22.303: IP: s=10.0.0.1 (local), d=172.16.0.12 (Serial0), len 100, sending. Jan 20 16:40:24.303: IP: s=10.0.0.1 (local), d=172.16.0.12 (Serial0), len 100, sending Jan 20 16:40:26.303: IP: s=10.0.0.1 (local), d=172.16.0.12 (Serial0), len 100, sending. Success rate is 0 percent (0/5)
這次來源位址是10.0.0.1,但是無法運作。傳送資料包,但是未收到響應。要解決此問題,請在Router2中新增指向10.0.0.0的路由。基本規則是,ping裝置還必須知道如何向ping的源裝置傳送應答。
封包進入路由器時,路由器會嘗試將其轉送到中斷層級。如果在適當的快取表中找不到相符項目,則封包將排入傳入介面的輸入佇列中以進行處理。系統總是會處理某些封包,但若有適當的組態和在穩定的網路中,處理封包的速率決不會導致輸入佇列壅塞。如果輸入佇列已滿,封包會遭捨棄。
雖然介面已啟動,但因為輸入佇列捨棄率高而無法對裝置執行ping。您可以使用show interface指令檢查輸入捨棄專案。
Router1#show interface Serial0/0/0 Serial0/0/0 is up, line protocol is up MTU 1500 bytes, BW 1984 Kbit, DLY 20000 usec, reliability 255/255, txload 69/255, rxload 43/255 Encapsulation HDLC, loopback not set Keepalive set (10 sec) Last input 00:00:02, output 00:00:00, output hang never Last clearing of "show interface" counters 01:28:49 Input queue: 76/75/5553/0 (size/max/drops/flushes); Total output drops: 1760 Queueing strategy: Class-based queueing Output queue: 29/1000/64/1760 (size/max total/threshold/drops) Conversations 7/129/256 (active/max active/max total) Reserved Conversations 4/4 (allocated/max allocated) Available Bandwidth 1289 kilobits/sec !--- Output supressed
從輸出中可看出,輸入佇列捨棄率相當高。請參閱輸入佇列捨棄和輸出佇列捨棄疑難排解,以排解輸入/輸出佇列捨棄的疑難問題。
traceroute 指令用於探索封包到達目的地時實際行經的路由。裝置(例如路由器或 PC)將使用者資料包通訊協定 (UDP) 資料包序列傳送到遠端主機上的無效連接埠位址。
傳送了三個資料包,每個資料包的存留時間 (TTL) 欄位值都設為 1。TTL 值 1 會導致資料包在抵達路徑中的第一個路由器時立即「逾時」;然後此路由器會使用ICMP超出時間訊息(TEM)加以回應,指出資料包已過期。
現在傳送了另外三則 UDP 訊息,每則訊息的 TTL 值都設為 2,這會導致第二個路由器傳回 ICMP TEM。此程序會一直持續,直到封包確實到達另一個目的地為止。由於這些資料包嘗試存取目的地主機上的無效連線埠,因此傳回了ICMP連線埠無法連線訊息,指出無法連線的連線埠;此事件向 Traceroute 程式發出訊號,表示已順利完成。
此程序的目的是記錄每個 ICMP 超出時間訊息的來源,以提供封包到達目的地所行經的路徑追蹤軌跡。
Router1#traceroute 172.16.4.34 Type escape sequence to abort. Tracing the route to 172.16.4.34 1 172.16.0.12 4 msec 4 msec 4 msec 2 10.0.3.23 20 msec 16 msec 16 msec 3 172.16.4.34 16 msec * 16 msec Jan 20 16:42:48.611: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.615: UDP src=39911, dst=33434 Jan 20 16:42:48.635: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.639: ICMP type=11, code=0 !--- ICMP Time Exceeded Message from Router2. Jan 20 16:42:48.643: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.647: UDP src=34237, dst=33435 Jan 20 16:42:48.667: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.671: ICMP type=11, code=0 Jan 20 16:42:48.675: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.679: UDP src=33420, dst=33436 Jan 20 16:42:48.699: IP: s=172.16.0.12 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.703: ICMP type=11, code=0
這是使用TTL = 1傳送的第一個封包序列。第一個路由器(本例中為Router2(172.16.0.12))捨棄封包,並將傳回type=11 ICMP訊息給來源(172.16.12.1)。此訊息對應超出時間訊息。
Jan 20 16:42:48.707: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.711: UDP src=35734, dst=33437 Jan 20 16:42:48.743: IP: s=10.0.3.23 (Serial0), d=172.16.12.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=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.755: UDP src=36753, dst=33438 Jan 20 16:42:48.787: IP: s=10.0.3.23 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.791: ICMP type=11, code=0 Jan 20 16:42:48.795: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.799: UDP src=36561, dst=33439 Jan 20 16:42:48.827: IP: s=10.0.3.23 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.831: ICMP type=11, code=0
使用TTL = 2的Router3(10.0.3.23)會發生相同的程式:
Jan 20 16:42:48.839: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.843: UDP src=34327, dst=33440 Jan 20 16:42:48.887: IP: s=172.16.4.34 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:48.891: ICMP type=3, code=3 !--- Port Unreachable message from Router4. Jan 20 16:42:48.895: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:48.899: UDP src=37534, dst=33441 Jan 20 16:42:51.895: IP: s=172.16.12.1 (local), d=172.16.4.34 (Serial0), len 28, sending Jan 20 16:42:51.899: UDP src=37181, dst=33442 Jan 20 16:42:51.943: IP: s=172.16.4.34 (Serial0), d=172.16.12.1 (Serial0), len 56, rcvd 3 Jan 20 16:42:51.947: ICMP type=3, code=3
在TTL = 3的情況下,最終會到達Router4。這一次,由於連接埠無效,Router4 會傳回訊息給 Router1,包含一則 type=3 的 ICMP 訊息、一則目的地無法連線訊息,以及表示連接埠無法連線的 code=3。
下表列出traceroute指令輸出中可能出現的字元。
IP Traceroute 文字字元
字元 | 說明 |
---|---|
nn msec | 每個節點的指定探查數來回時間(以毫秒為單位) |
* | 探查已逾時 |
A | 管理性禁止(範例存取清單) |
Q | 來源抑制(目的地太繁忙) |
I | 使用者中斷測試 |
U | 連接埠無法連線 |
H | 主機無法連線 |
否 | 網路無法連線 |
P | 通訊協定無法連線 |
T | 逾時 |
? | 未知封包類型 |
您可以使用ping和traceroute指令取得來回時間(RTT)。這是傳送回應封包並獲得回覆所需的時間。這樣可以大致瞭解連結上的延遲。但是這些數字的精確度不足以用於評估效能。
封包目的地是路由器本身時,此封包必須採用程序交換方式。處理器必須處理來自此封包的資訊並傳回回應。這不是路由器的主要目標。根據定義,路由器是為路由封包而建。回應ping的功能以盡力服務形式提供。
為了說明此情況,以下提供從Router1對Router2執行ping的範例:
Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
RTT 大約為四毫秒。在 Router2 上啟用一些程序密集型功能後,嘗試從 Router1 對 Router2 執行 ping。
Router1#ping 172.16.0.12 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.0.12, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 24/25/28 ms
這裡的 RTT 明顯增加了。Router2相當繁忙,而優先順序是不回應ping。測試路由器效能的更好方法是運用通過路由器的流量。
接著流量進行快速交換,並由優先順序最高的路由器處理。基本網路說明了這一點:
從Router1對Router3執行ping:
Router1#ping 10.0.3.23 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.3.23, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/32 ms
流量通過Router2,現在正在進行快速交換。在Router2上啟用程式密集型功能:
Router1#ping 10.0.3.23 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.3.23, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/36 ms
幾乎沒有任何差異。這是因為在 Router2 上,現在是在中斷層級處理封包。
使用debug 指令之前,請先參閱有關Debug指令的重要資訊。
本文中使用的debug命令顯示了使用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 terminal Router4(config)#access-list 150 permit ip host 172.16.12.1 host 172.16.4.34 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 172.16.12.1 host 172.16.4.34 (5 matches)
透過此組態,Router4隻會輸出與存取清單150相符的偵錯訊息。從Router1執行ping會導致出現以下訊息:
Router4# Jan 20 16:51:16.911: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:51:17.003: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:51:17.095: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:51:17.187: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:51:17.279: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3
問題的答案並非來自Router4,因為這些封包與存取清單不相符。若要看到其回應,請新增:
Router4(config)#access-list 150 permit ip host 172.16.12.1 host 172.16.4.34 Router4(config)#access-list 150 permit ip host 172.16.4.34 host 172.16.12.1
結果:
Jan 20 16:53:16.527: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:53:16.531: IP: s=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending Jan 20 16:53:16.627: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:53:16.635: IP: s=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending Jan 20 16:53:16.727: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:53:16.731: IP: s=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending Jan 20 16:53:16.823: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:53:16.827: IP: s=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending Jan 20 16:53:16.919: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3 Jan 20 16:53:16.923: IP: s=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending
降低debug 指令影響的另一種方法是,在關閉debug指令後,使用show log 指令緩衝偵錯訊息並顯示:
Router4#configure terminal Router4(config)#no logging console Router4(config)#logging buffered 5000 Router4(config)#^Z Router4#debug ip packet IP packet debugging is on Router4#ping 172.16.12.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.12.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=172.16.4.34 (local), d=172.16.12.1 (Serial0), len 100, sending Jan 20 16:55:46.679: IP: s=172.16.12.1 (Serial0), d=172.16.4.34 (Serial0), len 100, rcvd 3
ping和traceroute指令是非常實用的公用程式,可用於排除網路存取問題。這些指令也非常容易使用。這兩個指令是網路工程師廣泛使用的指令。
修訂 | 發佈日期 | 意見 |
---|---|---|
2.0 |
04-Oct-2022 |
重新認證 |
1.0 |
10-Dec-2001 |
初始版本 |