1. 程式人生 > 實用技巧 >ping和tracert命令

ping和tracert命令

Ping簡介

Ping是基於ICMP協議實現的。通過從源端向目的端傳送ICMP回顯請求(Echo Request)報文後,根據是否收到目的端的ICMP回顯應答(Echo Reply)報文來判斷目的端是否可達。即源端在一個有效時間內(等待回顯應答報文超時時間之前)收到目的端返回的ICMP回顯應答報文,則說明目的端可達。如果在有效時間內,沒有收到應答報文,則說明目的端不可達。對於可達的目的端,根據傳送報文個數、接收到響應報文個數來判斷鏈路的質量,根據Ping報文的往返時間來判斷鏈路的質量。

ping命令格式

這裡只列舉了常用的引數,並對引數進行解釋說明。詳細的命令引數解釋和使用方法請參見相應版本“命令參考” 網路管理與監控命令-Ping和Tracert配置命令中的ping

命令。

ping [ ip ] [ -a source-ip-address | -c count | -f | -s packetsize | -t timeout ] *host

  • -a:設定傳送ECHO-Request報文的源IP地址,如果不指定源IP地址,將採用出介面的IP地址作為ICMP ECHO-Request報文傳送的源地址。
  • -c:設定傳送ECHO-Request報文的次數,預設為5。當網路質量不高時,可以增加發送報文數目,通過丟包率來檢測網路質量。
  • -f:設定傳送的報文不分片,如果MTU值小於報文大小會丟棄該報文。
  • -s:設定傳送ECHO-Request報文大小(不含IP和ICMP頭),預設報文長度是56位元組。
  • -t:設定傳送完ECHO-Request後,等待ECHO-REPLY的超時時間。在網路狀況不好的情況下,可以適當改大該引數。預設為2s,即2s內沒有收到回覆報文即認為目的不可達。
  • host:可以是IP地址或域名,如果是域名會首先進行DNS解析,並顯示解析後的IP地址。

可以配合-s和-f引數來探測中間鏈路最大的MTU(鏈路PMTU),如設定-s為1472可以通而1473不通,則該鏈路最大MTU為1500(1472+20IP頭+8ICMP頭)。

PC上的Ping功能與作業系統相關,這裡以Windows作業系統為例說明:

ping [ -n number ] [ -t ] [ -l number

] [ -f ] [ -a ] ip-address

  • -n:Ping報文的個數,預設值為5。
  • -t:持續地Ping直到人為中斷,Ctrl+Break暫時中止Ping命令並檢視當前的統計結果,而Ctrl+C則中斷命令的執行。
  • -l:設定Ping報文所攜帶的資料部分的位元組數,設定範圍從0至65500。
  • -f:設定傳送的報文不分片,如果MTU值小於報文大小會丟棄該報文。
  • -a:反向解析IP地址為主機名。
  • ip-address:設定Ping命令的目的IP地址。

ping資訊說明

<HUAWEI> ping 10.135.18.118
  PING 10.135.18.118: 56  data bytes, press CTRL_C to break                      
    Reply from 10.135.18.118: bytes=56 Sequence=1 ttl=255 time=1 ms              
    Reply from 10.135.18.118: bytes=56 Sequence=2 ttl=255 time=1 ms              
    Reply from 10.135.18.118: bytes=56 Sequence=3 ttl=255 time=2 ms              
    Reply from 10.135.18.118: bytes=56 Sequence=4 ttl=255 time=1 ms              
    Reply from 10.135.18.118: bytes=56 Sequence=5 ttl=255 time=2 ms              
  --- 10.135.18.118 ping statistics ---                                          
    5 packet(s) transmitted                                                      
    5 packet(s) received                                                         
    0.00% packet loss                                                            
    round-trip min/avg/max = 1/1/2 ms

ping命令的顯示資訊說明:

  • 裝置發出了5個ping包,均收到了迴應。
  • 發出的ping包的大小為預設的56位元組。
  • ttl=255說明ping的目的裝置與發出ping報文的裝置直接相連。
  • time=1ms說明報文迴應時間為1ms,該引數通常可以作為網路是否擁塞的參考。

預設情況下,ping命令傳送5個ping報文,建議使用-c引數進行多次ping,可以更準確反應當前網路的狀況。根據返回的ping報文個數,可以對網路狀況進行判斷。

故障現象

可能原因

全部可達,但時間較長

  • 中間網路狀況不佳。
  • 閘道器裝置做了QoS,限制了轉發速度。

全部不可達

  • 網路中斷(含裝置與線纜)。
  • 中間經過的防火牆裝置不允許進行Ping探測,丟棄了ICMP報文。
  • 網路產生環路,TTL減到1後被丟棄。
  • 網路擁塞導致報文響應慢。

部分可達

  • 網路狀況不佳,部分報文被丟棄。
  • 中間網路配置有負載分擔,且其中部分分擔網路故障。
  • 遭到“泛洪”攻擊。

