這裡介紹 Windows 與 Linux 系統中的 ping
指令用法,以及各種實用的網路檢測範例。
ping
這個指令是一個最常用的網路檢測工具,它可以藉由發送 ICMP ECHO_REQUEST 的封包,檢查自己與特定設備之間的網路是否暢通,並同時測量網路連線的來回通訊延遲時間(round-trip delay time),通常如果網路出問題時,我們都會使用 ping
這個指令來做初步的檢查。
ping
也可以與 arp
指令配合,掃瞄區域網路設備,產生 IP 與 MAC 卡號對應表。
在 Windows 中若要使用 ping
檢查網路,只要打開「命令提示字元」後輸入 ping
的指令加上主機的位址即可使用,若不加任何額外參數的話,ping
預設會送出 4 個 ICMP ECHO_REQUEST 封包,並統計測試結果。
ping blog.gtwang.org
以這個例子來說,我們檢查本機連線至 blog.gtwang.org 的網路情況,正常了收到 4 個 ICMP ECHO_RESPONSE 回應,來回通訊延遲時間分別為 60ms、61ms、60ms 與 69ms, 最後 ping 會算出基本的統計資料,包含已傳送封包數、已收到封包數、遺失封包數,還有來回通訊延遲時間的最大值、最小值與平均值。
以正常的網路狀況來說,應該所有送出的 ICMP 封包都要收到才對,也就是沒有遺失任何封包,而且來回通訊延遲時間應該都要很穩定維持在一定的數值,如果發現來回通訊延遲時間亂跳,就表示網路品值不太好,通訊不是很順,更嚴重一點甚至會出現封包遺失的的情況,最差的情況就是完全斷線,沒有任何回應。
如果覺得 4 個 ICMP 封包太少,可以使用 -n
參數指定封包數,例如發送 10 個 ICMP 封包:
ping -n 10 blog.gtwang.org
有時候在測試與檢修網路時,我們需要持續監看網路是否正常,這時候可以加上 -t
參數,讓 ping
持續不斷的 ping 特定主機,直到手動按下 Ctrl
+ c
為止:
ping -t blog.gtwang.org
這個狀況其實很常會遇到,在網路不通時我們會檢查各種可能出問題的地方,例如防火牆是否有設定錯誤、網路卡是否正常、網路線是否脫落、路由器是否當機等等,在檢查與修正之前我們通常會先執行這種持續性的 ping
指令(通常這時候是沒有回應的),然後才進行各種嘗試,直到 ping
的結果出現回應為止。
如果要針對測試 IPv4 的位址進行測試,可以使用 -4
參數:
ping -4 blog.gtwang.org
而若要測試 IPv6 的位址,則可使用 -6
參數:
ping -6 blog.gtwang.org
加上 -a
參數時,可以讓 ping
自動查詢 IP 位址的 DNS 反解名稱。
ping -a 45.118.135.69
ping
預設發出的 ICMP ECHO_REQUEST 封包大小是 32 位元組,我們可以透過 -l
參數自行指定大小:
ping -l 800 blog.gtwang.org
在某些網路中,太大的封包會被切割成多個小封包後再傳送,若要禁止封包被分割,可以加上 -f
參數,通常會配合 -l
參數一起使用:
ping -l 1200 -f blog.gtwang.org
若要查詢 ping
其他更進階的參數,可以使用 -h
來查詢:
ping -h
Linux 與 Mac OS X 中的 ping
指令用法與 Windows 有些小差異,比較明顯的不同就是直接執行 ping
時,它會持續不斷的每秒 ping 一次指定的設備,直到按下 Ctrl
+ c
終止為止:
ping blog.gtwang.org
不同系統的 ping
輸出格式也有些出入,不過呈現的內容都是一樣的。
若要指定發送的 ICMP ECHO_REQUEST 封包數,可以使用 -c
參數,例如仿照 Windows 下預設的方式,發出 4
個 ICMP ECHO_REQUEST 封包後就停止:
ping -c 4 blog.gtwang.org
輸出為:
PING linode01.gtwang.org (45.118.135.69) 56(84) bytes of data. 64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=1 ttl=64 time=0.035 ms 64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=2 ttl=64 time=0.090 ms 64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=3 ttl=64 time=0.051 ms 64 bytes from linode01.gtwang.org (45.118.135.69): icmp_seq=4 ttl=64 time=0.075 ms --- linode01.gtwang.org ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3039ms rtt min/avg/max/mdev = 0.035/0.062/0.090/0.023 ms
有時候在處理網路聽時,可能沒空一直盯著 ping
輸出看,這時候可以使用聲音的方式輸出結果,加上 -a
參數之後,ping
會在收到回應封包時,讓電腦的喇叭發出聲響:
ping -a blog.gtwang.org
若加上 -A
參數的話,則是會在封包遺失時發出聲響:
ping -A blog.gtwang.org
ping
預設是每秒送出一個 ICMP ECHO_REQUEST 封包,若要改變封包送出的間隔時間,可以使用 -i
參數指定:
ping -i 0.4 blog.gtwang.org
這樣就會每隔 0.4
秒送出一個 ICMP ECHO_REQUEST 封包。
如果一台電腦有兩個以上的網路介面(例如多張網路卡),我們可以使用 -I
參數指定要測試的網路介面:
ping -I eth0 blog.gtwang.org
另外也可以使用 IP 位址來指定:
ping -I 45.118.135.69 blog.gtwang.org
我們可以透過 -s
參數自行指定 ICMP 封包的大小:
ping -s 800 blog.gtwang.org
若要禁止封包被分割,在 Linux 中可以使用 -M
參數:
ping -s 800 -M dont blog.gtwang.org
若是在 Mac OS X 中則要改用 -D
參數:
ping -s 800 -D blog.gtwang.org
ping
預設會在輸出訊息中同時顯示 IP 位址以及 DNS 反解名稱,加上 -n
參數之後可以關閉自動 DNS 解析功能,僅以 IP 位址表示:
ping -n blog.gtwang.org
參考資料:lifewire