ping命令用來測試主機之間網絡的連通性。執行ping指令會使用ICMP傳輸協議,發出要求迴應的信息,若遠端主機的網絡功能沒有問題,就會迴應該信息,因而得知該主機運作正常。
語法
ping(選項)(參數)
選項
-d:使用Socket的SO_DEBUG功能;
-c<完成次數>:設置完成要求迴應的次數;
-f:極限檢測;
-i<間隔秒數>:指定收發信息的間隔時間;
-I<網絡界面>:使用指定的網絡界面送出數據包;
-l<前置載入>:設置在送出要求信息之前,先行發出的數據包;
-n:只輸出數值;
-p<範本樣式>:設置填滿數據包的範本樣式;
-q:不顯示指令執行過程,開頭和結尾的相關信息除外;
-r:忽略普通的Routing Table,直接將數據包送到遠端主機上;
-R:記錄路由過程;
-s<數據包大小>:設置數據包的大小;
-t<存活數值>:設置存活數值TTL的大小;
-v:詳細顯示指令的執行過程。
參數
目的主機:指定發送ICMP報文的目的主機。
實例
檢測是否與主機連通
# ping www.w3cschool.cc //ping主機
PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms
--- aries.m.alikunlun.com ping statistics ---
10 packets transmitted, 30 received, 0% packet loss, time 29246ms
rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms
//需要手動終止Ctrl+C
指定接收包的次數
# ping -c 2 www.w3cschool.cc
PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms
--- aries.m.alikunlun.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms
//收到兩次包後,自動退出
多參數使用
# ping -i 3 -s 1024 -t 255 g.cn //ping主機
PING g.cn (203.208.37.104) 1024(1052) bytes of data.
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms
--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6001ms
rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
[root@linux ~]#
//-i 3 發送週期爲 3秒 -s 設置發送包的大小 -t 設置TTL值爲 255
補充知識:
簡述:
ICMP協議是“Internet Control Message Ptotocol”(因特網控制消息協議)的縮寫。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。
ping (Packet Internet Groper),因特網包探索器,用於測試網絡連接量的程序。Ping發送一個ICMP;回聲請求消息給目的地並報告是否收到所希望的ICMP echo (ICMP回聲應答)。它是用來檢查網絡是否通暢或者網絡連接速度的命令
ping命令通常用來作爲網絡可用性的檢查。ping命令可以對一個網絡地址發送測試數據包,看該網絡地址是否有響應並統計響應時間,以此測試網絡。
ping和ICMP的關係:ping命令發送數據使用的是ICMP協議。
ping的原理:
向指定的網絡地址發送一定長度的數據包,按照約定,若指定網絡地址存在的話,會返回同樣大小的數據包,當然,若在特定時間內沒有返回,就是“超時”,會被認爲指定的網絡地址不存在。
ICMP協議通過IP協議發送的,IP協議是一種無連接的,不可靠的數據包協議。在Unix/Linux,序號從0開始計數,依次遞增。而Windows ping程序的ICMP序列號是沒有規律。
ICMP協議在實際傳輸中數據包:20字節IP首部 + 8字節ICMP首部 + 1472字節<數據大小>38字節。
ICMP報文格式:IP首部(20字節) + 8位類型 + 8位代碼 + 16校驗和 + (不同類型和代碼,格式也有所不同)。
1. 使用Ping這命令來測試網絡連通
連通問題是由許多原因引起的,如本地配置錯誤、遠程主機協議失效等,當然還包括設備等造成的故障。首先我們講一下使用Ping命令的步驟。
使用Ping檢查連通性有五個步驟:
A. 使用ipconfig /all觀察本地網絡設置是否正確,如圖;
B.Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是爲了檢查本地的TCP/IP協議有沒有設置好;
C. Ping本機IP地址,這樣是爲了檢查本機的IP地址是否設置有誤;
D. Ping本網網關或本網IP地址,這樣的是爲了檢查硬件設備是否有問題,也可以檢查本機與本地網絡連接是否正常;(在非局域網中這一步驟可以忽略)
E. Ping遠程IP地址,這主要是檢查本網或本機與外部的連接是否正常。
2. 用Ping命令來判斷一條鏈路好壞
Ping這個命令除了可以檢查網絡的連通和檢測故障以外,還有一個比較有趣的用途,那就是可以利用它的一些返回數據,來估算你跟某臺主機之間的速度是多少字節每秒。
在例子中:
"字節=32"表示ICMP報文中有32個字節的測試數據;
"時間=6ms"是往返時間。
"已發送=4"發送多個秒包、"已接收=4"收到多個迴應包、"丟失=0"丟棄了多少個;
Minmum 最小值 、MAXimun 最大值、Average 平均值。
所在圖上來看,來回只用了6MS 時間,lost =0 即是丟包數爲0,網絡狀態相當良好;
3. 對Ping後返回信息的分析
3.1 Request timed out
這是大家經常碰到的提示信息,很多文章中說這是對方機器置了過濾ICMP數據包,從上面工作過程來看,這是不完全正確的,至少有下幾種情況:
A. 對方已關機,或者網絡上根本沒有這個地址:比如在上圖中主機A中Ping 192.168.0.7,或者主機B關機了,在主機A中PING 192.168.0.5 都會得到超時的信息。
B. 對方與自己不在同一網段內,通過路由也無法找到對方,但有時對方確實是存在的,當然不存在也是返回超時的信息。
C. 對方確實存在,但設置了ICMP數據包過濾(比如防火牆設置)。
怎樣知道對方是存在,還是不存在呢,可以用帶參數 -a 的Ping命令探測對方,如果能得到對方的NETBIOS名稱,則說明對方是存在的,是有防火牆設置,如果得不到,多半是對方不存在或關機,或不在同一網段內。
D. 錯誤設置IP地址
正常情況下,一臺主機應該有一個網卡,一個IP地址,或多個網卡,多個IP地址(這些地址一定要處於不同的IP子網)。但如果一臺電腦的“撥號網絡適配器”(相當於一塊軟網卡)的TCP/IP設置中,設置了一個與網卡IP地址處於同一子網的IP地址,這樣,在IP層協議看來,這臺主機就有兩個不同的接口處於同一網段內。當從這臺主機Ping其他的機器時,會存在這樣的問題:
a. 主機不知道將數據包發到哪個網絡接口,因爲有兩個網絡接口都連接在同一網段。
b. 主機不知道用哪個地址作爲數據包的源地址。因此,從這臺主機去Ping其他機器,IP層協議會無法處理,超時後,Ping 就會給出一個“超時無應答”的錯誤信息提示。但從其他主機Ping這臺主機時,請求包從特定的網卡來,ICMP只須簡單地將目的、源地址互換,並更改一些標誌即可,ICMP應答包能順利發出,其他主機也就能成功Ping通這臺機器了。
3.2 Destination host Unreachable
A. 對方與自己不在同一網段內,而自己又未設置默認的路由,比如上例中A機中不設定默認的路由,運行Ping 192.168.0.1.4就會出現“Destination host Unreachable”。
B. 網線出了故障
這裏要說明一下“destination host unreachable”和 “time out”的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因爲其他原因不可到達,這時候會出現“time out”,如果路由表中連到達目標的路由都沒有,那就會出現“destination host unreachable”。
3.3 Bad IP address
這個信息表示您可能沒有連接到DNS服務器,所以無法解析這個IP地址,也可能是IP地址不存在。
3.4 Source quench received
這個信息比較特殊,它出現的機率很少。它表示對方或中途的服務器繁忙無法迴應。
3.5 Unknown host——不知名主機
這種出錯信息的意思是,該遠程主機的名字不能被域名服務器(DNS)轉換成IP地址。故障原因可能是域名服務器有故障,或者其名字不正確,或者網絡管理員的系統與遠程主機之間的通信線路有故障。
3.6 No answer——無響應
這種故障說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的任何信息。故障原因可能是下列之一:中心主機沒有工作;本地或中心主機網絡配置不正確;本地或中心的路由器沒有工作;通信線路有故障;中心主機存在路由選擇問題。
3.7 Ping 127.0.0.1:127.0.0.1是本地循環地址
如果本地址無法Ping通,則表明本地機TCP/IP協議不能正常工作。
3.8 no rout to host
網卡工作不正常。
6.9 transmit failed,error code
10043網卡驅動不正常。
3.10 unknown host name
DNS配置不正確。