Tracert簡介

Ping可以告訴使用者目標是否可達,而Tracert命令用於測試資料報文從傳送主機到目的地所經過的閘道器,它主要檢查網路連線是否可達,以及分析網路什麼地方發生了故障。

圖1 Tracert工作流程圖

Tracert也是基於ICMP協議來實現的,如圖1所示,Tracert的工作流程為:

  1. 源端(SwitchA)向目的端(日誌主機)傳送一個UDP報文,TTL值為1,目的UDP埠號是大於30000的一個數,因為在大多數情況下,大於30000的UDP埠號是任何一個應用程式都不可能使用的埠號。
  2. 第一跳(SwitchB)收到源端發出的UDP報文後,判斷出報文的目的IP地址不是本機IP地址,將TTL值減1後,判斷出TTL值等於0,則丟棄報文並向源端傳送一個ICMP超時(Time Exceeded)報文(該報文中含有第一跳的IP地址10.1.1.2),這樣源端就得到了SwitchB的地址。
  3. 源端收到SwitchB的ICMP超時報文後,再次向目的端傳送一個UDP報文,TTL值為2。
  4. 第二跳(SwitchC)收到源端發出的UDP報文後,迴應一個ICMP超時報文,這樣源端就得到了SwitchC的地址(10.1.2.2)。
  5. 以上過程不斷進行,直到目的端收到源端傳送的UDP報文後,判斷出目的IP地址是本機IP地址,則處理此報文。根據報文中的目的UDP埠號尋找佔用此埠號的上層協議,因目的端沒有應用程式使用該UDP埠號,則向源端返回一個ICMP埠不可達(Destination Unreachable)報文(該報文含有目的端的IP地址10.1.3.2)。
  6. 源端收到ICMP埠不可達報文後,判斷出UDP報文已經到達目的端,則停止Tracert程式,從而得到資料報文從源端到目的端所經歷的路徑(10.1.1.2;10.1.2.2;10.1.3.2)。

tracert命令格式

tracert [ -a source-ip-address | -f first-ttl | -m max-ttl | -p port | -q nqueries | -w timeout ] *host

  • -a:指明本次Tracert命令配置的報文源地址。如果不指定源地址,將採用出介面的IP地址作為Tracert報文傳送的源地址。
  • -f:指定初始TTL。設定first-TTL,當經過的跳數小於此引數值,由於TTL欄位的值大於0,經過的這幾個節點不會返回ICMP超時報文給源主機。如果已經設定了max-TTL引數值,first-TTL的取值必須小於max-TTL。
  • -m:指定最大TTL。通常情況下,max-TTL的值被設定為經過站點的跳數。如果已經設定了first-TTL引數值,max-TTL的取值必須大於first-TTL。預設情況下,最大TTL為30。
  • -p:指定目的主機的UDP埠號。
    • 如果不指定目的主機的UDP埠號,Tracert命令使用大於32768的隨機的埠作為目標裝置的接收報文埠。
    • 如果指定目的UDP埠號,需要避免採用對端已經開啟的埠號,否則會導致Tracert失敗。
  • -q:指定每次傳送的UDP探測資料報文的個數。當網路質量不高時,可以增加發送探測資料報文的數目,保證探測報文能夠到達目的節點。預設情況下,每次傳送三個UDP探測資料報文。
  • -w:等待響應報文的超時時間。當傳送資料報文到達某閘道器超時,則輸出“ * ”。如果網路質量不高且速度很慢,建議增加發送資料報文的超時時間。預設超時時間為5000毫秒。
  • host:可以是IP地址或域名,如果是域名會首先進行DNS解析,並顯示解析後的IP地址。

PC上的Tracert功能與作業系統相關,這裡以Windows作業系統為例說明:

tracert [ -d ] [ -h maximum_hops ] [ -j host-list ] [ -w timeout ] host

  • -d:不解析主機名。
  • -h:指定最大TTL的數值。
  • -j:設定鬆散源地址路由列表。
  • -w:用於設定UDP報文的超時時間,單位為毫秒。
  • host:指定目的主機的域名或IP地址。

tracert資訊說明

<HUAWEI> tracert 10.135.18.118
 traceroute to  10.135.18.118(10.135.18.118), max hops: 30 ,packet length: 40,press CTRL_C to break 
 1 192.168.200.100 10 ms  2 ms  2 ms 
 2  *  *  * 
 3 10.135.18.118 10 ms  1 ms  2 ms

顯示資訊每行包含編號、到達的裝置IP地址、3次報文的響應時間。中間部分顯示為“* * *”,說明該節點裝置配置不允許Ping和Tracert。

當網路上出現路由環路時,使用ping命令只能知道接收端出現超時錯誤,而tracert命令能夠很容易發現路由環路等潛在問題。在Tracert某地址時,多次出現相同的地址,即可認為出現了路由環路。

備註:以上內容摘自華為文件